Errors & rate limits
Error responses
Section titled “Error responses”The Jobs API uses standard HTTP status codes. The body is JSON.
| Status | Meaning | What to do |
|---|---|---|
200 OK | Success. | — |
401 Unauthorized | API key missing, malformed, or revoked. | Check the Authorization / x-api-key header. Create or rotate the key. |
403 Forbidden | The key is valid, but your plan doesn’t include the public API. | Body carries {"code": "public_api_jobs_not_in_plan"}. Upgrade your plan or contact Atlast. |
404 Not Found | The job doesn’t exist, isn’t published, or belongs to another organisation. | Treat the job as not publicly available — remove or hide it on your side. |
429 Too Many Requests | You exceeded the rate limit. | Back off and retry (see below). |
Example: 403 (plan)
Section titled “Example: 403 (plan)”{ "code": "public_api_jobs_not_in_plan", "message": "Your plan does not include the public Jobs API."}Rate limits
Section titled “Rate limits”Each API key is limited to:
60 requests per minuteThe limit is per key, so splitting traffic across multiple keys gives you more headroom (and lets you revoke one without affecting the others).
When you exceed it you get 429 Too Many Requests. Handle it gracefully:
- Back off — pause briefly before retrying, ideally with exponential backoff and jitter.
- Spread out bulk reads rather than bursting.
- Prefer webhooks over polling — if you’re polling frequently to detect changes, switch to webhooks and you’ll rarely hit the limit.
# Pseudocodeattempt=0until response=200; do call_api if response == 429; then sleep $(( 2 ** attempt )) # 1s, 2s, 4s, 8s… attempt=$(( attempt + 1 )) fidone