---
title: "Withdraw organization funds"
method: POST
path: "/withdraw"
tags: ["Fund"]
---

# Withdraw organization funds

`POST /withdraw`

Creates a withdrawal. Requires `fund.withdraw` permission.

`request_id` is optional. When supplied, it must be a UUID and acts as the idempotency key. When the same merchant retries with the same `request_id`, the API returns the previously created withdrawal information with `is_duplicate=true`.

`source_currency` is optional and defaults to `token_type`. Set it to `USD` to deduct from the organization's USD Cash Account when withdrawing USDT or USDC. Other cross-currency pairs are rejected.

## Headers

- `Date` string
- `Authorization` string
- `Digest` string

## Request body

- ApplyWithdrawRequest
  - `request_id` string, uuid — Optional idempotency key. Must be a UUID when supplied.
  - `chain` string, required — Public chain name. Use a currently enabled pair returned by the withdrawal fees endpoint.
  - `token_type` string, required — Token type. Use a currently enabled pair returned by the withdrawal fees endpoint.
  - `source_currency` string — Source account currency. Defaults to token_type. Set to USD to deduct from the organization's USD Cash Account when withdrawing USDT or USDC; other cross-currency pairs are rejected.
  - `amount` string, required — Maximum amount deducted from the source account. Digits after the sixth decimal place are truncated without rounding; when source_currency is USD, at most two decimal places are allowed. The resulting amount must be at least 1 and greater than the applicable fees.
  - `wallet_address` string, required — Destination wallet address valid for the selected chain.
  - `note` string — Optional withdrawal note.

## Response `200`

Standard response envelope

- union
  - ApplyWithdrawEnvelope
    - `code` 0, required — Business code. `0` means success.
    - `message` string, required — Response message.
    - `data` ApplyWithdrawResponse, required
      - `request_id` string, uuid, required — Withdrawal request ID.
      - `status` 'pending' | 'processing' | 'completed' | 'failed', required — Current withdrawal status.
      - `is_duplicate` boolean, required — Whether the response refers to an existing request ID.
  - ErrorEnvelope
    - `code` integer, required — Non-zero business error code.
    - `message` string, required — Error details.
    - `data` object, nullable, required — Error responses return null.

## Other responses

- `400` — Invalid application request
- `401` — HMAC gateway validation or application authentication failed
- `403` — API key permission, IP whitelist, or endpoint policy rejected the request

---

[API](https://skmtc.dev/infini/apis/infini-fund-api.md) · [All operations](https://skmtc.dev/infini/apis/infini-fund-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/infini/infini-fund-api/revisions/a77090a3bdd5/schema)
