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 static text for humans and never quotes your input. 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, or a required header missingFix the request. Do not retry as-is.
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.
503Dependency down, or a concurrency raceRetry 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.
UnprocessableEntityA limit, account-status or compliance refusal, or an idempotency key reused with a different body. Deliberately unspecific.

The authoritative list is the ApiError.error enum in openapi.json.