401
Do not retryMissing or invalid token — The credential was absent, malformed, revoked or expired.
Response body
{ "error": { "code": "unauthorized", … } }
Should you retry?
No — the same request will fail the same way. Fix it first.
What it means
The credential itself is the problem — distinct from a 403, where the token authenticated but is not entitled to what you asked for.
Common causes
- No `Authorization` header at all.
- A token that was revoked or rotated out in the dashboard.
- The wrong environment's token.
- A token pasted with surrounding whitespace or quotes.
How to fix it
Refresh the token from your secret store, or issue a new one in the dashboard under Settings → API. Do not retry with the same credential — it will fail identically every time.
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 |