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

# How-to: Onboard EEA customers

> Onboard EEA business end users under the MiCA authorization of Circle France SAS.

Onboarding EEA-resident business end users follows the same core API flow as
non-EEA onboarding, but routes through Circle France SAS rather than Circle LLC,
and requires EEA Terms acceptance before account activation. For the non-EEA
onboarding path, see
[Onboard customers](/digital-asset-accounts/quickstarts/onboard-customers).

Your path to serving EEA end users depends on whether your business sits in the
flow of funds:

| Model | Flow of funds | Onboarding path |
| - | - | - |
| Partner | Not in flow of funds | Manual Partner Enablement process with Circle |
| Wholesale | In flow of funds | COP Level 3 KYB on Circle France SAS + Compliance flow-of-funds program review + wholesale custody provisioning |

The following steps apply to the **wholesale model**.

## Prerequisites

Before you begin, ensure that you've:

* Signed a distributor agreement with Circle France SAS, or confirmed your
  Circle LLC agreement covers EEA end users through a cross-entity arrangement.
* Integrated the EEA Terms into your product to surface them to end users and
  record click-through acceptance.
* Provisioned EEA sandbox access for Digital Asset Accounts through your Circle
  representative. EEA sandbox uses the same `api-sandbox.circle.com` host and
  credentials as standard DAA sandbox access; your Circle representative enables
  EEA routing on your existing sandbox account.

## Steps

### Step 1. Determine your booking pattern

EEA end users are always booked to Circle France SAS, but the booking pattern
depends on which Circle entity you contract with. Two patterns are supported:

* **Circle France SAS distributor**: You contract with Circle France SAS. All
  EEA end-user subaccounts are booked to Circle France SAS, and full MiCA
  controls apply throughout.
* **Circle LLC distributor**: You contract with Circle LLC. EEA-resident end
  users are automatically booked to Circle France SAS at the subaccount level;
  no re-contracting is required.

For a full explanation of booking patterns, entity responsibilities, and asset
segregation requirements, see
[EEA operations under MiCA](/digital-asset-accounts/concepts/eea-and-mica).

### Step 2. Complete COP Level 3 KYB for the end user

EEA business end users must complete COP Level 3 KYB with Circle France SAS. The
verification flow uses the same End User Onboarding API. Follow the steps in
[Onboard customers](/digital-asset-accounts/quickstarts/onboard-customers),
keeping the following EEA differences in mind:

* The contracting entity is **Circle France SAS**. Use your EEA-provisioned
  credentials and the EEA sandbox environment.
* COP Level 3 requires business entity verification, beneficial owner details,
  and supporting documentation.
* In production, a Compliance flow-of-funds program review is also required
  before the account can be activated. Your Circle representative will initiate
  this review after the KYB application is submitted.

### Step 3. Surface EEA terms and capture acceptance

Before submitting the onboarding application, surface the
[EEA Terms](https://www.circle.com/legal/eea-terms) in your product and record
the end user's click-through acceptance.

Pass the acceptance when submitting the application:

```bash theme={null}
curl --request POST \
  --url https://api-sandbox.circle.com/v1/onboarding/partner/applications/{applicationId}/submit \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --header "X-Idempotency-Key: $(uuidgen)" \
  --data '{
    "endUserIpAddress": "203.0.113.1",
    "endUserAgreesToTermsOfService": true
  }'
```

Do not submit an application with `endUserAgreesToTermsOfService` set to `false`
or omitted. The account cannot be activated without recorded acceptance.

### Step 4. Provision and activate the subaccount

After KYB approval and EEA Terms acceptance, retrieve the active subaccount
using the `clientEntityId` from the onboarding flow:

```bash theme={null}
curl --request GET \
  --url "https://api-sandbox.circle.com/v1/accounts?clientEntityId={clientEntityId}" \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

```json theme={null}
{
  "data": [
    {
      "accountId": "1017407114",
      "clientEntityId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "client",
      "status": "active",
      "description": "Digital Asset Account External Entity Wallet",
      "balances": []
    }
  ]
}
```

The subaccount is booked to Circle France SAS and ready for onchain
transactions.

## EEA account differences

EEA subaccounts differ from the standard model in several ways:

* **Inbound crypto deposits**: Deposits may enter a `held` state pending Travel
  Rule evaluation before crediting to the account. See
  [Transaction states](/digital-asset-accounts/references/transaction-states).
* **Outbound crypto transfers**: All external beneficiary addresses must be
  pre-registered in the Platform Address Book before a transfer can be
  initiated. See
  [EEA API behavior](/digital-asset-accounts/references/eea-api-behavior).
* **SCA-sensitive actions**: Programmatic money movement requires mTLS with a
  Qualified Website Authentication Certificate (QWAC) in addition to a bearer
  token. For the full list of SCA-governed actions and the authentication flow,
  see [EEA API behavior](/digital-asset-accounts/references/eea-api-behavior).
