Errors
The API uses standard HTTP status codes and returns structured error responses.
Error Response Format
All errors return a JSON object with these fields:
json
{"status_code": 400,"error_code": "INVALID_REQUEST","detail": "The URL provided is not supported."}
HTTP Status Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Resource created |
| 204 | Deleted (no content) |
| 400 | Bad request - invalid parameters |
| 401 | Unauthorized - missing or invalid token |
| 403 | Forbidden - insufficient permissions or expired plan |
| 404 | Not found |
| 422 | Validation error |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
Error Codes
| Error Code | Status | Description |
|---|---|---|
INVALID_REQUEST | 400 | The request body or parameters are invalid |
INVALID_URL | 400 | The provided URL is not supported or malformed |
AUTH_HEADER_TOKEN | 401 | Missing or invalid X-AUTH-TOKEN header |
TOKEN_EXPIRED | 403 | The API token has expired |
PLAN_EXPIRED | 403 | Your subscription has expired |
PLATFORM_NOT_ALLOWED | 403 | Platform not available on your tier |
DAILY_LIMIT_EXCEEDED | 429 | Daily request limit exceeded |
RATE_LIMIT_EXCEEDED | 429 | Per-minute rate limit exceeded |
CONCURRENCY_RATE_LIMIT | 429 | Too many concurrent exports |
QUEUE_LIMIT_EXCEEDED | 429 | Too many queued exports |
RATE_WINDOW_EXCEEDED | 429 | Too many job creations in the sliding window |
Rate Limit Error Response
When rate limited, the response includes a seconds_to_wait field:
json
{"status_code": 429,"error_code": "RATE_LIMIT_EXCEEDED","seconds_to_wait": 60,"detail": "Rate limit exceeded. Please wait 60 seconds."}