Skip to main content

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.

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.
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 and Going to production for environment details.

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.
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
{
  "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:
{
  "code": 400,
  "message": "Unsupported chain value. See supported currencies and blockchains for valid options."
}
See the supported currencies and blockchains reference for valid values.

Step 2. List deposit addresses

Retrieve all deposit addresses for an account.
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
{
  "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.
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
{
  "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"
    }
  ]
}
For real-time deposit notifications, configure webhook notifications instead of polling the deposits endpoint.

See also