> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.io/llms.txt
> Use this file to discover all available pages before exploring further.

# App Kit SDK: Earn

> Deposit USDC or EURC into vaults that generate yield using the App Kit SDK's Earn capability

The [App Kit SDK](/app-kit) includes the Earn capability that lets you deposit
USDC or EURC into vaults that generate yield. Vaults are powered by underlying
DeFi lending protocols. Earn handles vault discovery and share to asset
conversion, so you don't need to integrate each vault contract directly.

Earn is available for USDC and EURC on Arc.

## How it works

When you deposit USDC into an Earn vault, you receive vault shares that grow in
value as the vault earns yield. To exit, you redeem your shares back to USDC,
which by then is worth your deposit plus the yield earned.

```mermaid theme={null}
flowchart LR
  Wallet["Wallet:<br/>1,000 USDC"] -->|deposit| Shares["Vault shares:<br/>Grow as yield accrues"]
  Shares -->|withdraw| Out["Wallet:<br/>1,040 USDC<br/>(deposit + yield)"]
```

Earn is non-custodial: deposited USDC lives in the vault contract, and
integrators choose which vaults to deposit into.

## Quick look

This code snippet fetches vault details and deposits into a vault:

```typescript TypeScript theme={null}
// Fetch vault details
const { vaults } = await kit.earn.exploreVaults({
  chain: "Arc_Testnet",
  sortBy: "apy",
});

// Deposit into the first vault
const result = await kit.earn.deposit({
  from: { adapter, chain: "Arc_Testnet" },
  vaultAddress: vaults[0].vaultAddress,
  amount: "10.00",
});
```

For a complete end-to-end flow, follow the
[quickstart](/app-kit/quickstarts/earn-deposit).

## API key

Earn accepts an optional
[Circle API key](https://developers.circle.com/api-reference/keys) obtained from
the [Circle Console](https://console.circle.com/api-keys). Pass one as `apiKey`
in the operation config. Without one, requests share a rate limit. Production
traffic typically needs a key to avoid hitting it. For a restricted key, select
the "App Kits" product permission when creating the key.

API keys are environment specific. Testnet and mainnet each need their own key.

Keep the API key server-side. The App Kit SDK rejects an API key passed from a
browser context.

## Installation

[Install the App Kit SDK](/app-kit/tutorials/installation) to use Earn. If you
only need Earn and don't want to install the full App Kit SDK, install the
standalone Earn Kit for your preferred adapter:

<Tabs>
  <Tab title="Viem">
    <CodeGroup>
      ```bash npm theme={null}
      npm install @circle-fin/earn-kit @circle-fin/adapter-viem-v2 viem
      ```

      ```bash yarn theme={null}
      yarn add @circle-fin/earn-kit @circle-fin/adapter-viem-v2 viem
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Ethers">
    <CodeGroup>
      ```bash npm theme={null}
      npm install @circle-fin/earn-kit @circle-fin/adapter-ethers-v6 ethers
      ```

      ```bash yarn theme={null}
      yarn add @circle-fin/earn-kit @circle-fin/adapter-ethers-v6 ethers
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Circle Wallets">
    <CodeGroup>
      ```bash npm theme={null}
      npm install @circle-fin/earn-kit @circle-fin/adapter-circle-wallets
      ```

      ```bash yarn theme={null}
      yarn add @circle-fin/earn-kit @circle-fin/adapter-circle-wallets
      ```
    </CodeGroup>
  </Tab>
</Tabs>
