Job Opportunities API

Check the data. Then trust it.

Give your agent job data it can cite

Building a job-search agent, a sourcing assistant, or retrieval over labour-market data? Every row carries field_sources, which marks each field published (the employer said it) or inferred (we derived it). Your agent can then tell the two apart instead of presenting guesses as facts. Closed roles stay in the ledger with a closure date, so an agent can say “this role closed on 12 September” instead of sending someone to a dead link.

Start with llms.txt or the worked examples, which include tool definitions for Claude and GPT. Honest limit: there is no MCP server today; use the OpenAPI spec or plain HTTP. 1,000 records a month are free, no card.

Get a free key →Read llms.txt

Explore is free forever, no card: 1,000 records a month against every endpoint. Outgrow that and Starter is €29 / month for 10,000 records, or Growth is €80 / month for 60,000 records with the incremental delta feed — both self-serve, no call required. See the full ladder →

Check our numbers right now — no key, no account
GET https://api.jobopportunitiesapi.org/public/facets

Loading live counts…

One job row, as a key returns it. A real row captured on 2026-08-03, shown as an example, not a live call. The counts above are what you can check without one.

{
  "data": [
    {
      "id": "8f2c…", "slug": "backend-engineer-8f2c1a4b",
      "title": "Backend Engineer", "company": "Nordbridge Labs",
      "company_slug": "nordbridge-labs",
      "category": "Engineering", "category_confidence": 0.82,
      "country": "DE", "city": "Berlin",
      "remote": "hybrid", "remote_inferred": false,
      "employment_type": "Full-time", "seniority": "Senior",
      "posted_at": "2026-07-12T09:00:00Z",
      "last_verified_at": "2026-08-03T04:00:00Z",
      "status": "live", "closed_at": null, "closed_reason": null,
      "source": "greenhouse",
      "source_type": "ats", "provider_type": "employer_ats",
      "has_description": true,
      "description": "We're looking for a backend engineer to join our platform team, "
        + "building the services that route millions of jobs a day. You'll work mostly in "
        + "Go, own a service end to end, and be on a small rotation for on-call. Remote "
        + "within the EU, or hybrid from our Berlin office two days a week.",
      "field_sources": {
        "remote": "published", "employment_type": "published",
        "category": "inferred", "seniority": "inferred",
        "salary": "absent", "location": "published",
        "posted_at": "published", "description": "published",
        "source_type": "inferred"
      }
    }
  ],
  "next_cursor": null,
  "has_more": true
}

Keyless requests return the ledger’s shape: counts, coverage and freshness. Job and company rows need a key. A free Explore key takes about a minute, needs no card, and gives you 1,000 records a month that never expire.

Get a free key →
  1. Enter your email.
  2. Click the link we send.
  3. Press “Create a free Explore key”. No card, and nothing to cancel.
What an agent gets that HTML does not
Provenance per field. field_sources marks every field published, inferred or absent — an agent that has to decide how much to trust a field can read the answer instead of guessing it.
Closures, not dead links. A role that comes off its source is kept with closed_at and closed_reason, so an agent can report what happened instead of following a link to nothing.
Cursors, not scraping. Rows arrive as JSON with a real pagination cursor and an incremental delta feed on paid plans — nothing here survives being parsed out of rendered HTML, which is the alternative.
Worked tool definitions. The example programs include a tool definition for Claude and for GPT, an embedding-chunking example that keeps its provenance, and a SQLite mirror off the delta feed. Python, standard library only, run against this API before every release. The integrations reference covers what is packaged today and what is not — MCP included.
An integration brief written for you, not about you. GET /public/ai-prompt returns a live, keyless, machine-generated brief covering the shape of the data, the gates and how to page it — paste it straight into a system prompt. Try it: api.jobopportunitiesapi.org/public/ai-prompt.

Honest limit, stated plainly: there is no MCP server today. Integrate through the OpenAPI spec or plain HTTP. If you specifically need one for Claude Desktop or Cursor, tell us — it is the most-requested integration and we are tracking real demand before we build it.