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

# Create a USDC transfer quote

> Returns a signed, time-bound fee quote for a native USDC transfer. A quote prices the fees a caller must pay and includes a `signedQuote` blob that the `TokenMessengerWithFees` contract verifies onchain.

The `requests` array selects which fees to price: a `FORWARD` request prices destination-chain forwarding, while a `PRE_FINALITY` request prices faster-than-finality settlement. Include at most one request per type.




## OpenAPI

````yaml openapi/cctp.yaml post /v2/quote/burn/usdc/{sourceDomainId}/{destDomainId}
openapi: 3.0.2
info:
  version: '1.0'
  title: Cross-Chain Transfer Protocol (CCTP)
  description: >
    Circle's Cross-Chain Transfer Protocol enables you to build seamless user
    experiences for sending and transacting USDC natively across blockchains.


    CCTP endpoints enable advanced capabilities such as fetching attestations
    for faster-than-finality burn events, verifying public keys across versions,
    accessing transaction details, querying Fast Transfer allowances and fees,
    and initiating re-attestation processes.
servers:
  - url: https://iris-api-sandbox.circle.com
  - url: https://iris-api.circle.com
security: []
tags:
  - name: CCTP
    description: Cross-Chain Transfer Protocol endpoints
  - name: CCTP V1 (Legacy)
    description: Legacy Cross-Chain Transfer Protocol endpoints
  - name: Quotes
    description: Signed, time-bound fee quotes for USDC transfers
paths:
  /v2/quote/burn/usdc/{sourceDomainId}/{destDomainId}:
    post:
      tags:
        - Quotes
      summary: Create a USDC transfer quote
      description: >
        Returns a signed, time-bound fee quote for a native USDC transfer. A
        quote prices the fees a caller must pay and includes a `signedQuote`
        blob that the `TokenMessengerWithFees` contract verifies onchain.


        The `requests` array selects which fees to price: a `FORWARD` request
        prices destination-chain forwarding, while a `PRE_FINALITY` request
        prices faster-than-finality settlement. Include at most one request per
        type.
      operationId: createUsdcBurnQuote
      parameters:
        - name: sourceDomainId
          in: path
          required: true
          description: >-
            Source domain identifier for the blockchain the transfer starts
            from. Must be an EVM blockchain where upfront fees are supported,
            and must satisfy the applicable source-side requirements for
            included request types. For example, a `PRE_FINALITY` request
            requires a source blockchain where Fast Transfer is supported.
          schema:
            type: integer
            minimum: 0
          example: 0
        - name: destDomainId
          in: path
          required: true
          description: >-
            Destination domain identifier for the blockchain the transfer
            settles on. Must differ from `sourceDomainId` and must satisfy the
            applicable destination-side requirements for included request types.
            For example, a `FORWARD` request requires a destination blockchain
            where the Forwarding Service is supported.
          schema:
            type: integer
            minimum: 0
          example: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUsdcBurnQuoteRequest'
            examples:
              nativeGasFeeToken:
                summary: Fees paid in the source-chain native gas token
                description: >-
                  Uses the zero address for `feeToken`, so fees are priced in
                  the source-chain native gas token.
                value:
                  amount: '1000000'
                  feeToken: '0x0000000000000000000000000000000000000000'
                  requests:
                    - type: FORWARD
                    - type: PRE_FINALITY
              usdcFeeToken:
                summary: Fees paid in USDC
                description: >-
                  Prices fees in USDC by setting `feeToken` to the source-chain
                  USDC address (Ethereum mainnet USDC shown here).
                value:
                  amount: '1000000'
                  feeToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
                  requests:
                    - type: FORWARD
      responses:
        '200':
          description: Successfully created a signed USDC transfer quote.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsdcBurnQuoteResponse'
        '400':
          description: >-
            The request is invalid, references an unknown domain or fee token,
            or specifies an unsupported route.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteErrorResponse'
        '403':
          description: The requested transaction type is not authorized for this route.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteErrorResponse'
        '422':
          description: >-
            The pre-finality fee is unavailable or the allowance is insufficient
            for this route.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteErrorResponse'
        '503':
          description: >-
            The quote service is not configured or enabled, or is temporarily
            unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteErrorResponse'
