code field — the status tells you the category, the code tells you exactly what happened.
Envelope
| Field | Notes |
|---|---|
code | Stable, snake_case identifier. Don’t parse message — use code for branching logic. |
message | Human-readable explanation. May change over time. |
docs_url | Permalink to the docs page for this specific code. |
request_id | Echoes the X-Request-Id response header. Include this when contacting support. |
X-Request-Id. Capture it in your client logs so we can trace failures end-to-end.
Status codes
| Status | Meaning |
|---|---|
200 | Success. |
400 | Your request is malformed — bad parameter shape, unknown enum value, etc. |
401 | Authentication failed: missing, invalid, or revoked API key. |
403 | Authenticated but not permitted to access this resource. |
404 | The resource doesn’t exist, or it belongs to a different account. |
429 | Rate limit exceeded. Retry with backoff. |
500 | Something broke on our side. We get paged; you should retry with backoff. |
Common error codes
| Code | HTTP | Meaning | What to do |
|---|---|---|---|
missing_api_key | 401 | No Authorization header. | Send Authorization: Bearer sv_live_…. |
invalid_api_key | 401 | Key doesn’t match a live, non-revoked key. | Check for typos; verify in Settings → Developers. |
invalid_parameter | 400 | A query parameter was the wrong shape or out of range. | Read message — it names the offending field. |
invalid_status | 400 | status filter wasn’t one of the allowed values. | See the API reference for valid enum values per resource. |
invalid_priority | 400 | priority filter wasn’t LOW, MEDIUM, or HIGH. | Use uppercase. |
not_found | 404 | Resource doesn’t exist or isn’t owned by your account. | We never reveal whether a resource exists for someone else. |
rate_limited | 429 | Too many requests in a short window. | Back off — see Retry-After header. |
internal_error | 500 | Unexpected server failure. | Retry with exponential backoff. Include request_id when reporting. |
Retrying
429 and 5xx responses are safe to retry. We recommend exponential backoff starting at 1 second, capped at 30 seconds, with jitter. 4xx errors other than 429 are deterministic — retrying without changing the request won’t help.