> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reap.global/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit withdrawal signature

> Submits the wallet owner signature over the current signing payload. The withdrawal then proceeds to broadcast.



## OpenAPI

````yaml /api-reference/openapi.json post /crypto-withdrawals/{id}/sign
openapi: 3.1.0
info:
  title: Reap API
  version: 1.0.0
  description: Reap platform API
servers:
  - url: https://sg.sandbox.api.reap.global
    description: Singapore sandbox
  - url: https://sg.prod.api.reap.global
    description: Singapore production
  - url: https://mx.sandbox.api.reap.global
    description: Mexico sandbox
  - url: https://mx.prod.api.reap.global
    description: Mexico production
  - url: https://sandbox.api.reap.global
    description: Singapore sandbox (alias)
  - url: https://prod.api.reap.global
    description: Singapore production (alias)
security:
  - bearerAuth: []
tags:
  - name: Accounts
  - name: Activities
  - name: Card Designs
  - name: Card Shipments
  - name: Card Transactions
  - name: Cards
  - name: Companies
  - name: Crypto Deposits
  - name: Crypto Withdrawals
  - name: Disputes
  - name: Fiat Deposits
  - name: Fraud Alerts
  - name: Policies
  - name: Simulation
  - name: Users
  - name: Virtual Asset Postings
  - name: Virtual Assets
  - name: Webhooks
  - name: Agentic
paths:
  /crypto-withdrawals/{id}/sign:
    post:
      tags:
        - Crypto Withdrawals
      summary: Submit withdrawal signature
      description: >-
        Submits the wallet owner signature over the current signing payload. The
        withdrawal then proceeds to broadcast.
      operationId: sign_crypto-withdrawals
      parameters:
        - name: id
          in: path
          required: true
          schema:
            description: Crypto withdrawal ID
            type: string
            format: uuid
        - name: Reap-Version
          in: header
          required: true
          schema:
            type: string
            enum:
              - '2025-02-14'
            description: API version (YYYY-MM-DD)
            example: '2025-02-14'
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 255
            description: >-
              Unique key for safely retrying this request. Up to 255 characters;
              we recommend a UUIDv4. The first request executes and its response
              is cached; subsequent requests with the same key replay the cached
              response (24h retention).
      requestBody:
        description: Submit the wallet owner signature for a crypto withdrawal
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                executionId:
                  description: The `executionId` returned with the payload that was signed
                  type: string
                  format: uuid
                signature:
                  type: string
                  description: Owner signature over `payloadToSign`
              required:
                - executionId
                - signature
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                executionId:
                  description: The `executionId` returned with the payload that was signed
                  type: string
                  format: uuid
                signature:
                  type: string
                  description: Owner signature over `payloadToSign`
              required:
                - executionId
                - signature
          multipart/form-data:
            schema:
              type: object
              properties:
                executionId:
                  description: The `executionId` returned with the payload that was signed
                  type: string
                  format: uuid
                signature:
                  type: string
                  description: Owner signature over `payloadToSign`
              required:
                - executionId
                - signature
      responses:
        '200':
          description: Crypto withdrawal resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CryptoWithdrawal'
        '400':
          description: The signature does not verify against the registered signer
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: CRYPTO_WITHDRAWAL_SIGNATURE_INVALID
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: CryptoWithdrawalSignatureInvalidError
        '404':
          description: Crypto withdrawal not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: CRYPTO_WITHDRAWAL_NOT_FOUND
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: CryptoWithdrawalNotFoundError
        '409':
          description: Response for status 409
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_NOT_SIGNABLE
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalNotSignableError
                    description: The withdrawal is no longer awaiting a signature
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_PAYLOAD_STALE
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalPayloadStaleError
                    description: >-
                      The signed payload is not the current one for this
                      withdrawal
components:
  schemas:
    CryptoWithdrawal:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique withdrawal identifier
        accountId:
          type: string
          format: uuid
          description: Account the funds are withdrawn from
        chainId:
          type: string
          enum:
            - ETHEREUM_MAINNET
            - ETHEREUM_SEPOLIA
            - BASE_MAINNET
            - BASE_SEPOLIA
            - ARBITRUM_ONE_MAINNET
            - ARBITRUM_ONE_SEPOLIA
            - POLYGON_MAINNET
            - POLYGON_AMOY
            - SOLANA_MAINNET
            - SOLANA_DEVNET
          description: Blockchain network the transfer happens on
          example: ETHEREUM_MAINNET
        asset:
          $ref: '#/components/schemas/AssetInfo'
        amount:
          type: string
          examples:
            - '100.000000'
          description: >-
            Gross amount requested, with decimals applied. The fee is taken out
            of this rather than charged on top.
        netAmount:
          type: string
          examples:
            - '99.750000'
          description: 'Amount the destination receives: the gross less the fee'
        fee:
          type: object
          properties:
            amount:
              type: string
              examples:
                - '0.250000'
              description: Fee retained, with decimals applied
            asset:
              $ref: '#/components/schemas/AssetInfo'
          required:
            - amount
            - asset
          description: Fee charged for the withdrawal, fixed at the time it was requested
        destinationAddress:
          type: string
          description: Address the funds are sent to
        status:
          type: string
          enum:
            - PENDING_SIGNATURE
            - PROCESSING
            - COMPLETED
            - EXPIRED
            - CANCELLED
            - FAILED
          description: Current withdrawal status
          example: PENDING_SIGNATURE
        failureReason:
          anyOf:
            - type: string
              enum:
                - REJECTED_BY_COMPLIANCE
                - ACCOUNT_RESTRICTED
                - TRANSACTION_FAILED
              description: >-
                - `REJECTED_BY_COMPLIANCE`: Rejected by compliance review

                - `ACCOUNT_RESTRICTED`: The account was restricted while the
                withdrawal was open

                - `TRANSACTION_FAILED`: The transfer did not go through on chain
              example: REJECTED_BY_COMPLIANCE
            - type: 'null'
          description: What went wrong. Set only when the status is `FAILED`.
        transactionId:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            On-chain transaction identifier. Present once the transfer has been
            submitted to the network, which happens while the status is still
            `PROCESSING`.
        expiresAt:
          type: string
          description: >-
            When the signature window closes. Past this point the withdrawal is
            closed and the funds become spendable again.
        completedAt:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            When the transfer was observed to be irreversible on-chain, which is
            when the status became `COMPLETED`. Null until then.
        createdAt:
          type: string
          description: ISO 8601 creation timestamp
        updatedAt:
          type: string
          description: ISO 8601 last update timestamp
      required:
        - id
        - accountId
        - chainId
        - asset
        - amount
        - netAmount
        - fee
        - destinationAddress
        - status
        - failureReason
        - transactionId
        - expiresAt
        - completedAt
        - createdAt
        - updatedAt
    AssetInfo:
      type: object
      properties:
        symbol:
          type: string
          examples:
            - USDC
            - USDT
            - ETH
          description: Asset symbol
        name:
          anyOf:
            - type: string
            - type: 'null'
          examples:
            - USD Coin
            - Ethereum
          description: Full asset name
        decimals:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          examples:
            - 6
            - 18
          description: Number of decimal places
        logoUri:
          anyOf:
            - type: string
            - type: 'null'
          description: URI to asset logo image
      required:
        - symbol
        - name
        - decimals
        - logoUri
      description: Asset metadata
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key as Bearer token

````