Create payout order
Pays fiat to a recipient. The platform converts the amount to USDT at the payout rate, adds the payout fee, and deducts and freezes that USDT from your balance. It's finally deducted when the payout succeeds, and fully refunded if it's refused. You get a callback when it finishes.
/api/open/order/createSellOrderFull URL = your API base URL + this path. The base URL is shown in the merchant console under Developers → API & callbacks.
Requires: whitelisted IP, OpenAPI enabled, enough balance. Set the payout callback URL in the merchant console or pass callbackUrl.
Avoid duplicate payouts
Every payout must carry a merchantOrderNo that you generated and saved in your database first. The platform rejects duplicate merchant order numbers (40007). After a network timeout, query and retry with the same number — never resend with a new one.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
merchantNo | string | Yes | Merchant number |
merchantOrderNo | string | Yes | Your order number; must not repeat any of your pay-in or payout orders |
currencyType | string | Yes | Currency code, e.g. CNY, THB |
amount | number | Yes | Fiat payout amount, greater than 0, at most two decimals |
bankAccountName | string | Yes | Recipient name (also used for blacklist checks) |
bankAccountNumber | string | Yes | Bank account number; for e-wallets the wallet account or phone number |
bankName | string | Required for CNY bank cards | Bank name |
bankBranchName | string | Required for CNY bank cards | Branch name |
isExpedited | bool | No | Expedited payout at the expedited rate; default false |
callbackUrl | string | No | Callback URL for this order; defaults to the payout callback URL in the console |
paymentMethod | int | No | Payout method code; defaults to bank transfer. Use List payout methods for the codes and fields of each currency |
bankCode | string | Depends on method | Bank code / routing number |
swiftCode | string | Depends on method | SWIFT/BIC (international wire) |
iban | string | Depends on method | IBAN |
bankAddress | string | Depends on method | Bank address (international wire) |
beneficiaryAddress | string | Depends on method | Recipient address (international wire) |
beneficiaryDocument | string | Depends on method | Recipient document number (e.g. CPF / CNPJ in Brazil) |
CNY bank-card payouts need only the first group. For other currencies, or when paymentMethod is given, the fields are validated against that method's rules; invalid details return 40018.
{
"merchantNo": "your merchant number",
"merchantOrderNo": "PO20261013001",
"currencyType": "CNY",
"amount": 1000,
"bankAccountName": "Zhang San",
"bankAccountNumber": "6222000000000000",
"bankName": "ICBC",
"bankBranchName": "Beijing Haidian"
}Response
No data on success; query with your merchantOrderNo via Get order:
{ "code": 0, "message": "success" }Payout states
| orderState | Meaning |
|---|---|
| 1 | Unassigned |
| 2 | Pending (a trader is processing it) |
| 3 | Waiting to be reassigned |
| 4 | Succeeded (callback sent) |
| 5 | Refused (USDT refunded, callback sent) |
| 6 | Account problem |
Common errors
| code | Description |
|---|---|
| 400 | Insufficient balance (Insufficient balance) |
| 40007 | Duplicate merchant order number |
| 40010 / 40017 | Currency not supported / not enabled |
| 40015 | Recipient is blacklisted |
| 40016 | Payout method not supported |
| 40018 | Recipient details invalid |
| 40019 | Invalid amount |