Errors & status codes
AvailableEvery HTTP response the public SDK API can return, with the exact fix.
Status codes
- 200 — success.
- 204 — response to
OPTIONSpreflight; no body. - 400 — malformed body, missing query param, or an app-level guard fired (for example
"Form not published"). Body is JSON with anerrorfield. - 401 — missing/malformed
Authorization, revoked key, or a signature failure. See Authentication for the full signature-failure list. - 402 — plan quota exceeded — currently
"Device quota exceeded for this app's plan"on/register. - 403 — the key exists but does not belong to this app / environment, or the endpoint's capability is not on this plan.
- 404 — either the app / device / form / post could not be found for this key, or the URL path is wrong. Do NOT reduce this to "trailing slash" — always verify the app-scoped resource exists too.
- 413 — request body exceeded the endpoint's byte cap (16 KiB / 32 KiB / 64 KiB / 128 KiB / 256 KiB depending on route).
- 429 — rate limited. Body is
{ "error": "rate_limited" }; respectRetry-After(seconds)./sessionis deliberately exempt. - 500 — server error such as
"Register failed"or"Failed to load inbox". Retry with backoff. - 503 —
"Signature store unavailable"when nonce persistence fails. Retry.
Note
When a signature is required but wrong (expired timestamp, replayed nonce, bad signature), the response is
401. Roll the clock and the nonce, then retry — see Authentication.