Errors

Every error code the API returns, grouped by resource, and which ones are safe to retry.

A failed request returns status: false, an error message, and a stable code. Match on code, and display error to people.

{
  "status": false,
  "error": "Quote lapsed or already used. Get a new one.",
  "code": "quote_expired"
}

A 404 response does not reveal whether another business owns the resource.

Retry or fix

HTTPWhat to do
400, 404Fix the request. Sending it again unchanged returns the same error.
403Your API key cannot make this change. Ask a dashboard admin to make it.
409The request conflicts with the current state. Follow the cause in the tables below.
429Wait 60 seconds, then retry.
500, 503Retry with the same body and the same reference. See Idempotency.

Every request

HTTPCodeCause
400bad_requestMalformed JSON, a missing required field, or an invalid field format.
401unauthorizedInvalid or missing API key.
429rate_limitedToo many requests. Wait 60 seconds before retrying.
503service_unavailableAn upstream service was unreachable and nothing was written. Retry.
500internalUnexpected failure. Safe to retry with the same reference.

Quotes and rates

HTTPCodeCause
400amount_requiredThe request sends both source_amount and destination_amount, or neither.
400invalid_amountThe amount is outside the amount limits.
400invalid_currencyBoth currencies are NGN, or neither is.
400invalid_assetThe crypto is not a supported asset.
400invalid_networkThe network is not supported for that asset.
400partner_fee_exceeds_capThe partner fee is above your account's cap.
400partner_fee_wallet_missingYou have no fee wallet for the payout network. Add one under Fees in the dashboard.
404quote_not_foundThe quote does not exist for your business.
409quote_not_refreshableThe quote already created an order, so it cannot be refreshed.

Orders

HTTPCodeCause
400quote_expiredThe quote expired, or it already created an order. Get a new one.
400quote_flow_mismatchAn onramp quote was used on an offramp order, or the reverse.
400invalid_destination_addressThe address is not valid for the quoted network.
400account_verification_failedThe bank could not confirm the beneficiary account.
400recipient_id_requiredYour business pays out only to its own accounts. Send recipient_id, not beneficiary or destination.
400recipient_id_not_supportedYour business pays its customers. Send beneficiary or destination, not recipient_id.
400recipient_not_foundrecipient_id does not match one of your payout accounts.
400recipient_type_mismatchAn offramp order named a wallet, or an onramp order named a bank account.
400recipient_quote_mismatchThe wallet's network or stablecoin differs from the onramp quote's.
404order_not_foundThe order does not exist for your business.
409duplicate_referenceThe reference belongs to a different order.
409quote_changedA refresh changed the quote during order creation.

Payout accounts

HTTPCodeCause
400invalid_recipientThe request has no object matching type, or sends another account object with it.
400account_verification_failedThe bank could not verify the account. Check the bank code and account number.
400invalid_destination_addressThe wallet address is not valid for its network.
400invalid_typeThe type filter on GET /v1/recipients is not a supported type.
403payout_accounts_lockedYour business pays out only to its own accounts. Ask a dashboard admin to make the change.
404recipient_not_foundThe payout account does not exist for your business.
409recipient_in_useA collection or an unfinished order still uses this account.

Collections

HTTPCodeCause
400recipient_not_foundrecipient_id does not match one of your payout accounts.
400recipient_type_mismatchThe new recipient_id on PATCH /v1/collections/{id} is a different kind of payout account from the collection's.
400invalid_typeThe type filter on GET /v1/collections is not a supported type.
400invalid_statusThe status filter on GET /v1/collections is not active or disabled.
403payout_accounts_lockedYour business pays out only to its own accounts. Ask a dashboard admin to change the collection's recipient_id.
404collection_not_foundThe collection does not exist for your business.

The deposit simulator has its own codes. See Simulator errors. In the live environment, the simulator returns 404 simulation_disabled.

On this page