403
Do not retryForbidden — valid token, insufficient access — Your token authenticated fine, but it is not entitled to what you asked for.
Response body
{ "error": { "code": "field_not_in_plan", … } }
Should you retry?
No — the same request will fail the same way. Fix it first.
What it means
Distinct from a 401: the credential is good. What is missing is either an organization link or a specific capability your plan does not include. Check error.code to tell which.
Common causes
- `field_not_in_plan` — a field or filter your subscription tier does not include (for example, requesting `contacts` or `workplace_details` below the `max` tier). `error.details.fields` names the offending parameters.
- `organization_not_linked` — a valid token that resolves to no organization; it authenticates but entitles nothing.
- `organization_api_disabled` — API access has been turned off for your organization entirely.
How to fix it
For field_not_in_plan, drop the field/filter or upgrade your plan — see account types for what each tier includes. For the other two, this is an account-configuration issue: contact your JobFront representative rather than retrying.
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 |