Skip to content

Errors ​

Every error from every route is one JSON body:

json
{
  "statusCode": 422,
  "message": "Insufficient available balance",
  "error": "InsufficientAvailableBalance"
}
  • Switch on error — it is a stable code. message is text for people, not for parsing. It is an array only for body validation failures, one entry per rejected field.
  • Ignore codes you do not know. New ones can be added under v1.

By status ​

StatusMeaningWhat to do
400Malformed request, a required header missing, or an amount with more than two decimal places (AmountPrecisionExceeded)Fix the request. Do not retry as-is. See Amounts.
401Authentication failedCheck clock, signed path, signed bytes, key id.
403A scope is missingAsk Neo Wallet support to grant it.
404Not yours, or does not exist—
409Same idempotency key still in flight; duplicate; state conflictWait and retry the same key.
422A business rule refused itRead error (below). Retrying unchanged will fail again.
429Rate limitBack off, retry.
500Fault on our sideRetry with the same key; if it persists, send us X-Request-Id.
503Temporarily unable to process the requestRetry with the same Idempotency-Key.

422 codes you can act on ​

errorFix
InsufficientAvailableBalanceThe wallet cannot cover amount + fee + tax. Quote first.
CurrencyMismatchcurrency must equal the wallet's currency.
AuthorizationInsufficientThe assertion expired, or a second factor is required.
AssertionNotBoundToTransactionRebuild the transaction binding from the request you are sending.
FundingAccountNotConfiguredYour prefunded balance is not set up yet — contact support.
FundingNotPositionedYour prefunded balance does not cover the credit — top it up.
MandateNotActiveThe mandate is pending, suspended, revoked or expired.
MandateAmountExceededThe debit is above the mandate's amount rule.
MandateFrequencyExceededThe mandate was already debited this period.
RailUnavailableThe payment provider (railCode) is unavailable for this operation. Try later or another one.
RequiredAgreementsMissingPOST /customers needs an accepted wallet_opening, privacy and fee_schedule agreement. Resend with all three.
UnprocessableEntityA limit, account-status or compliance refusal, or an idempotency key reused with a different body. No further detail is given.

Each route's page in the API reference lists the statuses it answers with.