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

# Create a transfer attestation for transferring tokens

> Generates a transfer attestation and operator signature for transferring tokens between domains



## OpenAPI

````yaml openapi/gateway.yaml post /v1/transfer
openapi: 3.0.3
info:
  title: Circle Gateway
  version: 1.0.0
  description: >
    Circle Gateway allows you to create a chain-abstracted USDC balance and
    transfer it instantly to any supported destination chain.
servers:
  - url: https://gateway-api-testnet.circle.com
  - url: https://gateway-api.circle.com
security: []
tags:
  - name: Gateway
    description: >-
      Endpoints for getting a unified USDC balance and creating attestations for
      transfer
  - name: Gateway Batch
    description: Endpoints for batch processing of EIP-3009 authorizations
  - name: Gateway x402
    description: Endpoints for x402 payment protocol integration
  - name: Webhook Subscriptions
    description: Manage webhook subscriptions for Gateway event notifications.
paths:
  /v1/transfer:
    post:
      tags:
        - Gateway
      summary: Create a transfer attestation for transferring tokens
      description: >-
        Generates a transfer attestation and operator signature for transferring
        tokens between domains
      operationId: CreateTransferAttestation
      parameters:
        - in: query
          name: maxAttestationSize
          required: false
          schema:
            type: integer
            minimum: 1
          description: >-
            Maximum allowed size (in bytes) for the encoded attestation. If the
            attestation exceeds this size, the request will be rejected with a
            400 error.
        - in: query
          name: enableForwarder
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Whether to enable the forwarding service for automatic mint
            submission.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAttestationRequest'
      responses:
        '201':
          description: Successfully created transfer attestation or attestation set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferResponse'
        '400':
          description: Invalid request parameters or invalid burn intent(s)
        '500':
          description: Internal server error
