For developers

API error code explainer

Type one of our documented error codes, a bare status, or paste a whole response body, and get the exact status, message, meaning and what to change in the request.

Free, no accountIn your browser

A documented code like not_found, a bare status like 409, or the whole JSON body - its "error" field is read out for you.

Try

Result

402 insufficient_funds explained

The wallet cannot cover this. Nothing was charged.

Documented error

Code
insufficient_funds
Status
402
Message
Wallet balance is too low for this purchase
Meaning
The wallet cannot cover this. Nothing was charged.

What to change

The wallet does not hold enough balance to cover this purchase, and nothing was charged. Top up the wallet from the dashboard, or lower what the request costs - fewer numbers, a shorter renewal duration, a cheaper plan - before retrying the exact same request.

Operations that document this error

OperationMethodPath
createNumberOrderPOST/v1/numbers/orders
renewNumberPOST/v1/numbers/{id}/renew
registerDomainPOST/v1/domains
updateDomainPATCH/v1/domains/{id}
renewDomainPOST/v1/domains/{id}/renew
transferDomainPOST/v1/domains/transfers
restoreDomainPOST/v1/domains/{id}/restore
createMailboxesPOST/v1/mailboxes
createMailboxesBulkPOST/v1/mailboxes/bulk
orderMailboxesPOST/v1/mailbox-domains/{id}/mailboxes
fundSubResellerPOST/v1/sub-resellers/{id}/fund
withdrawFromSubResellerPOST/v1/sub-resellers/{id}/withdraw
  • This reads only the documented status, message and operations - it cannot tell you whether this error actually happened on a real request, or inspect your own account or request body.

What this is

This api error code explainer reads straight from the 165 error codes our API actually documents: give it a code like not_found, a bare status like 409, or paste the whole JSON response body, and it answers with the exact status, the exact message a caller sees, what that status means, which operations document it, and what in the request to change.

Every code here comes from `ERRORS` and `MEANINGS` in `apps/api/src/openapi.ts`, distilled for the browser into `apps/web/src/tools/api-catalogue.ts`'s `API_ERRORS` - the same document the API's own OpenAPI file publishes. There are 165 of them today, each tied to the specific operations that can return it, and this page explains all 165 rather than a sample.

The "what to change" text under each code is written by hand, one entry per code, and says what in the request to actually change - never a restatement of the message itself, which a caller already sees without this page.

How to read the result

"Documented error" is the fact of the matter: the exact status, the exact message, and the one-line meaning that status carries across every code that shares it. "What to change" is the part worth reading - what to actually do about it, specific to this one code rather than generic advice. The operations table underneath lists every documented operation that can return this exact code, so you know where else to expect it.

A bare status on its own, like 409, is answered differently: every documented code that shares that status is listed in a table, because the status alone never says which of them actually happened - only the code field in the real response body does that.

"Verifying one of our webhooks" shows the shared error shape every response carries plus a small table of codes across the different statuses, copied verbatim from the same source this page reads, with a note to come here for the rest, one per documented code rather than a slice.

Common mistakes

What goes wrong most often, and how to tell.

  • Guessing what a code means from its name aloneTwo codes can sound alike and mean very different things - read the documented message and meaning on this page rather than assuming from the identifier itself what went wrong or what to do about it.
  • Treating a bare HTTP status as if it were the errorA single status like 409 is reused across more than a dozen different documented codes here, each with its own fix. Read the code field in the actual response body, not just its three-digit status, before deciding what to change.

Questions

What people ask about this tool.

  • Every one of them is read from `ERRORS` and `MEANINGS` in `apps/api/src/openapi.ts`, the same source the API's own OpenAPI document is generated from, distilled into `apps/web/src/tools/api-catalogue.ts` for the browser - a code added there and not reflected here fails this page's own drift test.
  • It is answered as "not one of ours" rather than guessed at, with the closest documented codes offered by how similar their spelling is - never a made-up explanation for a code that does not exist in our API.
  • Yes - paste the full response body and its "error" field is read straight out of it, so you can copy an error response verbatim from your own logs or terminal without editing it down to the bare code first.
  • HTTP statuses are broad on purpose - 409 alone covers more than a dozen genuinely different conflicts here, from a duplicate customer to a domain that is already locked - so the status narrows things down, but the code field in the body is what actually says which one happened.

Use it from the API

The same check, as one request.

Request
curl -X POST https://resellerhq.com/api/tools/api-error-code-explainer \
  -H "Content-Type: application/json" \
  -d '{"query":"insufficient_funds"}'
Response
{
  "tool": "api-error-code-explainer",
  "input": {
    "query": "insufficient_funds"
  },
  "result": {
    "verdict": {
      "tone": "neutral",
      "headline": "402 insufficient_funds explained",
      "summary": "The wallet cannot cover this. Nothing was charged."
    },
    "findings": [],
    "parts": [
      {
        "kind": "facts",
        "title": "Documented error",
        "rows": [
          [
            "Code",
            "insufficient_funds"
          ],
          [
            "Status",
            "402"
          ],
          [
            "Message",
            "Wallet balance is too low for this purchase"
          ],
          [
            "Meaning",
            "The wallet cannot cover this. Nothing was charged."
          ]
        ]
      },
      {
        "kind": "text",
        "title": "What to change",
        "body": "The wallet does not hold enough balance to cover this purchase, and nothing was charged. Top up the wallet from the dashboard, or lower what the request costs - fewer numbers, a shorter renewal duration, a cheaper plan - before retrying the exact same request."
      },
      {
        "kind": "table",
        "title": "Operations that document this error",
        "columns": [
          "Operation",
          "Method",
          "Path"
        ],
        "mono": [
          0,
          2
        ],
        "rows": [
          [
            "createNumberOrder",
            "POST",
            "/v1/numbers/orders"
          ],
          [
            "renewNumber",
            "POST",
            "/v1/numbers/{id}/renew"
          ],
          [
            "registerDomain",
            "POST",
            "/v1/domains"
          ],
          [
            "updateDomain",
            "PATCH",
            "/v1/domains/{id}"
          ],
          [
            "renewDomain",
            "POST",
            "/v1/domains/{id}/renew"
          ],
          [
            "transferDomain",
            "POST",
            "/v1/domains/transfers"
          ],
          [
            "restoreDomain",
            "POST",
            "/v1/domains/{id}/restore"
          ],
          [
            "createMailboxes",
            "POST",
            "/v1/mailboxes"
          ],
          [
            "createMailboxesBulk",
            "POST",
            "/v1/mailboxes/bulk"
          ],
          [
            "orderMailboxes",
            "POST",
            "/v1/mailbox-domains/{id}/mailboxes"
          ],
          [
            "fundSubReseller",
            "POST",
            "/v1/sub-resellers/{id}/fund"
          ],
          [
            "withdrawFromSubReseller",
            "POST",
            "/v1/sub-resellers/{id}/withdraw"
          ]
        ]
      }
    ],
    "limits": [
      "This reads only the documented status, message and operations - it cannot tell you whether this error actually happened on a real request, or inspect your own account or request body."
    ]
  }
}

Build on the same API this tool is part of: numbers, domains and mailboxes, one key.

Read the API

Company names and logos are trademarks of their owners, shown only to identify each service.