---
updatedAt: 2026-06-02T20:06:00.000Z
agentTools:
  projectIndex: https://docs.zerohash.com/llms.txt
---

# Create withdrawal request

Creates new withdrawal requests to be settled. Withdrawal requests created through the API go directly into an APPROVED state.

### Specifying the destination

Provide **exactly one** of the following per request (zerohash always responds with `withdrawal_account_id`):

| Method | Field | Use for |
| --- | --- | --- |
| Saved account | `withdrawal_account_id` | Pre-whitelisted crypto address or fiat account (recommended) |
| Inline crypto | `address` (+ `destination_tag` for tag assets) | An on-chain address |
| Inline fiat | `account{}` | A bank wire (DOMESTIC / REAL_TIME / INTERNATIONAL) |

To retrieve saved account IDs use `GET /withdrawals/digital_asset_addresses` (crypto) and `GET /withdrawals/fiat_accounts` (fiat).

💡 Use the **Examples** dropdown on the request body to see a ready-to-use request for each destination method and withdrawal type.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "zerohash API",
    "description": "\n### Authentication\n\nzerohash Uses HMAC SHA-256 verification to ensure the authenticity of API requests, follow instructions by link [https://docs.zerohash.com/reference/api-authentication](https://docs.zerohash.com/reference/api-authentication)\n\n<a href=\"/zh-swagger.json\">Download zerohash OpenAPI Schema as JSON</a>\n",
    "version": "1.7.0"
  },
  "servers": [
    {
      "url": "https://api.cert.zerohash.com",
      "description": "Certification API server"
    }
  ],
  "x-readme": {
    "proxy-enabled": false
  },
  "tags": [
    {
      "name": "Withdrawals",
      "description": "Initiate and monitor withdrawals from accounts"
    }
  ],
  "paths": {
    "/withdrawals/requests": {
      "post": {
        "tags": [
          "Withdrawals"
        ],
        "summary": "Create withdrawal request",
        "description": "Creates new withdrawal requests to be settled. Withdrawal requests created through the API go directly into an APPROVED state.\n\n### Specifying the destination\n\nProvide **exactly one** of the following per request (zerohash always responds with `withdrawal_account_id`):\n\n| Method | Field | Use for |\n| --- | --- | --- |\n| Saved account | `withdrawal_account_id` | Pre-whitelisted crypto address or fiat account (recommended) |\n| Inline crypto | `address` (+ `destination_tag` for tag assets) | An on-chain address |\n| Inline fiat | `account{}` | A bank wire (DOMESTIC / REAL_TIME / INTERNATIONAL) |\n\nTo retrieve saved account IDs use `GET /withdrawals/digital_asset_addresses` (crypto) and `GET /withdrawals/fiat_accounts` (fiat).\n\n💡 Use the **Examples** dropdown on the request body to see a ready-to-use request for each destination method and withdrawal type.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Signature"
          },
          {
            "$ref": "#/components/parameters/Timestamp"
          }
        ],
        "requestBody": {
          "description": "Withdrawal request details including account ID, asset, amount, and destination information.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalRequestBody"
              },
              "examples": {
                "saved_account_by_id": {
                  "summary": "Saved account by ID (withdrawal_account_id)",
                  "description": "Withdraw to a **pre-whitelisted** crypto address or fiat account by its `withdrawal_account_id` — the recommended path. Fetch IDs from `GET /withdrawals/digital_asset_addresses` (crypto) or `GET /withdrawals/fiat_accounts` (fiat). Do **not** also send `address` or `account{}`.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "5e0949b1-fc02-4d0a-8b7c-0d1e2f3a4b5c",
                    "asset": "BTC",
                    "amount": "0.01",
                    "withdrawal_account_id": "146"
                  }
                },
                "crypto_utxo_btc": {
                  "summary": "Crypto — UTXO (BTC)",
                  "description": "Withdraw a **UTXO-model** crypto asset (e.g. BTC, LTC, BCH, DOGE) to a whitelisted on-chain `address`. Amount is denominated in the asset.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "6f1a5b2c-0d3e-4a1b-9c8d-1e2f3a4b5c6d",
                    "asset": "BTC",
                    "amount": "0.01",
                    "address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
                  }
                },
                "crypto_account_based_erc20": {
                  "summary": "Crypto — account-based (USDC.ETH)",
                  "description": "Withdraw an **account-based** crypto asset (e.g. an ERC-20 token or ETH) to a whitelisted on-chain `address`. Same shape as the UTXO example — only the `asset` differs.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "7a2b6c3d-1e4f-4b2c-8d9e-2f3a4b5c6d7e",
                    "asset": "USDC.ETH",
                    "amount": "250",
                    "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
                  }
                },
                "crypto_tag_based_xrp": {
                  "summary": "Crypto — tag-based (XRP)",
                  "description": "Withdraw a **tag-model** asset (e.g. XRP, XLM, EOS, HBAR). These require `no_destination_tag`; when it is `false`, `destination_tag` is required.\n\n> zerohash requires `no_destination_tag: false` for **EOS**.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "8b3c7d4e-2f5a-4c3d-9e0f-3a4b5c6d7e8f",
                    "asset": "XRP",
                    "amount": "100",
                    "address": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
                    "no_destination_tag": false,
                    "destination_tag": "1234567"
                  }
                },
                "domestic_fiat_usd_wire": {
                  "summary": "Fiat — DOMESTIC_FIAT (USD wire)",
                  "description": "Withdraw **USD** to a US bank via domestic wire. The destination is supplied inline as an `account` object with `type: \"DOMESTIC_FIAT\"` and a `routing_number` (ABA).",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "9c4d8e5f-3a6b-4d4e-8f1a-4b5c6d7e8f90",
                    "asset": "USD",
                    "amount": "500.00",
                    "account": {
                      "type": "DOMESTIC_FIAT",
                      "name": "Primary (3000)",
                      "account_number": "1234563000",
                      "routing_number": "021000021",
                      "beneficiary_name": "John Doe",
                      "bank_name": "JPMorgan Chase",
                      "recipient_instructions": "Invoice #123"
                    }
                  }
                },
                "real_time_fiat_usd": {
                  "summary": "Fiat — REAL_TIME_FIAT (24/7 USD)",
                  "description": "Withdraw **USD** over real-time rails (24/7, including outside normal banking hours). Same US account fields as DOMESTIC_FIAT (`account_number` + `routing_number`); only `type: \"REAL_TIME_FIAT\"` differs.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "a0d5e6f7-4b7c-4e5f-8f1a-5c6d7e8f9012",
                    "asset": "USD",
                    "amount": "150.00",
                    "account": {
                      "type": "REAL_TIME_FIAT",
                      "name": "Primary (3000)",
                      "account_number": "1234563000",
                      "routing_number": "021000021",
                      "beneficiary_name": "John Doe",
                      "bank_name": "JPMorgan Chase"
                    }
                  }
                },
                "international_fiat_eur_swift": {
                  "summary": "Fiat — INTERNATIONAL_FIAT (EUR SWIFT)",
                  "description": "Withdraw an **international** currency (e.g. EUR, GBP) via SWIFT. The destination is an `account` object with `type: \"INTERNATIONAL_FIAT\"`, the IBAN in `account_number`, and the beneficiary bank's `swift_code`.",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "b1e6f708-5c8d-4f60-9012-6d7e8f901234",
                    "asset": "EUR",
                    "amount": "750.00",
                    "account": {
                      "type": "INTERNATIONAL_FIAT",
                      "name": "EUR Vendor (3000)",
                      "account_number": "DE89370400440532013000",
                      "swift_code": "DEUTDEFF",
                      "beneficiary_name": "Hans Müller",
                      "bank_name": "Deutsche Bank"
                    }
                  }
                },
                "international_fiat_eur_intermediary": {
                  "summary": "Fiat — INTERNATIONAL_FIAT with intermediary bank (EUR SWIFT)",
                  "description": "Same as the INTERNATIONAL_FIAT example, but routed through an **intermediary (correspondent) bank** — required when the beneficiary bank has no direct SWIFT relationship. Set `intermediary_bank: true` and provide the intermediary bank details (`intermediary_bank_name`, `intermediary_bank_code_type`, `intermediary_bank_code`, and `intermediary_bank_account_number`).",
                  "value": {
                    "account_group": "PLAT01",
                    "account_label": "sub_account_test",
                    "participant_code": "ABCDEF",
                    "client_withdrawal_request_id": "c2f70819-6d9e-4071-a123-7e8f90123456",
                    "asset": "EUR",
                    "amount": "1200.00",
                    "account": {
                      "type": "INTERNATIONAL_FIAT",
                      "name": "EUR Vendor (3000)",
                      "account_number": "DE89370400440532013000",
                      "swift_code": "DEUTDEFF",
                      "beneficiary_name": "Hans Müller",
                      "bank_name": "Deutsche Bank",
                      "intermediary_bank": true,
                      "intermediary_bank_name": "JPMorgan Chase Bank, N.A.",
                      "intermediary_bank_code_type": "SWIFT",
                      "intermediary_bank_code": "CHASUS33",
                      "intermediary_bank_account_number": "US64SVBKUS6S3300958879",
                      "recipient_instructions": "Invoice #456"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully created withdrawal request. Returns the created resource with generated IDs and timestamps.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostWithdrawalRequestsResponse"
                },
                "example": {
                  "message": {
                    "id": "9084dd8f-ab9f-4f9b-a22b-49bdb4915a93",
                    "withdrawal_account_id": 3709509,
                    "participant_code": "ABCDEF",
                    "beneficiary_participant_code": null,
                    "sender_participant_code": null,
                    "requestor_participant_code": "ABCDEF",
                    "requested_amount": "0.1004142",
                    "settled_amount": "0.100414200000000000",
                    "status": "APPROVED",
                    "asset": "BTC",
                    "account_group": "PLAT01",
                    "account_label": null,
                    "transaction_id": "0x0c36fd59b0f48257b5cd02cdf23fd8fb8230e27c5ddd28ce02c8a6a4736da4e6",
                    "input_data": null,
                    "requested_timestamp": 1777830138534,
                    "created_timestamp": "2026-05-03T17:40:10.733Z",
                    "gas_price": null,
                    "client_withdrawal_request_id": "20aed707-3127-427d-a47e-97efc6470cb3",
                    "on_chain_status": "CONFIRMED",
                    "fee_amount": "0.000004021417575",
                    "withdrawal_fee": "0",
                    "quoted_fee_amount": null,
                    "quoted_fee_notional": null,
                    "quoted_fee_asset": null,
                    "trade_id": null,
                    "parent_link_id": null,
                    "parent_link_id_source": null,
                    "amount_in_usd": 234.32708342365032,
                    "contract_validation_id": null,
                    "recipient_instructions": "Invoice #123"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Code400"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Code403"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Code404"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Code500"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Code503"
                }
              }
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "apiKey": [],
      "apiPassphrase": []
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "description": "Your API public key. See the [Authentication guide](https://docs.zerohash.com/reference/api-authentication) for how to obtain keys.",
        "in": "header",
        "name": "X-SCX-API-KEY"
      },
      "apiPassphrase": {
        "type": "apiKey",
        "description": "The passphrase associated with your API key, set when the key was created.",
        "in": "header",
        "name": "X-SCX-PASSPHRASE"
      }
    },
    "parameters": {
      "Signature": {
        "name": "X-SCX-SIGNED",
        "in": "header",
        "description": "HMAC-SHA256 signature of the request, base64-encoded. See the [Authentication guide](https://docs.zerohash.com/reference/api-authentication) for the exact signing formula.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Timestamp": {
        "name": "X-SCX-TIMESTAMP",
        "in": "header",
        "description": "Current Unix timestamp in seconds. Must be within 60 seconds of server time or the request is rejected.",
        "required": true,
        "schema": {
          "type": "string",
          "example": "1678901234"
        }
      }
    },
    "schemas": {
      "Code400": {
        "type": "object",
        "description": "Request was rejected by validation or a downstream service. `errors` is an array of human-readable messages; each entry describes a single validation failure or business-rule violation.",
        "required": [
          "errors"
        ],
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "body/amount must be >= 0",
              "body/asset is required"
            ]
          }
        }
      },
      "Code403": {
        "type": "object",
        "description": "Authentication or authorization failed. `error` is always `true`; `message` explains which check failed (missing API key, bad signature, insufficient permission, etc.).",
        "required": [
          "error",
          "message"
        ],
        "properties": {
          "error": {
            "type": "boolean",
            "example": true
          },
          "message": {
            "type": "string",
            "example": "This api key does not have write permission to this endpoint"
          }
        }
      },
      "Code404": {
        "type": "object",
        "description": "The requested resource does not exist or is not visible to the caller.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "example": "Not Found"
          }
        }
      },
      "Code500": {
        "type": "object",
        "description": "An unexpected error occurred on the server. The request can be retried after a short delay, but the same inputs may reproduce the error.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "example": "Internal Server Error"
          }
        }
      },
      "Code503": {
        "type": "object",
        "description": "A downstream dependency was unavailable, timed out, or returned a retryable error. Safe to retry; the response carries a `zh-allow-retry: true` header.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "example": "Service Unavailable"
          }
        }
      },
      "PostWithdrawalRequestsBody": {
        "type": "object",
        "title": "Post Withdrawal Requests Body, all accepted fields",
        "properties": {
          "client_withdrawal_request_id": {
            "type": "string",
            "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed\n      Note: this must be unique, per platform, per 24 hour period",
            "example": "c6af3d80-1aca-4280-b96b-a9b8d7ced46a"
          },
          "withdrawal_account_id": {
            "type": "string",
            "description": "The whitelisted withdrawal account or address to withdraw funds to\n      Note: only one of withdrawal_account_id, address or account{} can be submitted per withdrawal, but zerohash will always respond with withdrawal_account_id",
            "example": "146"
          },
          "address": {
            "type": "string",
            "description": "The whitelisted withdrawal account or address to withdraw funds to\n        Note: only one of withdrawal_account_id, address or account{} can be submitted per withdrawal, but zerohash will always respond with withdrawal_account_id",
            "example": "2NCgV7BXXafJZ86utcYFs5m3tCpkcpLafeG"
          },
          "account": {
            "type": "object",
            "description": "The whitelisted withdrawal account or address to withdraw funds to\n        Note: only one of withdrawal_account_id, address or account{} can be submitted per withdrawal, but zerohash will always respond with withdrawal_account_id",
            "properties": {
              "name": {
                "type": "string",
                "description": "The nickname given to the withdrawal account\n            Note: zerohash will append the last 4 digits of the account number to this when saving it"
              },
              "limit": {
                "type": "number",
                "description": "The limit applied to the account on a per-withdrawal basis"
              },
              "type": {
                "type": "string",
                "description": "The type of account: REAL_TIME_FIAT for 24/7 USD withdrawals, DOMESTIC_FIAT for US wires or INTERNATIONAL_FIAT for international wires"
              },
              "beneficiary_name": {
                "type": "string",
                "description": "The owner of the account at the withdrawal destination"
              },
              "account_number": {
                "type": "string",
                "description": "The unique IBAN or account number for the final withdrawal destination"
              },
              "bank_name": {
                "type": "string",
                "description": "The name of the destination financial institution"
              },
              "routing_number": {
                "type": "string",
                "description": "For US wires, the ABA routing number identifies the destination financial institution"
              },
              "swift_code": {
                "type": "string",
                "description": "SWIFT code, if applicable"
              },
              "recipient_instructions": {
                "type": "string",
                "description": "Per-request memo or wire reference for this withdrawal. Overrides the account-level default if provided. An empty string explicitly clears the memo. Omitting this field leaves the account-level value unchanged. Max 255 characters.",
                "maxLength": 255,
                "example": "Invoice #123"
              },
              "intermediary_bank": {
                "type": "boolean",
                "description": "Whether or not an intermediary bank is used"
              },
              "intermediary_bank_name": {
                "type": "string",
                "description": "Intermediary bank name, if applicable"
              },
              "intermediary_bank_code_type": {
                "type": "string",
                "description": "Intermediary bank identifier code type, if applicable\n          Options include SWIFT"
              },
              "intermediary_bank_code": {
                "type": "string",
                "description": "Intermediary bank identifier that corresponds to intermediary_bank_code_type, if applicable"
              },
              "intermediary_bank_account_number": {
                "type": "string",
                "description": "Intermediary bank IBAN or account number, if applicable"
              },
              "correspondent_bank_name": {
                "type": "string",
                "description": "Correspondent bank name, if applicable"
              },
              "correspondent_bank_code_type": {
                "type": "string",
                "description": "Correspondent bank identifier code type, if applicable\n          Options include SWIFT"
              },
              "correspondent_bank_code": {
                "type": "string",
                "description": "Correspondent bank identifier that corresponds to correspondent_bank_code_type, if applicable"
              },
              "correspondent_bank_account_number": {
                "type": "string",
                "description": "Correspondent bank IBAN or account number, if applicable"
              }
            }
          },
          "participant_code": {
            "type": "string",
            "description": "The participant code against whom the withdrawal will be made",
            "example": "ABCDEF"
          },
          "beneficiary_participant_code": {
            "type": "string",
            "description": "The identifier of the participant benefiting from the withdrawal request.",
            "example": "BENEFI"
          },
          "sender_participant_code": {
            "type": "string",
            "description": "The identifier of the participant initiating the withdrawal on behalf of `participant_code`. Only applicable when operating on behalf of a third party.",
            "example": "SENDER"
          },
          "beneficiary_first_name": {
            "type": "string",
            "description": "The first name of the participant benefiting from the quote request\n        Only applies to individual beneficiaries. Cannot be used along with business_beneficiary_name.\n        Note: Redundant if beneficiary_participant_code is provided in request",
            "example": "John"
          },
          "beneficiary_last_name": {
            "type": "string",
            "description": "The last name of the participant benefiting from the quote request\n        Only applies to individual beneficiaries. Cannot be used along with business_beneficiary_name.\n        Note: Redundant if beneficiary_participant_code is provided in request",
            "example": "Doe"
          },
          "beneficiary_business_name": {
            "type": "string",
            "description": "The name of the the business participant benefiting from the quote request\n        Only applies to business beneficiaries. Cannot be used along with first/last_beneficiary_name.\n        Note: Redundant if beneficiary_participant_code is provided in request",
            "example": "ACME Inc."
          },
          "account_group": {
            "type": "string",
            "description": "The account group to withdraw against. This must be the platform code of the platform requesting the withdrawal (e.g. `PLAT01`).\n\n> Note: platforms **cannot** withdraw from the zerohash market account group (`00SCXM`) — they do not have withdrawal permissions on it.",
            "example": "PLAT01"
          },
          "account_label": {
            "type": "string",
            "description": "The account label associated with the account",
            "example": "sub_account_test"
          },
          "amount": {
            "type": "string",
            "description": "The amount to withdraw",
            "example": "20.1"
          },
          "asset": {
            "type": "string",
            "enum": [
              "XRP",
              "XLM",
              "EOS",
              "ADA",
              "ALGO"
            ],
            "description": "The asset code for the withdrawal request, e.g. XRP.",
            "example": "BTC"
          },
          "destination_tag": {
            "type": "string",
            "description": "The destination tag or memo ID associated with the transaction\n      If the asset is EOS, XLM or XRP and no_destination_tag is false, then this is required"
          },
          "no_destination_tag": {
            "type": "boolean",
            "description": "Whether or not the specific withdrawal and destination address requires a destination tag.If the asset `model` is `tag`, this field is required\n **Note: zerohash requires that `no_destination_tag` be `false` for `EOS`**.",
            "example": false
          },
          "gas_price": {
            "type": "string",
            "description": "Applicable only for ERC-20 tokens, the transaction fee payable on the Ethereum network - refer to our FAQ on how this works",
            "example": "0.0001"
          },
          "input_data": {
            "type": "string",
            "description": "Applicable only for smart contract executions on the Ethereum blockchain. This is the ABI encoding of the function and its arguments in RLP format."
          },
          "trade_id": {
            "type": "string",
            "description": "If provided will apply the earlier agreed-upon network fee amount from the provided trade.",
            "example": "a81bc81b-dead-4e5d-abff-90865d1e13b1"
          }
        }
      },
      "WithdrawalRequestBody": {
        "anyOf": [
          {
            "title": "UTXO and Account-Based Withdrawals",
            "type": "object",
            "description": "Withdrawal request body for assets with the account `model` as `utxo`  or `account_based`.",
            "properties": {
              "client_withdrawal_request_id": {
                "type": "string",
                "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed\n      Note: this must be unique, per platform, per 24 hour period",
                "example": "c6af3d80-1aca-4280-b96b-a9b8d7ced46a"
              },
              "participant_code": {
                "type": "string",
                "description": "The participant code against whom the withdrawal will be made",
                "example": "ABCDEF"
              },
              "account_group": {
                "type": "string",
                "description": "The account group to withdraw against. This must be the platform code of the platform requesting the withdrawal (e.g. `PLAT01`).\n\n> Note: platforms **cannot** withdraw from the zerohash market account group (`00SCXM`) — they do not have withdrawal permissions on it.",
                "example": "PLAT01"
              },
              "account_label": {
                "type": "string",
                "description": "The account label associated with the account",
                "example": "sub_account_test"
              },
              "amount": {
                "type": "string",
                "description": "The amount to withdraw",
                "example": "20.1"
              },
              "asset": {
                "type": "string",
                "description": "The asset code for the withdrawal request, e.g. BTC",
                "example": "BTC",
                "enum": [
                  "BTC",
                  "BCH",
                  "ADA",
                  "DOGE",
                  "LTC",
                  "ETH.BASE",
                  "USDC.BASE",
                  "AAVE.ETH",
                  "BAT.ETH",
                  "COMP.ETH",
                  "CRV.ETH",
                  "DAI.ETH",
                  "ETH",
                  "GALA.ETH",
                  "GYEN.ETH",
                  "KNC.ETH",
                  "LDO.ETH",
                  "LINK.ETH",
                  "MATIC.ETH",
                  "MKR.ETH",
                  "PEPE.ETH",
                  "POL.ETH",
                  "PYUSD.ETH",
                  "RLUSD.ETH",
                  "SAND.ETH",
                  "SHIB.ETH",
                  "UNI.ETH",
                  "USDC.ETH",
                  "USDP.ETH",
                  "USDT.ETH",
                  "WBTC.ETH",
                  "WETH.ETH",
                  "ZRX.ETH",
                  "ZUSD.ETH",
                  "PYUSD.SOL",
                  "SOL",
                  "USDC.SOL",
                  "USDP.SOL",
                  "ARB.ARBITRUM",
                  "ETH.ARBITRUM",
                  "USDC.ARBITRUM",
                  "USDT.ARBITRUM",
                  "AVAX",
                  "USDC.AVAX",
                  "MATIC.POLYGON",
                  "USDC.POLYGON",
                  "ETH.OPTIMISM",
                  "OP.OPTIMISM",
                  "USDC.OPTIMISM",
                  "USDT.OPTIMISM",
                  "APT",
                  "USDC.APT",
                  "BNB",
                  "EGLD",
                  "ETC",
                  "FIL",
                  "NEAR",
                  "USDT.XPL",
                  "XPL",
                  "DOT",
                  "USDC.DOTHUB",
                  "SEI",
                  "USDC.SEI",
                  "SUI",
                  "USDC.SUI",
                  "XTZ",
                  "TON",
                  "TRX",
                  "USDT.TRX",
                  "ETH.WORLDCHAIN",
                  "USDC.WORLDCHAIN",
                  "WLD.WORLDCHAIN",
                  "ETH.ZKSYNC",
                  "USDC.ZKSYNC"
                ]
              },
              "address": {
                "type": "string",
                "description": "The whitelisted withdrawal account or address to withdraw funds to\n        Note: only one of withdrawal_account_id, address or account{} can be submitted per withdrawal, but zerohash will always respond with withdrawal_account_id",
                "example": "2NCgV7BXXafJZ86utcYFs5m3tCpkcpLafeG"
              }
            },
            "required": [
              "participant_code",
              "address",
              "amount",
              "asset",
              "account_group",
              "account_label"
            ]
          },
          {
            "title": "Tag based asset withdrawals",
            "type": "object",
            "description": "Withdrawal request body for assets with the account `model` as `utxo`  or `account_based`.",
            "properties": {
              "client_withdrawal_request_id": {
                "type": "string",
                "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed\n      Note: this must be unique, per platform, per 24 hour period",
                "example": "c6af3d80-1aca-4280-b96b-a9b8d7ced46a"
              },
              "participant_code": {
                "type": "string",
                "description": "The participant code against whom the withdrawal will be made",
                "example": "ABCDEF"
              },
              "address": {
                "type": "string",
                "description": "The whitelisted withdrawal account or address to withdraw funds to\n        Note: only one of withdrawal_account_id, address or account{} can be submitted per withdrawal, but zerohash will always respond with withdrawal_account_id",
                "example": "2NCgV7BXXafJZ86utcYFs5m3tCpkcpLafeG"
              },
              "amount": {
                "type": "string",
                "description": "The amount to withdraw",
                "example": "20.1"
              },
              "asset": {
                "type": "string",
                "description": "The asset code for the withdrawal request, e.g. XRP",
                "example": "XRP",
                "enum": [
                  "XRP",
                  "XLM",
                  "EOS",
                  "ADA",
                  "ALGO",
                  "CC",
                  "TIA",
                  "ATOM",
                  "HBAR",
                  "USDC.HBAR",
                  "RLUSD.XRP",
                  "USDC.XLM",
                  "EURC.XLM"
                ]
              },
              "account_group": {
                "type": "string",
                "description": "The account group to withdraw against. This must be the platform code of the platform requesting the withdrawal (e.g. `PLAT01`).\n\n> Note: platforms **cannot** withdraw from the zerohash market account group (`00SCXM`) — they do not have withdrawal permissions on it.",
                "example": "PLAT01"
              },
              "account_label": {
                "type": "string",
                "description": "The account label associated with the account",
                "example": "sub_account_test"
              },
              "no_destination_tag": {
                "type": "boolean",
                "description": "Whether or not the specific withdrawal and destination address requires a destination tag.If the asset `model` is `tag`, this field is required\n **Note: zerohash requires that `no_destination_tag` be `false` for `EOS`**.",
                "example": false
              },
              "destination_tag": {
                "type": "string",
                "description": "The destination tag or memo ID associated with the transaction\n      If the asset is EOS, XLM or XRP and no_destination_tag is false, then this is required"
              }
            },
            "required": [
              "participant_code",
              "address",
              "amount",
              "asset",
              "account_group",
              "no_destination_tag"
            ]
          },
          {
            "title": "DOMESTIC_FIAT withdrawals",
            "type": "object",
            "description": "Withdrawal request body for assets with the account `model` as `utxo`  or `account_based`.",
            "properties": {
              "client_withdrawal_request_id": {
                "type": "string",
                "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed\n      Note: this must be unique, per platform, per 24 hour period",
                "example": "c6af3d80-1aca-4280-b96b-a9b8d7ced46a"
              },
              "participant_code": {
                "type": "string",
                "description": "The participant code against whom the withdrawal will be made",
                "example": "ABCDEF"
              },
              "asset": {
                "type": "string",
                "description": "The asset code for the withdrawal request, e.g. USD",
                "example": "USD",
                "enum": [
                  "USD"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount to withdraw",
                "example": "20.1"
              },
              "account_group": {
                "type": "string",
                "description": "The account group to withdraw against. This must be the platform code of the platform requesting the withdrawal (e.g. `PLAT01`).\n\n> Note: platforms **cannot** withdraw from the zerohash market account group (`00SCXM`) — they do not have withdrawal permissions on it.",
                "example": "PLAT01"
              },
              "account_label": {
                "type": "string",
                "description": "The account label associated with the account",
                "example": "sub_account_test"
              },
              "account": {
                "type": "object",
                "description": "The whitelisted withdrawal account or address to withdraw funds to",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "The type of account: DOMESTIC_FIAT for US wires.",
                    "example": "DOMESTIC_FIAT"
                  },
                  "name": {
                    "type": "string",
                    "description": "The nickname given to the withdrawal account Note: zerohash will append the last 4 digits of the account number to this when saving it",
                    "example": "Primary (1234)"
                  },
                  "account_number": {
                    "type": "string",
                    "description": "The unique `account_number` for the final withdrawal destination",
                    "example": "1231234"
                  },
                  "routing_number": {
                    "type": "string",
                    "description": "The routing number for the final withdrawal destination",
                    "example": "123456789"
                  },
                  "beneficiary_name": {
                    "type": "string",
                    "description": "The owner of the account at the withdrawal destination",
                    "example": "John Doe"
                  },
                  "bank_name": {
                    "type": "string",
                    "description": "The name of the destination financial institution",
                    "example": "BMO Harris"
                  },
                  "recipient_instructions": {
                    "type": "string",
                    "description": "Per-request memo or wire reference. Overrides the account-level default if provided. An empty string explicitly clears the memo. Omitting leaves the account-level value unchanged. Max 255 characters.",
                    "maxLength": 255,
                    "example": "Invoice #123"
                  }
                },
                "required": [
                  "type",
                  "name",
                  "account_number",
                  "beneficiary_name",
                  "routing_number"
                ]
              }
            },
            "required": [
              "participant_code",
              "amount",
              "asset",
              "account"
            ]
          },
          {
            "title": "INTERNATIONAL_FIAT withdrawals",
            "type": "object",
            "description": "Withdrawal request body for assets with the account `model` as `utxo`  or `account_based`.",
            "properties": {
              "client_withdrawal_request_id": {
                "type": "string",
                "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed\n      Note: this must be unique, per platform, per 24 hour period",
                "example": "c6af3d80-1aca-4280-b96b-a9b8d7ced46a"
              },
              "participant_code": {
                "type": "string",
                "description": "The participant code against whom the withdrawal will be made",
                "example": "ABCDEF"
              },
              "asset": {
                "type": "string",
                "description": "The asset code for the withdrawal request, e.g. `EUR`.",
                "example": "EUR",
                "enum": [
                  "AED",
                  "AUD",
                  "BRL",
                  "CAD",
                  "CHF",
                  "CNY",
                  "CZK",
                  "DKK",
                  "EUR",
                  "GBP",
                  "HKD",
                  "HUF",
                  "ILS",
                  "JPY",
                  "MAD",
                  "MXN",
                  "NOK",
                  "NZD",
                  "PLN",
                  "RON",
                  "SAR",
                  "SEK",
                  "SGD",
                  "THB",
                  "TRY",
                  "USD",
                  "ZAR"
                ]
              },
              "amount": {
                "type": "string",
                "description": "The amount to withdraw",
                "example": "20.1"
              },
              "account_group": {
                "type": "string",
                "description": "The account group to withdraw against. This must be the platform code of the platform requesting the withdrawal (e.g. `PLAT01`).\n\n> Note: platforms **cannot** withdraw from the zerohash market account group (`00SCXM`) — they do not have withdrawal permissions on it.",
                "example": "PLAT01"
              },
              "account_label": {
                "type": "string",
                "description": "The account label associated with the account",
                "example": "sub_account_test"
              },
              "account": {
                "type": "object",
                "description": "The whitelisted withdrawal account or address to withdraw funds to",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "The type of account: INTERNATIONAL_FIAT for SWIFT payments.",
                    "example": "INTERNATIONAL_FIAT"
                  },
                  "name": {
                    "type": "string",
                    "description": "The nickname given to the withdrawal account Note: zerohash will append the last 4 digits of the account number to this when saving it",
                    "example": "Primary (1234)"
                  },
                  "account_number": {
                    "type": "string",
                    "description": "The IBAN number for your account.",
                    "example": "1231234"
                  },
                  "swift_code": {
                    "type": "string",
                    "description": "The SWIFT code for the final withdrawal destination",
                    "example": "123456789"
                  },
                  "beneficiary_name": {
                    "type": "string",
                    "description": "The owner of the account at the withdrawal destination",
                    "example": "John Doe"
                  },
                  "bank_name": {
                    "type": "string",
                    "description": "The name of the destination financial institution",
                    "example": "BMO Harris"
                  },
                  "intermediary_bank": {
                    "type": "boolean",
                    "description": "Whether or not an intermediary bank is used"
                  },
                  "intermediary_bank_account_number": {
                    "type": "string",
                    "description": "The IBAN number for the intermediary bank account.",
                    "example": "1231234"
                  },
                  "intermediary_bank_name": {
                    "type": "string",
                    "description": "The name of the intermediary bank.",
                    "example": "Intermediary Bank Name"
                  },
                  "intermediary_bank_code_type": {
                    "type": "string",
                    "description": "The type of code used to identify the intermediary bank.",
                    "enum": [
                      "SWIFT",
                      "ROUTING",
                      "IBAN",
                      "OTHER"
                    ]
                  },
                  "intermediary_bank_code": {
                    "type": "string",
                    "description": "The code used to identify the intermediary bank.",
                    "example": "03022309"
                  },
                  "recipient_instructions": {
                    "type": "string",
                    "description": "Per-request memo or wire reference. Overrides the account-level default if provided. An empty string explicitly clears the memo. Omitting leaves the account-level value unchanged. Max 255 characters.",
                    "maxLength": 255,
                    "example": "Invoice #123"
                  }
                },
                "required": [
                  "type",
                  "name",
                  "account_number",
                  "beneficiary_name",
                  "swift_code"
                ]
              }
            },
            "required": [
              "participant_code",
              "amount",
              "asset",
              "account"
            ]
          },
          {
            "$ref": "#/components/schemas/PostWithdrawalRequestsBody"
          }
        ]
      },
      "PostWithdrawalRequestsResponse": {
        "type": "object",
        "properties": {
          "message": {
            "$ref": "#/components/schemas/WithdrawalRequestEntity"
          }
        }
      },
      "WithdrawalRequestEntity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier (UUID v4) for the withdrawal request.",
            "example": "9084dd8f-ab9f-4f9b-a22b-49bdb4915a93"
          },
          "withdrawal_account_id": {
            "type": "number",
            "description": "The ID of the whitelisted withdrawal account or address the funds were sent to.",
            "example": 3709509
          },
          "participant_code": {
            "type": "string",
            "description": "The participant the request belongs to, e.g. ABCDEF.",
            "example": "ABCDEF"
          },
          "beneficiary_participant_code": {
            "type": "string",
            "nullable": true,
            "description": "The participant code of the beneficiary when the withdrawal is being made on behalf of another participant. Null for standard withdrawals.",
            "example": null
          },
          "sender_participant_code": {
            "type": "string",
            "nullable": true,
            "description": "The participant code of the sender when the request was initiated on behalf of a third party. Null for standard withdrawals.",
            "example": null
          },
          "requestor_participant_code": {
            "type": "string",
            "description": "The participant code of the platform or participant that initiated the request, e.g. ABCDEF.",
            "example": "ABCDEF"
          },
          "requested_amount": {
            "type": "string",
            "description": "The initially requested amount, e.g. 100.10.",
            "example": "0.1004142"
          },
          "settled_amount": {
            "type": "string",
            "nullable": true,
            "description": "The settled amount. This can be less than or equal to the requested_amount. Null while the withdrawal is still in an APPROVED state.",
            "example": "0.100414200000000000"
          },
          "status": {
            "type": "string",
            "description": "The current status of the withdrawal request.",
            "enum": [
              "PENDING",
              "APPROVED",
              "REJECTED",
              "SETTLED"
            ],
            "example": "APPROVED"
          },
          "asset": {
            "type": "string",
            "description": "The asset code for the request, e.g. `BTC`.",
            "enum": [
              "AAVE.ETH",
              "BAT.ETH",
              "BCH",
              "BTC",
              "BUSD",
              "CEL",
              "CUSDC",
              "CVC",
              "CZRX",
              "DAI",
              "ENJ",
              "EOS",
              "ETH",
              "KIN",
              "KNC",
              "LINK",
              "LTC",
              "OMG",
              "USDP",
              "REP",
              "STORJ",
              "TUSD",
              "USDC.ETH",
              "USDT",
              "XLM",
              "XRP",
              "ZRX"
            ],
            "example": "BTC"
          },
          "account_group": {
            "type": "string",
            "description": "The account group the request was made against — the platform code of the requesting platform (e.g. `PLAT01`).",
            "example": "PLAT01"
          },
          "account_label": {
            "type": "string",
            "nullable": true,
            "description": "The account label associated with the account. Null when the request targets the default (unlabeled) account.",
            "example": null
          },
          "transaction_id": {
            "type": "string",
            "nullable": true,
            "description": "The on-chain transaction hash once the withdrawal has been broadcast. Null until the transaction has been sent to the network.",
            "example": "0x0c36fd59b0f48257b5cd02cdf23fd8fb8230e27c5ddd28ce02c8a6a4736da4e6"
          },
          "input_data": {
            "type": "string",
            "nullable": true,
            "description": "Applicable only for smart-contract executions on the Ethereum blockchain. The ABI encoding of the function and its arguments in RLP format. Null for standard transfers.",
            "example": null
          },
          "requested_timestamp": {
            "type": "number",
            "format": "int64",
            "description": "Unix timestamp in milliseconds for when the withdrawal request was last updated. Changes with status updates.",
            "example": 1777830138534
          },
          "created_timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "RFC 3339 / ISO 8601 timestamp (UTC) of when the withdrawal request was originally created. Immutable.",
            "example": "2026-05-03T17:40:10.733Z"
          },
          "gas_price": {
            "type": "string",
            "nullable": true,
            "description": "The transaction fee payable on the Ethereum network. Null when the asset is not an ERC-20 token or when the fee was not client-supplied.",
            "example": null
          },
          "client_withdrawal_request_id": {
            "type": "string",
            "nullable": true,
            "description": "A unique identifier for the withdrawal, generally produced by the Platform on which the trade was executed. Must be unique per platform per 24-hour period. Null when not provided by the client.",
            "example": "20aed707-3127-427d-a47e-97efc6470cb3"
          },
          "on_chain_status": {
            "type": "string",
            "nullable": true,
            "description": "Indicates whether the crypto withdrawal has been confirmed on-chain. Null for fiat withdrawals or while the request is still APPROVED and has not been broadcast.",
            "enum": [
              "PENDING",
              "CONFIRMED",
              null
            ],
            "example": "CONFIRMED"
          },
          "fee_amount": {
            "type": "string",
            "nullable": true,
            "description": "The network fee (denominated in the network fee asset) associated with the withdrawal. Null until the fee has been determined.",
            "example": "0.000004021417575"
          },
          "withdrawal_fee": {
            "type": "string",
            "nullable": true,
            "description": "The withdrawal fee (denominated in the withdrawn asset) charged by zerohash. Returned as an empty string or null when no withdrawal fee applies.",
            "example": "0"
          },
          "quoted_fee_amount": {
            "type": "string",
            "nullable": true,
            "description": "The fee paid by the customer in crypto terms as quoted. Null when the withdrawal did not go through the quoted-fee flow.",
            "example": null
          },
          "quoted_fee_notional": {
            "type": "string",
            "nullable": true,
            "description": "The fee paid by the customer in USD terms as quoted. Null when the withdrawal did not go through the quoted-fee flow.",
            "example": null
          },
          "quoted_fee_asset": {
            "type": "string",
            "nullable": true,
            "description": "The asset in which the quoted fee was charged. Null when the withdrawal did not go through the quoted-fee flow.",
            "example": null
          },
          "trade_id": {
            "type": "string",
            "nullable": true,
            "format": "uuid",
            "description": "When a fee-locked `trade_id` was supplied on the withdrawal request, the associated trade identifier. Null otherwise.",
            "example": null
          },
          "parent_link_id": {
            "type": "string",
            "nullable": true,
            "description": "Identifier linking this withdrawal to a parent request (for example a convert-and-withdraw quote execution). Null for standalone withdrawals.",
            "example": null
          },
          "parent_link_id_source": {
            "type": "string",
            "nullable": true,
            "description": "The source context of the `parent_link_id` when present. Null when `parent_link_id` is null.",
            "example": null
          },
          "amount_in_usd": {
            "type": "number",
            "nullable": true,
            "description": "Indicative USD value of the withdrawal at the time the record was returned. Present on list responses for all consumers; conditionally omitted on single-request responses for non-portal origins.",
            "example": 234.32708342365032
          },
          "contract_validation_id": {
            "type": "string",
            "nullable": true,
            "format": "uuid",
            "description": "Identifier of the EVM smart-contract execution validation record linked to the withdrawal. Null unless the withdrawal targets a validated contract call.",
            "example": null
          },
          "recipient_instructions": {
            "type": "string",
            "nullable": true,
            "description": "Recipient instructions for this withdrawal request (e.g. wire memo). Returns the request-level memo if provided, otherwise the account default, or null when none is set.",
            "example": "Invoice #123"
          }
        }
      }
    }
  }
}
```