components:
  schemas:
    CreateAttestationRequest:
      type: array
      description: >-
        Batch of signed burn intents or burn intent sets. Burn intent sets are
        only supported for EVM source domains.
      minItems: 1
      items:
        oneOf:
          - $ref: '#/components/schemas/SignedBurnIntent'
          - $ref: '#/components/schemas/SignedBurnIntentSet'
    TransferResponse:
      type: object
      description: >-
        Response containing a transfer attestation or attestation set and
        operator signature
      properties:
        transferId:
          type: string
          format: uuid
          description: The unique identifier of the transfer.
        attestation:
          type: string
          pattern: ^0x[a-fA-F0-9]+$
          description: >-
            The byte-encoded transfer attestation or attestation set that should
            be passed to the minter contract
        signature:
          type: string
          pattern: ^0x[a-fA-F0-9]+$
          description: >-
            The signature of the operator on the byte-encoded transfer
            attestation or attestation set
        fees:
          $ref: '#/components/schemas/FeeSummary'
          description: Information on the transfer fees to be charged.
        expirationBlock:
          type: string
          description: >-
            The block number on the destination chain after which this
            attestation expires.
      required:
        - attestation
        - signature
        - transferId
        - fees
        - expirationBlock
    SignedBurnIntent:
      type: object
      properties:
        burnIntent:
          $ref: '#/components/schemas/BurnIntent'
        signature:
          type: string
          pattern: ^0x[a-fA-F0-9]+$
          description: The signature over the burnIntent.
      required:
        - burnIntent
        - signature
    SignedBurnIntentSet:
      type: object
      properties:
        burnIntentSet:
          $ref: '#/components/schemas/BurnIntentSet'
        signature:
          type: string
          pattern: ^0x[a-fA-F0-9]+$
          description: The signature over the burnIntentSet.
      required:
        - burnIntentSet
        - signature
    FeeSummary:
      type: object
      description: Aggregated fee information for a transfer request.
      properties:
        total:
          type: string
          description: Total fees from all burn intents across chains.
          example: '1.178'
        token:
          $ref: '#/components/schemas/Token'
          description: Token symbol.
          example: USDC
        perIntent:
          type: array
          items:
            $ref: '#/components/schemas/IntentFee'
          description: List of fee breakdowns for each burn intent.
        forwardingFee:
          type: string
          description: Forwarding fee charged for the transfer.
          example: '0.210000'
      required:
        - total
        - token
        - perIntent
    BurnIntent:
      type: object
      properties:
        maxBlockHeight:
          $ref: '#/components/schemas/Uint256'
          description: The maximum block height at which this burn is valid.
        maxFee:
          $ref: '#/components/schemas/Uint256'
          description: The maximum fee the user is willing to pay.
        spec:
          $ref: '#/components/schemas/TransferSpec'
        recipientSetupOptions:
          $ref: '#/components/schemas/RecipientSetupOptions'
      required:
        - maxBlockHeight
        - maxFee
        - spec
    BurnIntentSet:
      type: object
      properties:
        intents:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/BurnIntent'
      required:
        - intents
    Token:
      type: string
      description: Supported tokens for Gateway
      enum:
        - USDC
    IntentFee:
      type: object
      description: Fee breakdown for a single burn intent.
      properties:
        transferSpecHash:
          $ref: '#/components/schemas/Bytes32'
          description: Keccak256 hash of the encoded transfer specification.
        domain:
          $ref: '#/components/schemas/Domain'
          description: >-
            The domain ID of the chain where the burn intent originated
            (uint32).
        baseFee:
          type: string
          description: Fixed gas fee charged for the burn transaction.
          example: '2'
        transferFee:
          type: string
          description: Variable fee based on transfer amount. Omitted for same-chain burns.
          example: '0.125'
      required:
        - transferSpecHash
        - domain
        - baseFee
    Uint256:
      type: string
      description: A large integer value, represented as a string.
      example: '1000000000000000000'
    TransferSpec:
      type: object
      properties:
        version:
          type: integer
          minimum: 0
          maximum: 4294967295
          description: Version of the transfer spec (uint32).
          example: 1
        sourceDomain:
          type: integer
          minimum: 0
          maximum: 4294967295
          description: The domain of the wallet contract this transfer came from (uint32).
          example: 0
        destinationDomain:
          type: integer
          minimum: 0
          maximum: 4294967295
          description: >-
            The domain of the minter contract this transfer is valid for
            (uint32).
          example: 4
        sourceContract:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The address of the wallet contract on the source domain (32-byte
            padded).
        destinationContract:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The address of the minter contract on the destination domain
            (32-byte padded).
        sourceToken:
          $ref: '#/components/schemas/Bytes32'
          description: The token address on the source domain (32-byte padded).
        destinationToken:
          $ref: '#/components/schemas/Bytes32'
          description: The token address on the destination domain (32-byte padded).
        sourceDepositor:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The address to debit within the wallet contract on the source domain
            (32-byte padded).
        destinationRecipient:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The address that should receive the funds on the destination domain
            (32-byte padded).
        sourceSigner:
          $ref: '#/components/schemas/Bytes32'
          description: The signer who signed for the transfer (32-byte padded).
        destinationCaller:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The address of the caller who may use the attestation, 0 address if
            any caller (32-byte padded).
        value:
          $ref: '#/components/schemas/Uint256'
          description: The amount to be transferred.
        salt:
          $ref: '#/components/schemas/Bytes32'
          description: An arbitrary value chosen by the user to be unique.
        hookData:
          $ref: '#/components/schemas/Hex'
          description: Arbitrary bytes that may be used for onchain composition (optional).
      required:
        - version
        - sourceDomain
        - destinationDomain
        - sourceContract
        - destinationContract
        - sourceToken
        - destinationToken
        - sourceDepositor
        - destinationRecipient
        - sourceSigner
        - destinationCaller
        - value
        - salt
    RecipientSetupOptions:
      type: object
      description: >-
        Options for automatic Associated Token Account (ATA) creation on Solana.
        When the destination chain is Solana, the destinationRecipient must be
        an initialized USDC token account. If the recipient does not already
        have one, the Forwarding Service can create the ATA as part of the mint
        transaction. Omit this field if the recipient already has a USDC token
        account.
      properties:
        includeRecipientSetup:
          type: boolean
          description: >-
            Set to true to request automatic ATA creation. The Solana rent cost
            for token account creation will be included in the forwarding fee.
        recipientOwnerAddress:
          $ref: '#/components/schemas/Bytes32'
          description: >-
            The recipient's Solana wallet address in bytes32 hex format (32
            bytes, hex-encoded).
      required:
        - includeRecipientSetup
        - recipientOwnerAddress
    Bytes32:
      type: string
      pattern: ^0x[a-fA-F0-9]{64}$
      example: '0x1234567890123456789012345678901234567890123456789012345678901234'
      description: A 32-byte hex string.
    Domain:
      type: integer
      enum:
        - 0
        - 1
        - 2
        - 3
        - 5
        - 6
        - 7
        - 10
        - 13
        - 14
        - 16
        - 19
        - 26
      description: |
        Circle domain identifiers for supported chains:

        - 0 - Ethereum
        - 1 - Avalanche
        - 2 - OP
        - 3 - Arbitrum
        - 5 - Solana
        - 6 - Base
        - 7 - Polygon PoS
        - 10 - Unichain
        - 13 - Sonic
        - 14 - World Chain
        - 16 - Sei
        - 19 - HyperEVM
        - 26 - Arc
    Hex:
      type: string
      pattern: ^0x[a-fA-F0-9]*$
      example: '0x1a2b3c4d'
      description: A hex string.

````