Create a Circle API key and configure a business account; complete Circle's KYB process before initiating live payments
To send USDC on-chain, call POST /v1/transfers with source (your Circle wallet ID), destination (external blockchain address or Circle wallet), amount, and currency=USD
Specify the blockchain chain (e.g., ETH, SOL, MATIC, AVAX) in the destination object; choose based on your recipient's preferred chain and fee/speed tradeoffs — Circle supports multiple chains
Poll GET /v1/transfers/{id} or listen to Circle webhooks (transfers.type=transfer) for status transitions: pending -> confirmed -> complete; 'confirmed' means the transaction has enough block confirmations per Circle's chain-specific threshold
For incoming USDC, create a blockchain deposit address via POST /v1/wallets/{id}/addresses with currency=USD and the target chain; monitor the webhook event type=wire.deposit or transfers.inbound for receipts
To convert USDC to fiat, use Circle's wire-out flow (POST /v1/payouts) with bankAccount destination details; the USDC is burned and a corresponding wire is originated to the beneficiary bank account
Known gotchas
On-chain USDC transfers are irreversible once confirmed; implement an explicit review step (human or rule-based) before executing large or first-time transfers — there is no chargeback mechanism
Circle's required confirmation count varies by chain and may change; do not assume a fixed number of confirmations — use the 'complete' status from Circle's API rather than counting blocks yourself
Cross-chain USDC is not natively fungible at the smart contract level; USDC on Ethereum and USDC on Solana are different tokens bridged by Circle — sending to the wrong chain address will result in permanent loss of funds
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp