Job Opportunities API

Check the data. Then trust it.

Documentation

Everything, in one place

The Job Opportunities API, the ledger behind it, and every control on this website — documented to the level of individual parameters and individual buttons. Each concept is one sentence you can read at a glance, with the reasoning and the exact contract one click away.

35 pages149 documented concepts3,426,911 live listings249 countries

Figures above are read from /public/coverage — measured 12 September 2026, 01:52 UTC. Nothing on this site quotes a number it did not fetch.

I am integrating today

  1. Quickstart — keyless call, then a key, then an authenticated one.
  2. Authentication — one header, three accepted spellings.
  3. Pagination — and the one rule that bites.
  4. Errors — which to retry and which not to.
  5. Parameters — generated from the live spec.

Everything on this site

The ledger

What the data is, where it comes from, and what it is not.

What the ledger isEmployer-direct openings, kept as a record rather than a feed. What that phrase actually commits us to, and who it suits.3 sections · “Employer-direct” — what it means and what it excludes · A ledger, not a feed · Who this suits, and who it does notThe data modellive + withheld + closed = ledger_rows, and it reconciles exactly. Almost every misunderstanding about this product traces back to this one equation.5 sections · The three populations · Withheld rows — held, not served · Closed roles · …ProvenanceEvery field on every row says whether the source published it, whether we inferred it, or whether it is absent. This is the most distinctive thing in the product.4 sections · field_sources — per-field provenance · require_fields — the honest subset · Why require_fields=category is an error · …Sourcing and refusalsThe three source classes, the providers inside each, the redistribution flag that gates them, and the sources we fetch for ourselves and never republish.5 sections · The three source classes · Every provider, with its live row count · The redistribution flag — a join, not a filter · …Coverage and honestyHow to read /public/coverage, why the weak numbers are published as prominently as the strong ones, and what measured_at and stale actually mean.5 sections · The coverage report · Per-field completeness · Per-country coverage · …Employer opt-out and takedownsHow a site owner removes themselves, why the removal is verified rather than taken on trust, and how it propagates to every endpoint.3 sections · Removing your site · How it propagates · Corrections and takedowns for a single listing

API

Hosts, auth, limits, paging, errors, and every parameter.

API overviewHosts, versioning, caching, CORS and the HTTP conventions every endpoint follows. Read the hosts section first — getting it wrong costs people hours.5 sections · Two hosts, and which one to send requests to · Versioning and how changes are made · CORS and calling from a browser · …AuthenticationOne header, three accepted spellings, and a deliberate refusal to tell an attacker which kind of wrong a wrong key is.4 sections · The header · Three accepted spellings, and why · What a rejected key looks like · …Keyless accessWhat /public/* gives you with no account: real rows, one page at a time, bounded so that evaluating is free and extracting is not.3 sections · What you get without an account · The limits, exactly · When keyless stops being enoughRate limitsTwo independent ceilings — requests per minute and per day — plus a monthly record allowance that is a licence rather than a throttle. They fail differently.4 sections · The per-plan limits · The response headers · Backing off correctly · …PaginationKeyset cursors, not offsets. One rule matters more than the rest: hand next_cursor back exactly as you received it.4 sections · How paging works · next_cursor is opaque — this is the rule that bites · The one endpoint with offsets · …ErrorsEvery status the API emits, its JSON shape, whether it is worth retrying, and what to do about it. Two of them are routinely confused and it is expensive.5 sections · The shape of an error · Every status code · 402 — the licence, not the throttle · …ParametersEvery query parameter the listing endpoints take, grouped by what it does, generated from the live specification so it cannot drift.12 sections · How to read these tables · Paging · Place — country, city, state · …FieldsEvery field on a job row and a company row, with its type, whether it is always present, and whether it can ever be our inference rather than the source's statement.5 sections · The job row · field_sources · The salary fields · …Filtering cookbookHow the filters combine, how to exclude rather than include, which text filter to reach for, and which queries are expensive enough to time out.5 sections · Twenty questions, and the query for each · How filters combine · Excluding rather than including · …

Endpoints

Every route, with its full contract and worked calls.

How this site is put together

Three tiers on every concept

One sentence always visible. In depth for why it exists and what people get wrong. Exact contract for types, defaults and errors. Both expand in place, and both are in the served HTML whether you open them or not — so a crawler or an agent reading the raw page receives everything.

How to read this site →

Deep links to any section

Every section has a § button that copies its permanent link, and /docs?s=<section-id> resolves an id to whichever page owns it. Ids are unique across the whole site, and the build fails if two ever collide.

Linking to one section →

No number here is typed by hand

Every figure is rendered from the endpoint that owns it and printed with the instant it was measured. Every parameter and field table is generated from the OpenAPI spec. Every published request is re-sent against the live API before this site is allowed to build.

Why →

A machine-readable copy of all of it

Every page also exists as plain Markdown under /docs/ai/, served as text/markdown, rendered from the same source as the HTML so the two cannot drift.

/docs/ai/index.md →
Documentation · Job Opportunities API