> ## 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.

> ## Agent Instructions
> Before reading these docs, install the relevant Circle Skill to get pre-loaded context — skills are LLM-optimized and cover architecture decisions, correct flows, and common pitfalls. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills. Available skills: use-usdc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md (balances, transfers, approvals on EVM and Solana); EURC has no skill — see https://developers.circle.com/stablecoins/what-is-eurc.md; bridge-stablecoin https://github.com/circlefin/skills/blob/master/plugins/circle/skills/bridge-stablecoin/SKILL.md (crosschain transfers via CCTP, USDC, EURC, and third-party assets); use-arc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md (Arc chain config, contract deployment, USDC bridging — Arc docs: https://docs.arc.io/llms.txt); use-circle-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md (choose wallet type); use-developer-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md (custodial wallets for payouts and treasury); use-user-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md (embedded wallets with Web2 login); use-modular-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md (smart contract wallets with passkeys and ERC-4337); use-gateway https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md (unified USDC balance, nanopayments); use-smart-contract-platform https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md (deploy, interact, monitor contracts). Pair any skill with the Circle MCP server for live SDK signatures, contract addresses, and chain IDs: {"mcpServers":{"circle":{"url":"https://api.circle.com/v1/codegen/mcp"}}}.
> Read the product overview first. Each product has an overview explaining when and why to use it. Read it before quickstarts.
> Pick the right wallet type. Developer-controlled (you hold keys), user-controlled (end user holds keys via PIN/social login), or modular (smart contract wallets with passkeys). See https://developers.circle.com/wallets.md.
> Use CCTP V2 for crosschain transfers. CCTP natively transfers USDC and EURC via burn-and-mint, and supports permissionless wrapping of third-party assets via lock-and-mint. V1 is legacy; always use V2 unless V1 is specified or the chain requires it (Noble, Sui, and Aptos still require V1). Migration guide: https://developers.circle.com/cctp/migration-from-v1-to-v2.md.
> Use Bridge Kit for frontend bridging. Wraps CCTP with a simpler SDK for user-facing apps. Use CCTP directly for backend transfers.
> Gas Station vs Paymaster. Gas Station sponsors gas for Circle Wallet transactions. Paymaster lets users pay gas in USDC. Different use cases — read both overviews.
> Gateway Nanopayments for sub-cent payments. Gasless USDC micropayments down to $0.000001 via x402 and batched settlement. For pay-per-request APIs, AI agent payments, streaming.
> Look up USDC addresses per chain. Never hardcode — use https://developers.circle.com/stablecoins/usdc-contract-addresses.md.
> Prefer SDKs over raw API calls. Node.js and Python SDKs handle auth, retries, and errors.
> API key required. Bearer token in Authorization header. Testnet and mainnet use separate keys and may use different base URLs depending on the product.
> Set up webhooks when available. Most operations are async. Webhooks deliver transaction confirmations and state changes.
> When calling list endpoints, paginate using pageSize and pageAfter until no nextPageAfter cursor is returned—stopping at the first page silently misses records.
> Building an AI agent? Start with the Agent Stack—Circle CLI, agent wallets, and nanopayments built for autonomous use cases: https://developers.circle.com/agent-stack.md.

# Sandbox environment

> Use Circle's sandbox environment for safe development and testing of your Digital Asset Accounts integration

The Digital Asset Accounts sandbox environment lets you safely test your
integration without generating real financial transactions or interacting with
live blockchains. The sandbox APIs match those in production, making it easy to
transition when you are ready to go live.

## Request sandbox access

Digital Asset Accounts sandbox access is not automatically provisioned. After
signing up for a Circle sandbox account, contact your Circle representative to
request Digital Asset Accounts access. Circle must enable this access on your
account before you can use the End User Onboarding and Digital Asset Accounts
APIs. Until access is granted, calls to these endpoints return errors.

## API environments and hosts

Use these hosts to access the Digital Asset Accounts API in sandbox and
production environments.

| Environment | API host |
| :- | :- |
| Sandbox | `https://api-sandbox.circle.com` |
| Production | `https://api.circle.com` |

## Authentication

All API requests require authentication. Include your API key in the
`Authorization` header:

```text theme={null}
Authorization: Bearer YOUR_API_KEY
```

To verify that your API key is correctly set up, you can make a test request to
any read endpoint, such as listing accounts:

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

If your API key is valid, you receive a successful response. If the key is
invalid, you receive a `401 Unauthorized` error.

<Warning>
  **Keep your API keys safe.** Never share your API key or record it in a publicly
  accessible medium such as client-side code or public repositories.
</Warning>

## Sandbox capabilities

The sandbox supports all Digital Asset Accounts API operations:

| Feature | Sandbox behavior |
| - | - |
| Account creation | Accounts are created and KYB is auto-approved |
| Wire deposits | Simulated wire deposits that credit instantly |
| Wire withdrawals | Simulated withdrawals that complete without real fiat movement |
| Crypto deposits | Simulated blockchain deposits |
| Crypto transfers | Simulated outbound transfers that complete without real blockchain transactions |
| Internal transfers | Processed identically to production |
| Webhooks | Notifications are sent to subscriber endpoints |

## Onboard an end customer

To test deposits, withdrawals, or transfers against an end customer account, you
must first onboard a business client through the End User Onboarding API.

See [Onboard customers](/digital-asset-accounts/quickstarts/onboard-customers)
for a step-by-step walkthrough.

## Simulating wire deposits

After onboarding a client and retrieving their account, you can simulate wire
deposits without sending real bank transfers. Create a wire account, retrieve
the wire instructions, then use the mock deposit endpoint to trigger a simulated
deposit:

```shell theme={null}
curl --request POST \
  --url https://api-sandbox.circle.com/v1/mocks/payments/wire \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ${YOUR_API_KEY}' \
  --header 'Content-Type: application/json' \
  --data '
{
  "trackingRef": "${TRACKING_REF}",
  "amount": {
    "amount": "10000.00",
    "currency": "USD"
  },
  "beneficiaryBank": {
    "accountNumber": "1234567890",
    "routingNumber": "121140399"
  }
}
'
```

Use the `trackingRef` and `beneficiaryBank` details from the wire instructions
endpoint. The mock deposit is processed immediately and the balance is credited
to the account.

## Simulating crypto deposits

There is no mock endpoint for crypto deposits. Instead, the sandbox
auto-confirms deposits to generated addresses. After creating a deposit address
using the `/v1/accounts/addresses/deposit` endpoint, any test transactions sent
to that address are automatically detected and credited. For details on how
deposit
[transaction states](/digital-asset-accounts/references/transaction-states)
progress, see the transaction states reference.

## Differences between sandbox and production

Be aware of the following differences when testing in sandbox:

* **KYB verification**: Account KYB is automatically approved in sandbox. In
  production, KYB verification takes time and may result in rejection.
* **Wire processing**: Wire deposits and withdrawals settle instantly in
  sandbox. In production, wire transfers take 1-2 business days.
* **Blockchain confirmations**: Crypto deposits are confirmed instantly in
  sandbox. In production, confirmation times depend on the blockchain.
* **Transaction limits**: Sandbox limits differ from production limits. Test
  your limit-handling logic, but verify against production limits before launch.

## Moving to production

When you are ready to go live, see
[Going to production](/digital-asset-accounts/references/going-to-production).
