Skip to content
LogoLogo

Onramp Errors

Every error uses the shared merchant API envelope:

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

code is the contract. Never parse message; it may be reworded. Quote requestId when reporting an unexpected failure to BLOX.

Shared authentication and HTTP semantics: Errors.

Codes

StatuscodeMeaning / action
400INVALID_REQUESTIdempotency-Key is missing or malformed, tokenId is unavailable, the bank list cannot be loaded, or an FPX checkout amount cannot cover its fee. Fix the request or retry the bank list.
400VALIDATION_FAILEDA body or query field is malformed or outside its constraint — including a missing type, or a feeMode sent on a BLOX_ACCOUNT checkout. Fix the request.
400INSUFFICIENT_BALANCECHARGE_TO_PREFUND was requested and your checkout prefund cannot cover the fee. No link was created. Top up under Checkout → Top up prefund, or send DEDUCT_FROM_AMOUNT instead. Retrying without doing one of those will fail identically.
401UNAUTHORIZEDAPI key or signature headers are missing or invalid. Re-sign the current body with a fresh created value.
403FEATURE_DISABLEDThe checkout type you asked for is not enabled for the account — each is granted separately, so holding one never implies another. The message names the missing one. Contact BLOX.
403ACCOUNT_FROZEN / ACCOUNT_SUSPENDED / ACCOUNT_PENDING_VERIFICATIONThe account state blocks money in. Contact BLOX.
403ACCOUNT_TERMINATEDThe account is terminated; read and write routes are blocked.
404NOT_FOUNDThe checkout does not exist or belongs to another account.
422VALIDATION_FAILEDThe idempotency key was already used with a different body on the same route.
429RATE_LIMITEDA checkout-create route or account limit was exceeded. Back off before retrying.
5xxINTERNAL_ERRORUnexpected BLOX failure. Reconcile first and report requestId if it persists.

Retry guidance

Checkout creation needs one extra safeguard: a retry can create a second unpaid link. No money moves until a customer pays, but two active links can still cause duplicate payment.

ResponseWhat to do
202Wait briefly, sign a fresh request, and retry with the same Idempotency-Key
400, 422Fix the request and use a new key; rejected outcomes are remembered for 24 hours
401, 403Fix access or signing before retrying
429Back off and retry with the same key; the request did not run
5xx or timeoutList checkouts and match your unique title; retry with the same key only when the original did not land

Persist the UUID v4 before sending and put your order identifier in title. Full idempotency behavior: Idempotency.