Skip to content
LogoLogo

Payout Errors

Every error on the merchant API has the same body:

{ "code": "INSUFFICIENT_BALANCE", "message": "…", "requestId": "…" }

code is the contract. message is prose for humans, may be reworded at any time, and must never be parsed. requestId identifies the request in our logs — quote it when reporting a 5xx.

Adding a code is not a breaking change. Changing or removing one is.

Shared auth and HTTP envelope: Errors.

Codes

StatuscodeMeaning / action
400VALIDATION_FAILEDThe body failed schema validation — e.g. both or neither of beneficiaryId / beneficiary. message lists the offending fields.
400INVALID_REQUESTMissing or malformed Idempotency-Key, an inline account that failed bank verification, or an amount that falls under the RM1 minimum once the fee is deducted.
400INSUFFICIENT_BALANCEFund your prefund (dashboard top-up or bank transfer) before retrying.
400UNKNOWN_BENEFICIARYbeneficiaryId doesn't match an active beneficiary on your account, or the inline bankCode isn't in your /v1/payouts/active-banks list.
400LIMIT_EXCEEDEDYou hit a configured daily or monthly payout limit.
403LIMIT_EXCEEDEDYou hit the cap on active beneficiaries (1,000 by default). Only a new destination trips this — repeat payouts to a destination you have already used reuse the existing record. Delete beneficiaries you no longer pay, or ask BLOX to raise the cap.
401UNAUTHORIZEDMissing/unknown API key, missing signature headers, or a signature that failed or fell outside ±300s. Re-sign with a fresh created over the current body digest.
403FEATURE_DISABLEDPayouts aren't enabled on the account. Contact BLOX.
403ACCOUNT_FROZEN / ACCOUNT_SUSPENDED / ACCOUNT_PENDING_VERIFICATIONYour account's status blocks money out. Reads stay open. Contact BLOX.
403ACCOUNT_TERMINATEDEvery route is blocked, reads included.
404NOT_FOUNDUnknown payoutId, or it belongs to another account.
422VALIDATION_FAILEDThe Idempotency-Key was already used with a different body.
429RATE_LIMITEDOver 300 creates per minute. Back off and retry.
503SERVICE_UNAVAILABLEPayout creation is paused on our side. Nothing was created or debited — retry later, reusing the same Idempotency-Key.
5xxINTERNAL_ERRORSomething broke on our side. message is deliberately generic; quote requestId.

Retry guidance

ResponseRetry withWhy
401Don't retryFix your signing or API key first
4xxA new Idempotency-KeyA rejection replays as the same rejection for 24 hours
429The same keyThe request never ran
500, 503, timeoutThe same keyThe key is what stops one create from becoming two transfers