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

# How-to: Create deposit addresses

> Generate blockchain deposit addresses to receive stablecoin deposits

Generate blockchain-specific deposit addresses so your end customers can receive
stablecoins from external wallets. After creating an address, you can list
existing addresses for an account and monitor incoming deposits as they credit
the account balance.

## Prerequisites

Before you begin:

* Obtain an API key for Digital Asset Accounts from Circle.
* Have an onboarded and active account with an `accountId`.
* Install cURL on your development machine.

<Note>
  The Digital Asset Accounts API base URL is `https://api-sandbox.circle.com` for
  sandbox and `https://api.circle.com` for production. Set your API key in the
  `Authorization` header using the format `Bearer YOUR_API_KEY`. See
  [Sandbox environment](/digital-asset-accounts/references/testing-in-sandbox) and
  [Going to production](/digital-asset-accounts/references/going-to-production)
  for environment details.
</Note>

## Steps

### Step 1. Generate a deposit address

Create a deposit address for a specific blockchain. You can create multiple
addresses per account, one for each blockchain.

For valid `chain` values, see
[Supported currencies and blockchains](/digital-asset-accounts/references/supported-currencies-and-blockchains).

```shell theme={null}
curl --request POST \
  --url https://api-sandbox.circle.com/v1/accounts/addresses/deposit \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ${YOUR_API_KEY}' \
  --header 'Content-Type: application/json' \
  --data '
{
  "idempotencyKey": "${RANDOM_UUID}",
  "currency": "USD",
  "chain": "ETH",
  "accountId": "${ACCOUNT_ID}"
}
'
```

**Response**

```json theme={null}
{
  "data": {
    "id": "d1e2f3a4-b5c6-7890-def1-234567890abc",
    "address": "0xabcdef1234567890abcdef1234567890abcdef12",
    "currency": "USD",
    "chain": "ETH",
    "accountId": "1017381855"
  }
}
```

Share the `address` value with your end customer. Any USDC sent to this Ethereum
address is credited to the account.

If you pass an unsupported value in the `chain` field, the API returns a `400`
error:

```json theme={null}
{
  "code": 400,
  "message": "Unsupported chain value. See supported currencies and blockchains for valid options."
}
```

See the
[supported currencies and blockchains](/digital-asset-accounts/references/supported-currencies-and-blockchains)
reference for valid values.

### Step 2. List deposit addresses

Retrieve all deposit addresses for an account.

```shell theme={null}
curl --request GET \
  --url 'https://api-sandbox.circle.com/v1/accounts/addresses/deposit?accountId=${ACCOUNT_ID}' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ${YOUR_API_KEY}'
```

**Response**

```json theme={null}
{
  "data": [
    {
      "id": "d1e2f3a4-b5c6-7890-def1-234567890abc",
      "address": "0xabcdef1234567890abcdef1234567890abcdef12",
      "currency": "USD",
      "chain": "ETH",
      "accountId": "1017381855"
    }
  ]
}
```

### Step 3. Monitor incoming deposits

When stablecoins arrive at a deposit address, the system detects the transaction
and creates a deposit record. Use the list deposits endpoint to check for
incoming deposits.

```shell theme={null}
curl --request GET \
  --url 'https://api-sandbox.circle.com/v1/accounts/deposits?accountId=${ACCOUNT_ID}' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ${YOUR_API_KEY}'
```

**Response**

```json theme={null}
{
  "data": [
    {
      "id": "e2f3a4b5-c6d7-8901-ef23-456789abcdef",
      "sourceAccountId": "1017381855",
      "destination": {
        "type": "account",
        "id": "1017381855"
      },
      "amount": {
        "amount": "1000.00",
        "currency": "USD"
      },
      "status": "complete",
      "createDate": "2026-03-16T08:30:00Z",
      "updateDate": "2026-03-16T08:35:00Z"
    }
  ]
}
```

<Note>
  For real-time deposit notifications, configure
  [webhook notifications](/api-reference/webhook-endpoints#v1-notifications)
  instead of polling the deposits endpoint.
</Note>

## See also

* [Send crypto transfers](/digital-asset-accounts/howtos/crypto-transfers)
* [Set up webhook notifications](/api-reference/webhook-endpoints#v1-notifications)