components:
  schemas:
    CreateUsdcBurnQuoteRequest:
      title: CreateUsdcBurnQuoteRequest
      type: object
      description: >-
        Specifies the transfer amount, fee token, and fees to price for a USDC
        transfer quote.
      additionalProperties: false
      required:
        - amount
        - requests
      properties:
        amount:
          type: string
          pattern: ^[1-9]\d*$
          description: >-
            The transfer amount in USDC minor units, as a positive decimal
            integer string.
          example: '1000000'
        feeToken:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
          description: >-
            The token used to pay fees, as a source-chain EVM address. Defaults
            to the zero address, which requests fees in the source-chain native
            gas token.
          default: '0x0000000000000000000000000000000000000000'
        requests:
          type: array
          minItems: 1
          maxItems: 2
          description: >-
            The fees to price. Include a `FORWARD` request, a `PRE_FINALITY`
            request, or both. Each type may appear at most once.
          example:
            - type: FORWARD
            - type: PRE_FINALITY
          items:
            oneOf:
              - title: ForwardFeeRequest
                type: object
                description: Prices destination-chain forwarding of the transfer.
                additionalProperties: false
                required:
                  - type
                properties:
                  type:
                    type: string
                    enum:
                      - FORWARD
                    description: >-
                      Requests a Forwarding Service fee. The destination
                      blockchain must support the Forwarding Service.
                  params:
                    type: object
                    description: Forwarding parameters. Defaults to an empty object.
                    additionalProperties: false
                    properties:
                      hookData:
                        type: string
                        pattern: ^0x([a-fA-F0-9]{2})*$
                        description: >-
                          Optional hook data to execute on the destination
                          chain, as 0x-prefixed even-length hexadecimal. If
                          supplied, it must contain forwarding hook data (with
                          `cctp-forward` magic bytes). Omit to price the
                          destination chain's default forwarding behavior.
                      destinationCaller:
                        type: string
                        pattern: ^0x([a-fA-F0-9]{40}|[a-fA-F0-9]{64})$
                        description: >-
                          The address authorized to finalize the transfer on the
                          destination chain, as a 20-byte EVM address or a
                          32-byte value. Defaults to the zero address, which
                          authorizes any caller.
                        default: '0x0000000000000000000000000000000000000000'
              - title: PreFinalityFeeRequest
                type: object
                description: Prices faster-than-finality settlement.
                additionalProperties: false
                required:
                  - type
                properties:
                  type:
                    type: string
                    enum:
                      - PRE_FINALITY
                    description: >-
                      Requests a Fast Transfer fee. The source blockchain must
                      support Fast Transfer.
    UsdcBurnQuoteResponse:
      title: UsdcBurnQuoteResponse
      type: object
      description: A signed, time-bound fee quote for a USDC transfer.
      required:
        - signedQuote
        - issuedAt
        - expiry
        - feeTotalAmount
        - feeToken
        - items
        - nonce
      properties:
        signedQuote:
          type: string
          pattern: ^0x([a-fA-F0-9]{2})*$
          description: >-
            The signed quote blob to submit to the `TokenMessengerWithFees`
            contract.
          example: '0xabcdef'
        issuedAt:
          type: integer
          description: >-
            The server time the quote was issued, as a Unix timestamp in
            seconds. Compute remaining validity relative to this value rather
            than the client clock.
          example: 1735689540
        expiry:
          oneOf:
            - title: TimestampExpiry
              type: object
              description: The quote's expiry when it is encoded as a wall-clock time.
              required:
                - mode
                - expiresAt
              properties:
                mode:
                  type: string
                  enum:
                    - TIMESTAMP
                  description: The expiry encoding used by this quote.
                expiresAt:
                  type: integer
                  description: >-
                    The exact wall-clock time at which the quote expires, as a
                    Unix timestamp in seconds.
                  example: 1735689600
            - title: BlockNumberExpiry
              type: object
              description: >-
                The quote's expiry when it is encoded as a source-chain block
                number.
              required:
                - mode
                - expiresAtBlock
                - blockEstimatedAt
              properties:
                mode:
                  type: string
                  enum:
                    - BLOCK_NUMBER
                  description: The expiry encoding used by this quote.
                expiresAtBlock:
                  type: integer
                  description: >-
                    The authoritative source-chain block at which the quote
                    expires.
                  example: 21000000
                blockEstimatedAt:
                  type: integer
                  description: >-
                    An advisory wall-clock estimate of when `expiresAtBlock` is
                    reached, as a Unix timestamp in seconds, assuming the
                    configured block time.
                  example: 1735689600
          description: >
            The quote's expiry. The `mode` field discriminates the shape:
            `TIMESTAMP` exposes an exact wall-clock `expiresAt`, while
            `BLOCK_NUMBER` exposes the authoritative onchain `expiresAtBlock`
            alongside an advisory `blockEstimatedAt`.
        feeTotalAmount:
          type: string
          description: >-
            The total fee across all items, in the fee token's minor units, as a
            decimal integer string.
          example: '1000'
        feeToken:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
          description: >-
            The token the fees are denominated in, as a source-chain EVM
            address.
          example: '0x0000000000000000000000000000000000000000'
        items:
          type: array
          description: The individual fees that sum to `feeTotalAmount`, one per fee type.
          items:
            type: object
            description: A single priced fee within the quote.
            required:
              - type
              - amount
              - args
              - argsHash
            properties:
              type:
                type: string
                enum:
                  - FORWARD
                  - PRE_FINALITY
                description: The fee category this item prices.
              amount:
                type: string
                description: >-
                  The fee amount in the fee token's minor units, as a decimal
                  integer string.
                example: '1000'
              args:
                type: array
                description: >-
                  The ABI-encoded arguments the `TokenMessengerWithFees`
                  contract verifies for this item.
                items:
                  type: string
                example:
                  - >-
                    0x0000000000000000000000000000000000000000000000000000000000000001
              argsHash:
                type: string
                pattern: ^0x[a-fA-F0-9]{64}$
                description: The keccak-256 hash of `args` as a 32-byte hexadecimal string.
                example: >-
                  0x1234567890123456789012345678901234567890123456789012345678901234
        nonce:
          type: string
          description: >-
            Reserved for future use as a unique identifier for the quote. The
            `TokenMessengerWithFees` contract currently enforces a zero nonce.
          example: '0'
        metadata:
          type: object
          description: >-
            Optional pricing metadata. Present when exchange-rate conversion was
            applied.
          required:
            - exchangeRates
          properties:
            exchangeRates:
              type: object
              required:
                - feeTokenUsd
                - destinationTokenUsd
              properties:
                feeTokenUsd:
                  type: string
                  description: The USD price of the fee token used for conversion.
                  example: '1.00'
                destinationTokenUsd:
                  type: string
                  description: The USD price of the destination token used for conversion.
                  example: '1.00'
    QuoteErrorResponse:
      title: QuoteErrorResponse
      type: object
      description: A Quote API error.
      required:
        - errorCode
        - error
      properties:
        errorCode:
          type: string
          description: A stable, client-facing error identifier.
          enum:
            - UNKNOWN_DOMAIN
            - UNSUPPORTED_ROUTE
            - UNSUPPORTED_FEE_TOKEN
            - SERVICE_NOT_CONFIGURED
            - SERVICE_NOT_ENABLED
            - RPC_UNAVAILABLE
            - PRICING_UNAVAILABLE
            - PRE_FINALITY_UNAVAILABLE
            - PRE_FINALITY_INSUFFICIENT_ALLOWANCE
            - INVALID_PAYLOAD
            - UNAUTHORIZED_TRANSACTION_TYPE
            - UNSUPPORTED_CHAIN
            - UNSUPPORTED_WORKFLOW
            - VALIDATION_ERROR
          example: VALIDATION_ERROR
        error:
          type: string
          description: A human-readable description of the error.
          example: Source and destination domain cannot be the same

````