Skip to content

Statuses & Error Codes

Collection order statuses

StatusMeaningTerminal
CREATEDCreated
PROCESSINGProcessing
SUCCESSSuccess
CLOSEDClosed
EXPIREDExpired
FAILEDFailed

Payout order statuses

StatusMeaningTerminal
CREATEDCreated
FROZENFrozen, pending review
APPROVEDApproved
SUBMITTINGSubmitting
SUBMITTEDSubmitted to channel
SUCCESSSuccess
FAILEDFailed
REJECTEDRejected by review/risk

How to judge success

Among terminal statuses, only SUCCESS means paid: for collection, CLOSED/EXPIRED/FAILED received no money; for payout, success also requires reversed_at empty (SUCCESS with a non-empty reversed_at = reversed — treat as refunded). Terminal statuses never change (a payout reversal keeps status unchanged, reflected via reversed_at).

Error codes

The top-level code is a string; "0" means success:

codeMeaningApplies to
0SuccessAll
1001Missing/invalid parameters (incl. unsupported currency, unavailable product or channel; payout amount out of range also maps here)All
1002Signature verification failedAll
1003Timestamp outside the 5-minute windowAll
1004Duplicate nonce (possible replay)All
1005IP not in allowlistAll
1006Merchant / app / key status abnormalAll
1007Rate limited (HTTP 429)All
2001Order number exists with different key parameters (identical parameters return the original order)Create
2002Order not foundQuery
2003Collection: amount out of range; payout: state does not allow the operationCollection create / payout
2006bank_code invalid or unsupported (not in the enabled table)Payout create
3001Insufficient balancePayout create
3002Risk control / payee blacklist hitPayout create
5000Internal error (retryable)All

How to judge

Judge outcomes by the body code, not the HTTP status alone (auth errors are mostly 401, rate limit 429, conflicts 409, 5000 is 500). Treat any unrecognized code as a system error (retry or contact the platform); never branch business logic on it.