Appearance
Error catalogue
Every error response carries three machine-readable fields:
json
{ "errorId": 23, "errorCode": "ERROR_TASK_EXPIRED", "errorDescription": "Task result has expired." }errorCode is the stable contract — script against it, not against errorId (which is preserved only for v1 compat).
| errorId | errorCode | When |
|---|---|---|
| 1 | ERROR_NO_SLOT_AVAILABLE | At thread limit — slow down or raise your thread limit |
| 2 | ERROR_KEY_DOES_NOT_EXIST | Bad clientKey |
| 3 | ERROR_TASK_NOT_FOUND | Task id not found or expired |
| 4 | ERROR_POLL_LIMIT_EXCEEDED | Too many polls on the same task id (default 120, configurable) |
| 5 | ERROR_TASK_TYPE_UNSUPPORTED | task.type is missing or unsupported |
| 6 | ERROR_PAYLOAD_TOO_LARGE | Inline payload exceeds the configured limit |
| 7 | ERROR_CALLBACK_URL_INVALID | Bad host, private IP, or wrong scheme |
| 8 | ERROR_VALIDATION | A required field is missing / malformed |
| 9 | ERROR_UPSTREAM_UNAVAILABLE | Redis or RabbitMQ unavailable — try again shortly |
| 10 | ERROR_NOT_IMPLEMENTED | Endpoint is reserved for a future phase |
| 11 | ERROR_CLIENT_BLOCKED | Client is suspended or blocked |
| 22 | ERROR_QUEUE_PUBLISH_FAILED | RabbitMQ down — your admission was rolled back |
| 23 | ERROR_TASK_EXPIRED | Task existed but its result TTL elapsed |
| 24 | ERROR_SERVICE_PAUSED | Task admission is temporarily paused — retry shortly |
| 99 | ERROR_INTERNAL | Bug. Open a ticket with the requestId header |
Retry policy
| Code | Safe to retry? | Notes |
|---|---|---|
ERROR_NO_SLOT_AVAILABLE | yes, with backoff | Watch the Retry-After header |
ERROR_QUEUE_PUBLISH_FAILED | yes | Admission was rolled back, thread is free |
ERROR_VALIDATION | no | Fix the request |
ERROR_INTERNAL | yes once, then alert | We page on 5xx rate >2 % for 10 m |