429
Retry with backoffRate limited — You exceeded one of the two enforcement windows.
Response body
{ "error": { "code": "rate_limited", … } }
Should you retry?
Yes — with exponential backoff, and honour Retry-After
when it is present.
What it means
One code covers both windows, because the client action is identical: honour Retry-After. Which window blocked you is data — error.details.window_seconds is 60 for the burst floor and 18000 for the 5-hour budget, and error.details.retry_after_seconds is the same value the header carries. An exhausted 5-hour budget returns 18000, not 60 — retrying sooner just hits the same wall.
Common causes
- A burst spent the 1-minute floor.
- Sustained volume spent the 5-hour budget — the more common case.
- Deep `offset` pagination making many small requests instead of following the cursor.
How to fix it
Honour Retry-After exactly. Watch X-RateLimit-Remaining-5h as the primary signal and slow down before you get here. Prefer cursor pagination for large pulls: fewer, fuller pages cost fewer requests.
Endpoints that return this
Read from the OpenAPI specification, so this list cannot claim an endpoint returns a status the contract does not list.
| Method | Endpoint | What it does |
|---|---|---|
| GET | /v4/jobs | Search jobs |
| GET | /v4/jobs/search | Search jobs (alias of /v4/jobs) |
| GET | /v4/jobs/options | Job facet values |
| GET | /v4/jobs/{job_id} | One job by global id |
| GET | /v4/autocomplete/titles | Job-title suggestions |
| GET | /v4/autocomplete/sources | Source (company) suggestions |
| GET | /v4/sources | Search sources (companies) |
| GET | /v4/sources/search | Search sources (alias of /v4/sources) |
| GET | /v4/sources/options | Source facet values |
| GET | /v4/sources-id/{source_id} | One source by id |
| GET | /v4/sources-url/{url_source} | One source by URL |
| GET | /v4/sources/{url_source} | One source by URL (alias) |
| GET | /v4/sources-id/{source_id}/jobs | A source's jobs (by id) |
| GET | /v4/sources/{url_source}/jobs | A source's jobs (by URL) |
| GET | /v4/sources-id/{source_id}/related | Related sources (by id) |
| GET | /v4/sources/{url_source}/related | Related sources (by URL) |
| GET | /v4/jobs/hidden | Jobs you have hidden |
| POST | /v4/jobs/hidden/{job_id} | Hide a job |
| DELETE | /v4/jobs/hidden/{job_id} | Un-hide a job |
| GET | /v4/sources/blocked | Companies you have blocked |
| POST | /v4/sources/blocked/{source_id} | Block a company |
| DELETE | /v4/sources/blocked/{source_id} | Unblock a company |
| GET | /v4/me | Your plan and current quota |
| GET | /v4/usage | Daily usage history |
| POST | /mcp | MCP server (JSON-RPC 2.0) |
| GET | /v4/signals | List signals |
| GET | /v4/signals/types | Signal types that have fired |
| GET | /v4/sources-id/{source_id}/signals | One employer's signals |
| GET | /v4/metrics | Metrics for a slice |
| POST | /v4/metrics/query | Metrics for a slice (POST) |
| GET | /v4/metrics/series | Metrics over time |
| GET | /v4/metrics/distribution | Pay distribution for a slice |
| GET | /v4/metrics/concentration | Where this work is concentrated |
| GET | /v4/metrics/benchmark | A slice against a wider one |
| GET | /v4/metrics/skill-premium | What each technology pays in a slice |
| GET | /v4/metrics/status | What the metrics grid holds |
| GET | /v4/technologies | Search the technology catalog |
| GET | /v4/technologies/trend | Technologies over time in a slice |
| GET | /v4/technologies/stack | A slice's stack |
| GET | /v4/sources-id/{source_id}/technologies | One employer's stack |
| GET | /v4/technologies/churn | How fast a slice's skill mix turns over |
| GET | /v4/technologies/bridge | Where two occupations converge |
| GET | /v4/technologies/similar-occupations | Occupations with a similar skill mix |
| GET | /v4/technologies/status | What the technology grid holds |