Errors & retries

Failures carry a stable `code`. Match on the code, never on the message text — messages are written for people and change.

Every error response has the same shape. Branch on code, never on error — the message is written for a person and may be reworded; the code is a contract.

{
  "error": "Insufficient credit: this run needs about $0.04 and you have $0.01 available.",
  "code": "INSUFFICIENT_CREDITS",
  "requiredCents": 4,
  "availableCents": 1
}

Codes

CodeMeaning
0[object Object]
1[object Object]
2[object Object]
3[object Object]
4[object Object]

Retry semantics

StatusRetry?How
429YesWait for Retry-After seconds. Do not retry sooner — a tighter loop just burns the next window too.
5xxYesExponential backoff with jitter, a small bounded number of attempts.
402NoTop up credit first. Retrying an unaffordable run cannot make it affordable.
403NoConsent, suspension or approval. All three need a human action, not another request.
400NoThe request is malformed. Fix it.
404NoEither the resource does not exist, or the feature is not enabled here — the two are deliberately indistinguishable.

A failed run is never charged. Work reserves its estimated cost when it starts and settles the true cost when it finishes; if it throws, the reservation is released in full. You are billed for what was processed, not for what was attempted.

Repeated submissions

Dedup runs are pure with respect to your data: the same files at the same threshold produce the same report. A retry after a network timeout is therefore safe in the sense that it cannot corrupt anything — but it is a second run and it is billed as one. Where a job id exists, poll it rather than resubmitting.

Reference generated from live API (https://api.voxelion.ai) on 2026-08-30. The endpoint list, error codes and limits on this page are produced from the API's own route table — if an endpoint is not listed here, it is not enabled on production.