Error reference
Standard error object
Most error responses are JSON with the following shape:
{ "error": "Human-readable message", "code": "OPTIONAL_MACHINE_CODE", "details": {}}| Field | Type | Description |
|---|---|---|
error | string | Short description suitable for logs and UI |
code | string | Optional stable code (LIMIT_EXCEEDED, FEATURE_REQUIRED, …) |
details | object | Optional extra context (limits, validation fields, stack in development) |
Not every endpoint returns code or details; treat error as the primary message.
HTTP status codes
| Status | When it happens |
|---|---|
| 400 | Invalid JSON, missing required fields, malformed URLs |
| 401 | Missing or invalid credentials where authentication is required |
| 403 | Valid session but not allowed (wrong owner, plan missing feature, quota exceeded) |
| 404 | Unknown route or missing resource (endpoint, log, key) |
| 413 | Request body larger than plan allows (webhook ingest) |
| 429 | Rate or daily quota exceeded |
| 500 | Unexpected server error |
{ "error": "Unauthorized"}{ "error": "This feature requires a higher subscription", "code": "FEATURE_REQUIRED", "upgradeUrl": "/pricing"}{ "error": "Daily request limit reached", "limit": 5000, "current": 5000}Common scenarios
| Symptom | Likely cause | What to do |
|---|---|---|
401 on /api/* | Session or credential invalid | Sign in again in the web app or fix the API key you pass to the endpoint |
403 FEATURE_REQUIRED | Plan does not include API keys, exports, advanced features, etc. | Upgrade plan or use an alternative flow |
403 LIMIT_EXCEEDED | Too many endpoints, keys, or permanent endpoints | Delete unused resources or upgrade |
404 on /h/:id | Endpoint expired or wrong ID | Create a new endpoint or copy the correct UUID |
| 413 on webhook | Payload over max_request_size | Reduce body size or upgrade plan |
| 429 | Too many requests in a window or per day | Back off, batch work, or upgrade |
Troubleshooting checklist
- Confirm you are using the correct base URL and, for WebSocket, a valid API key on the query string.
- Compare
code(when present) with your integration’s expected behavior. - If
500persists, retry with backoff where possible and contact support with the approximate time (UTC) and request context.