Errors

Full error code table — numeric code, HTTP status, and when each fires.

One shape for every error: { "code": <number>, "msg": "<CONSTANT>" }. The numeric codeis the contract — switch on it once and you’ve handled every failure below. The HTTP status is a hint, not a rule.

codemsgHTTPDescription
0200Success.
1INVALID_REQUEST400Body fails validation: unsupported asset, disabled pair, unparseable amount, invalid address, FLOAT without refundAddress, malformed Idempotency-Key. The same code + HTTP 409 fires on Idempotency-Key reuse with a different payload.
2AUTH_REQUIRED401One of X-API-KEY / X-API-SIGN is missing on an endpoint that requires authentication.
3AUTH_INVALID401Unknown key, malformed signature, signature mismatch, expired or replayed nonce, decrypt failure. Generic body — never an oracle for "which" of those it was.
4AUTH_DISABLED401Partner record enabled = false. Reachable only with a valid signature, so the operator can distinguish a kill-switched partner from a stolen-and-revoked key.
5RATE_LIMIT429Per-partner weight budget exhausted within the 60-second sliding window. Response includes Retry-After: <seconds>.
6NOT_FOUND404Order does not exist OR exists but belongs to a different partner OR exists and the token is wrong. The three cases collapse to one envelope.
7LIMIT_MIN400Create amount below the per-pair USD minimum. /v1/price returns from.min / to.min for pre-validation but does not itself emit this code.
8LIMIT_MAX400Create amount above the per-pair USD maximum or the operator daily cap. /v1/price returns from.max / to.max for pre-validation but does not itself emit this code.
9RESERVE_EXCEEDED503Reserved for a future per-partner capacity control. No current route emits this code — partners can safely omit it from exhaustive handlers until announced.
10MAINTENANCE503The site is in operator-toggled upgrade mode. Retry after a short delay.
11UPSTREAM_ERROR503A required upstream is temporarily unavailable. Retry with exponential backoff.
12EMERGENCY_INVALID_CHOICE400POST /v1/emergency body has `choice` other than `EXCHANGE`.
13LIMIT_EXCEEDED403Partner reached the per-partner ceiling on POST /v1/codes (default 50 reference codes).
14ROTATION_CONFLICT409Concurrent POST /v1/keys/rotate lost the conditional-claim race. The other call already rotated the secrets; treat the rotation as done and use whichever new secret was returned to that caller. If the new secret was not captured, request a fresh rotation through the operator.
99INTERNAL500Unexpected server-side condition. Already logged on our side; safe to retry.

A few codes (AUTH_INVALID, AUTH_DISABLED, NOT_FOUND) cover multiple internal conditions on purpose. Finer discrimination is not part of the contract; one switch on code in your client is enough.

See also: Errors cookbook for per-code remedies (symptom, cause, fix).

Partner API.
Same engine as 0trace.

A private partner integration surface. Signed quotes, server-side pricing, webhook delivery, multiple reference codes, and a self-serve cabinet — all backed by the production exchange engine.

Support

Questions? Answers.

Get the latest updates

Follow us on X

The 0trace team will never ask for KYC or AML. We retain no logs, metadata, or tracking cookies.

Learn more