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

# Submit signed burn intents for withdrawal

> Submits up to five signed burn intent batches per request call. Each batch may contain one burn intent or a set of up to 10.



## OpenAPI

````yaml openapi/xreserve.yaml post /v1/withdraw
openapi: 3.0.2
info:
  title: Circle xReserve
  version: 1.0.0
  description: >
    xReserve enables transfers between USDC and USDC-backed tokens across
    supported blockchain networks using a secure attestation system.
servers:
  - url: https://xreserve-api-testnet.circle.com
    description: Testnet
  - url: https://xreserve-api.circle.com
    description: Mainnet
security: []
tags:
  - name: xReserve
    description: xReserve endpoints
paths:
  /v1/withdraw:
    post:
      tags:
        - xReserve
      summary: Submit signed burn intents for withdrawal
      description: >-
        Submits up to five signed burn intent batches per request call. Each
        batch may contain one burn intent or a set of up to 10.
      operationId: submitWithdrawal
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WithdrawRequest'
      responses:
        '201':
          $ref: '#/components/responses/WithdrawSubmissionResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '409':
          description: >-
            Conflict occurred. The burn transaction ID is already associated
            with an active withdrawal.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - message
                properties:
                  success:
                    type: boolean
                    example: false
                    description: Indicates that the request was not successful.
                  message:
                    type: string
                    example: >-
                      The remote `burnTxId` is already associated with an active
                      withdrawal.
                    description: An error message describing the conflict.
                  conflict:
                    type: object
                    description: >-
                      Information about the conflicting withdrawal. In the rare
                      case of a race condition, this object might only contain
                      the `burnTxId`.
                    properties:
                      withdrawalId:
                        type: string
                        format: uuid
                        example: 550e8400-e29b-41d4-a716-446655440000
                        description: The ID of the existing withdrawal in conflict.
                      burnTxId:
                        type: string
                        pattern: ^0x[a-fA-F0-9]{64}$
                        example: >-
                          0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
                        description: The burn transaction hash that caused the conflict.
        '500':
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    WithdrawRequest:
      type: object
      description: Contains signed burn intents to submit for withdrawal.
      required:
        - batches
      properties:
        batches:
          type: array
          minItems: 1
          maxItems: 5
          description: Array of burn intent batches to submit, up to five per request.
          items:
            $ref: '#/components/schemas/WithdrawBatch'
    WithdrawBatch:
      type: object
      description: >-
        Contains a single batch of signed burn intents to be included in a
        withdraw request.
      required:
        - burnIntents
        - burnSignatures
        - burnTxId
        - useCircleForwarding
      properties:
        burnIntents:
          type: array
          description: >-
            An array of burn intents. Can be either a single burn intent or a
            burn intent set.
          minItems: 1
          maxItems: 10
          items:
            $ref: '#/components/schemas/BurnIntent'
        burnSignatures:
          type: array
          minItems: 2
          description: >-
            An array of signatures for the burn intents. Multiple signatures are
            needed to meet the multi-sig threshold.
          items:
            type: string
            pattern: ^0x[a-fA-F0-9]*$
        burnTxId:
          type: string
          description: The transaction hash of the burn transaction on the remote chain.
        useCircleForwarding:
          type: boolean
          description: >-
            Indicates whether Circle should forward the transaction and release
            funds on either a CCTP supported blockchain or another remote
            blockchain.
    WithdrawSubmissionResponse:
      type: array
      description: An array of submission results for withdrawal batches.
      items:
        $ref: '#/components/schemas/WithdrawalResponse'
    ErrorResponse:
      type: object
      description: Standard error response.
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Error message
    BurnIntent:
      type: object
      description: A burn intent representing a single withdrawal request.
      required:
        - maxBlockHeight
        - maxFee
        - spec
      properties:
        maxBlockHeight:
          type: string
          pattern: ^\d+$
          description: The maximum block height at which the burn intent is valid.
          example: '1000000'
        maxFee:
          type: string
          pattern: ^\d+$
          description: >-
            The maximum fee allowed for the burn intent in the smallest token
            unit.
          example: '100000'
        spec:
          $ref: '#/components/schemas/TransferSpec'
    WithdrawalResponse:
      type: object
      description: Contains withdrawal status and details
      properties:
        withdrawalId:
          type: string
          format: uuid
          description: The unique identifier of the withdrawal group.
          example: 6149dc3d-71bf-4d57-8cc1-5e2d4c0a8e70
        burnTxId:
          type: string
          pattern: ^0x[a-fA-F0-9]+$
          description: The transaction ID of the burn on the remote network.
          example: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'
        status:
          type: string
          enum:
            - created
            - verified
            - confirmed
            - finalized
            - expired
            - failed
          description: >
            The status of the withdrawal.

            - 'created': The withdrawal has been created but the burn
            transaction on the remote network has not been verified yet.

            - 'verified': The burn transaction on the remote network has been
            successfully verified. The attestation is available but has been
            submitted on chain yet.

            - 'confirmed': The attestation has been submitted onchain but the
            transaction has not been finalized yet.

            - 'finalized': The transaction has been successfully finalized. This
            state is terminal.

            - 'expired': The attestation expired before it was used. This state
            is terminal and can be retried.

            - 'failed': The verification failed. The withdrawal cannot proceed.
            This state is terminal and cannot be retried.
        attestationPayload:
          type: string
          pattern: ^0x[a-fA-F0-9]*$
          description: The full attestation payload.
        attestation:
          type: string
          pattern: ^0x[a-fA-F0-9]*$
          description: The xReserve attestation signature.
        useCircleForwarding:
          type: boolean
          description: >-
            Indicates whether Circle should forward the transaction and release
            funds on either a CCTP supported blockchain or another remote
            blockchain.
          example: true
        transactionHash:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: The hash of forwarded transaction.
          example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
        failureReason:
          type: string
          description: The reason for failure. Returned when the `status` is 'failed'.
          example: verification_failed
        transferSpecHashes:
          type: array
          description: >-
            List of transfer specification hashes for all withdrawal intents in
            the group.
          items:
            type: string
            pattern: ^0x[a-fA-F0-9]{64}$
          example:
            - '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
      required:
        - withdrawalId
        - burnTxId
        - status
        - useCircleForwarding
        - transferSpecHashes
    TransferSpec:
      type: object
      description: Contains transfer specifications for a withdrawal.
      required:
        - version
        - sourceDomain
        - destinationDomain
        - sourceContract
        - destinationContract
        - sourceToken
        - destinationToken
        - sourceDepositor
        - destinationRecipient
        - sourceSigner
        - destinationCaller
        - value
        - salt
        - hookData
      properties:
        version:
          type: integer
          description: Transfer specification version.
          example: 1
        sourceDomain:
          type: integer
          description: Source domain ID.
          example: 0
        destinationDomain:
          type: integer
          description: Destination domain ID.
          example: 1
        sourceContract:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Source contract address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000a0b86a33e6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6'
        destinationContract:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Destination contract address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000b1c97a44e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7'
        sourceToken:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Source token address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000c2d8b55f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c'
        destinationToken:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Destination token address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000d3e9c66f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d'
        sourceDepositor:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Source depositor address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000e4fad77fadadadadadadadadadadadadadadadad'
        destinationRecipient:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Destination recipient address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000f5abc88abebebebebebebebebebebebebebebebe'
        sourceSigner:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Source signer address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0'
        destinationCaller:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Destination caller address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1'
        value:
          type: string
          pattern: ^\d+$
          description: The transfer amount in the smallest token unit.
          example: '1000000'
        salt:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Random salt that ensures uniqueness as a 32-byte hexadecimal string.
          example: '0xc3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4'
        hookData:
          $ref: '#/components/schemas/StructuredHookData'
    StructuredHookData:
      type: object
      description: >-
        Contains structured hook data for withdrawals, including forwarding and
        remote chain information.
      required:
        - remoteDomain
        - remoteDepositor
        - remoteToken
        - forwardingContractAddress
        - forwardingCalldata
      properties:
        remoteDomain:
          type: integer
          description: Remote chain domain identifier.
          example: 10001
        remoteDepositor:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Remote depositor address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000a0b86a33e6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6'
        remoteToken:
          type: string
          pattern: ^0x[a-fA-F0-9]{64}$
          description: Remote token address as a 32-byte hexadecimal string.
          example: '0x000000000000000000000000b1c97a44e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7'
        forwardingContractAddress:
          type: string
          pattern: ^0x[a-fA-F0-9]{40}$
          description: >-
            Forwarding contract address as a 20-byte hexadecimal string. If you
            are not forwarding funds, set to `0x0`.
          example: '0x0000000000000000000000000000000000000000'
        forwardingCalldata:
          type: string
          pattern: ^0x([a-fA-F0-9]{8}[a-fA-F0-9]*)?$
          description: >-
            Forwarding call data. If you are forwarding funds, set to `0x` + a
            4-byte function selector + optional data. If not forwarding, set to
            `0x`.
          example: 0x
  responses:
    WithdrawSubmissionResponse:
      description: Successfully created withdrawal records.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/WithdrawSubmissionResponse'
    ErrorResponse:
      description: Standard error response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'

````