Withdrawals
A withdrawal moves your own balance to your company’s bank account or wallet (unlike a payout, which pays one of your end users). The team reviews the request and transfers the funds.
POST /v1/withdrawalsFields
Section titled “Fields”| Field | Required | Description |
|---|---|---|
amount | yes | Amount to withdraw, in Thai baht (decimal string), deducted from your balance |
currency | no | Currency you receive: THB (default), USD or USDT |
channel | yes | bank_transfer or crypto |
bankName | for bank_transfer | Bank name or code (max 100 characters) |
bankAccountName | for bank_transfer | Account holder name |
bankAccountNumber | for bank_transfer | Account number: digits and -, 4-32 characters |
walletAddress | for crypto | Wallet address |
network | for crypto | Network, e.g. TRC20 |
note | no | Note to the team (max 500 characters) |
Only these fields are accepted; anything else is rejected with parameter_unknown.
Send an Idempotency-Key header so a retry after a timeout cannot request a second withdrawal. See Retry a create safely.
{ "amount": "10000.00", "channel": "bank_transfer", "bankName": "SCB", "bankAccountName": "Example Co., Ltd.", "bankAccountNumber": "123-4-56789-0", "note": "January settlement"}The withdrawal object
Section titled “The withdrawal object”Response (201):
{ "data": { "object": "withdrawal", "id": "wd_0a1b2c3d4e5f60718293a4b5c6d7e8f9", "status": "pending", "channel": "bank_transfer", "requestedAmount": "10000.00", "fee": "50.00", "netAmount": "9950.00", "currency": "THB", "payoutAmount": "9950.00", "exchangeRate": "1.000000", "bankAccount": { "bankName": "SCB", "accountName": "Example Co., Ltd.", "accountNumber": "123-4-56789-0" }, "wallet": null, "note": "January settlement", "createdAt": "2026-01-01T00:00:00.000Z" }, "requestId": "req_..."}| Field | Description |
|---|---|
requestedAmount | Amount requested (THB) |
fee | Fee (THB) |
netAmount | Amount after the fee (THB) |
currency, payoutAmount | Currency and amount you actually receive |
exchangeRate | Rate used when withdrawing in USD or USDT |
bankAccount / wallet | The destination for the channel; the other one is null |
Statuses
Section titled “Statuses”| Status | Meaning |
|---|---|
pending | Requested, waiting for review |
processing | Being transferred |
succeeded | Transferred |
rejected | Rejected |
Common errors
Section titled “Common errors”| HTTP | code | Meaning |
|---|---|---|
| 400 | parameter_missing | A destination field required by channel is missing; see error.param |
| 400 | parameter_invalid | Malformed amount or account number |
| 400 | unsupported_currency | Currency not supported |
| 409 | pending_withdrawal_exists | A withdrawal is already being processed; one at a time |
| 422 | amount_invalid | The amount must be greater than 0 |
| 422 | insufficient_balance | Not enough available balance |
| 422 | daily_limit_exceeded | Today’s dailyWithdrawalLimit would be exceeded |