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

# CCTP for non-USDC compared to CCTP

> Key integration differences for developers already familiar with CCTP who want to transfer existing configured tokens.

Integrating CCTP for non-USDC when you already know CCTP for USDC is mostly a
matter of switching entry contracts and adjusting for a different fee model. The
following sections document the key differences for developers integrating
pre-configured or third-party-configured tokens.

## What stays the same

This layer shares CCTP's core infrastructure:

* **Message transmitter**: Both use `MessageTransmitterV2`. Attestations are
  delivered to the same contract on the destination.
* **Attestation service**: Both use Iris (Circle's attestation API). Polling
  `/v2/messages/{sourceDomain}` works the same way.
* **Finality thresholds**: `minFinalityThreshold = 2000` for standard, `1000`
  for fast. Same semantics as CCTP fast transfers.
* **Hooks**: Available on both protocols. The `CrossChainTokenExecutable`
  interface is analogous to CCTP's `IMessageHandlerV2`.

## Key integration differences

### Entry contract and approval target

| | CCTP | CCTP for non-USDC |
| - | - | - |
| Source entry | `TokenMessengerV2` | `CrossChainTokenService` |
| Approval target | `TokenMessengerV2` | Per-token `TokenManager` (not the service) |

For CCTP, you approve `TokenMessengerV2` and call `depositForBurn`. For non-USDC
transfers, resolve the per-token `TokenManager` address from
`CrossChainTokenService` using `resolveTokenManager(tokenId)`, approve that
address, then call `crossChainTransfer` on the service.

Approving the service contract directly does not work; the approval must go to
the `TokenManager`.

### Fee model

CCTP deducts its fee from the transferred USDC amount; the recipient receives
slightly less than the sender transferred. Non-USDC fees are paid in native gas
on the source blockchain at transfer time, so the recipient receives the full
transferred amount.

### Forwarding

CCTP forwarding (auto-delivery of the destination mint) is compulsory whenever
the forwarding service is used. For non-USDC transfers, forwarding is opt-in:
include a `FORWARD` entry in the `requests` array when you fetch the Iris fee
quote. Transfers that omit `FORWARD` require you or the recipient to submit
`receiveMessage` on the destination `MessageTransmitterV2` manually.

### Allowance pools for fast transfers

Both protocols support fast transfers, but they track allowance separately. USDC
fast transfers consume the USDC allowance; non-USDC fast transfers consume a
per-token allowance maintained by Circle. Check the per-token allowance using
`GET /v2/cctpx/allowances` before initiating a fast transfer; if the allowance
is insufficient or FX pricing is not configured for the token, the quote returns
`FX_SYMBOL_NOT_CONFIGURED` and the fast transfer cannot proceed.

### Token prerequisite

USDC works on CCTP without setup. Non-USDC transfers require the token to be
configured before it can be transferred. If you are using a pre-configured token
(such as EURC), the token is already available and no configuration step is
needed on your end. To check which tokens are pre-configured, see
[Supported blockchains](/cctp/expanded-assets/concepts/supported-chains-and-domains).
