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

# Initiate crypto withdrawal

> Reserves funds against an in-flight withdrawal and opens the signature window. Fetch a signing payload with `GET /crypto-withdrawals/:id/payload`, then submit the owner signature with `POST /crypto-withdrawals/:id/sign`.



## OpenAPI

````yaml /api-reference/openapi.json post /crypto-withdrawals/
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/:
    post:
      tags:
        - Crypto Withdrawals
      summary: Initiate crypto withdrawal
      description: >-
        Reserves funds against an in-flight withdrawal and opens the signature
        window. Fetch a signing payload with `GET
        /crypto-withdrawals/:id/payload`, then submit the owner signature with
        `POST /crypto-withdrawals/:id/sign`.
      operationId: create_crypto-withdrawals
      parameters:
        - 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: Initiate a crypto withdrawal from an account wallet
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  description: Account whose wallet the funds leave
                  type: string
                  format: uuid
                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 to withdraw on
                  example: ETHEREUM_MAINNET
                assetId:
                  description: >-
                    Asset to withdraw - the token contract address, or a
                    reserved identifier for the chain native asset
                  type: string
                amount:
                  type: string
                  examples:
                    - '100.000000'
                    - '0.5'
                    - '1234.99'
                  description: >-
                    Gross amount to withdraw, with decimals applied. The fee is
                    taken out of this rather than charged on top.
                destinationAddress:
                  type: string
                  description: Address that receives the net amount
              required:
                - accountId
                - chainId
                - assetId
                - amount
                - destinationAddress
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                accountId:
                  description: Account whose wallet the funds leave
                  type: string
                  format: uuid
                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 to withdraw on
                  example: ETHEREUM_MAINNET
                assetId:
                  description: >-
                    Asset to withdraw - the token contract address, or a
                    reserved identifier for the chain native asset
                  type: string
                amount:
                  type: string
                  examples:
                    - '100.000000'
                    - '0.5'
                    - '1234.99'
                  description: >-
                    Gross amount to withdraw, with decimals applied. The fee is
                    taken out of this rather than charged on top.
                destinationAddress:
                  type: string
                  description: Address that receives the net amount
              required:
                - accountId
                - chainId
                - assetId
                - amount
                - destinationAddress
          multipart/form-data:
            schema:
              type: object
              properties:
                accountId:
                  description: Account whose wallet the funds leave
                  type: string
                  format: uuid
                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 to withdraw on
                  example: ETHEREUM_MAINNET
                assetId:
                  description: >-
                    Asset to withdraw - the token contract address, or a
                    reserved identifier for the chain native asset
                  type: string
                amount:
                  type: string
                  examples:
                    - '100.000000'
                    - '0.5'
                    - '1234.99'
                  description: >-
                    Gross amount to withdraw, with decimals applied. The fee is
                    taken out of this rather than charged on top.
                destinationAddress:
                  type: string
                  description: Address that receives the net amount
              required:
                - accountId
                - chainId
                - assetId
                - amount
                - destinationAddress
      responses:
        '200':
          description: Crypto withdrawal resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CryptoWithdrawal'
        '400':
          description: Response for status 400
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_INVALID_ASSET
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalInvalidAssetError
                    description: Asset is not valid for the requested chain
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_INVALID_DESTINATION
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalInvalidDestinationError
                    description: Destination address is not valid for the requested chain
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_ACCOUNT_NOT_ACTIVE
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalAccountNotActiveError
                    description: Account is not active and cannot withdraw
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_ACCOUNT_PAUSED
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalAccountPausedError
                    description: Withdrawals are paused on this account
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_CHAIN_NOT_AVAILABLE
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalChainNotAvailableError
                    description: The account has no holdings on this chain
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_BELOW_MINIMUM
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalBelowMinimumError
                    description: Withdrawal amount is below the minimum for this chain
                  - type: object
                    properties:
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            const: CRYPTO_WITHDRAWAL_INSUFFICIENT_WITHDRAWABLE
                          message:
                            type: string
                          detail:
                            anyOf:
                              - type: object
                                additionalProperties: {}
                              - type: 'null'
                        required:
                          - code
                          - message
                          - detail
                    required:
                      - error
                    title: CryptoWithdrawalInsufficientWithdrawableError
                    description: Withdrawal amount exceeds the withdrawable balance
        '403':
          description: Crypto withdrawals are not enabled for this project
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: CRYPTO_WITHDRAWALS_NOT_ENABLED
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: CryptoWithdrawalsNotEnabledError
        '404':
          description: Account not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: CRYPTO_WITHDRAWAL_ACCOUNT_NOT_FOUND
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: CryptoWithdrawalAccountNotFoundError
        '409':
          description: A withdrawal is already in flight for this wallet
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: CRYPTO_WITHDRAWAL_ALREADY_IN_FLIGHT
                      message:
                        type: string
                      detail:
                        anyOf:
                          - type: object
                            additionalProperties: {}
                          - type: 'null'
                    required:
                      - code
                      - message
                      - detail
                required:
                  - error
                title: CryptoWithdrawalAlreadyInFlightError
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

````