canonical: https://jentic.com/apis/jobopportunitiesapi.org/jobopportunitiesapi

# Job Opportunities API

The Job Opportunities API returns employer-direct job listings drawn from employer ATS systems, company careers pages, public employment agencies, and direct submissions. Every job carries field_sources, which marks each field as published by the source, inferred, or absent, and last_verified_at, which records when the vacancy was last confirmed at its source. Alongside live listings it keeps closed roles with their closure reason and date, a delta feed of created, updated, withdrawn, and delisted rows, employer profiles, and bulk NDJSON export for whole-corpus pulls.

## For AI agents

Search employer-direct job listings with filters for country, remote status, salary, seniority, and contract fields, and see which fields the source stated versus inferred. Also reads closed roles, a change feed, employer profiles, and bulk exports.

## Scope

Does not handle posting jobs, applicant tracking, or submitting applications. Use for searching and monitoring employer-direct job listings only.

## Capabilities

- Search live job listings with filters such as country, city, remote, seniority, min_salary, posted_after, and a free-text q, paging with a keyset cursor
- Return only listings whose remote status the source actually stated with remote_confirmed=true, using each job's field_sources provenance
- List roles that have closed at their source, filtered by closed_after, closed_before, and closed_reason
- Follow a delta feed of created, updated, withdrawn, and delisted listings since a given point
- Look up employers by country, org_type, or name and read one employer by its slug
- Stream the full listing corpus as NDJSON or queue a whole-country export pack and poll its status
- Check your key's plan, quota, and daily usage

## Use cases

### Agent Job Search via Jentic

An AI agent helping a candidate searches the Job Opportunities API for live listings matching their country, seniority, and salary floor, then reads each shortlisted listing for its full description. Through Jentic the agent finds the listing search by intent and calls it with your stored bearer token, and because each job carries field_sources it can tell the candidate which details the employer stated and which were inferred.

Example prompt: Search live listings with country 'DE', remote_confirmed=true, and min_salary 70000 for the title 'backend engineer', then fetch the top three by id and summarise each role

### Hiring Signal Tracking from Closed Roles

Recruiting analysts and sales teams read the closed roles listing, filtered by closed_after and closed_reason, to see which requisitions came off their source and when. A role that opened and closed quickly is a hiring signal, and pairing it with an employer lookup by slug gives the company context behind the change.

Example prompt: List roles closed after 2026-10-01, group them by company, and look up the three companies with the most closures by their slug

### Keeping a Job Board in Sync

A job board or aggregator seeds its database from the NDJSON export, then polls the delta feed with since to apply created, updated, withdrawn, and delisted rows in change order. The expired endpoint returns the ids of roles that have come off the ledger so stale listings can be removed.

Example prompt: Pull the change feed since the last saved checkpoint for country 'GB', apply each created or updated row, and delete the ids returned by the expired endpoint

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/v1/jobs` | Search live listings |
| GET | `/v1/jobs/{id}` | Get one listing with its description |
| GET | `/v1/jobs/closed` | List roles that left their source |
| GET | `/v1/changes` | Read the delta feed |
| GET | `/v1/companies` | List employers |
| GET | `/v1/export` | Stream the corpus as NDJSON |
| GET | `/v1/meta/facets` | Get filter values with live counts |

## Key resources

- **Jobs** — Live and closed employer-direct listings with field_sources provenance and last_verified_at.
- **Companies** — Employers whose live roles the API returns, addressable by slug.
- **Changes and exports** — Delta feed, expired ids, NDJSON export, and whole-country export packs.
- **Meta** — Facet counts, source providers, and ledger freshness.

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 49 / 100
- **Maturity:** Foundational
- **Dimensions:**
  - Foundational Compliance: 67 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 25 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 67 / 100
- **View full report:** https://jentic.com/apis/jobopportunitiesapi.org/jobopportunitiesapi/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring the Job Opportunities API by hand means sending its bearer token, learning dozens of query filters and their absence tokens, and paging with a keyset cursor because offsets are rejected. Through Jentic you install once, import the Job Opportunities API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** The listing id and employer slug sit in the URL path (`/v1/jobs/{id}`, `/v1/companies/{slug}`), so a rule can bound your agent to specific reads, while search filters travel as query parameters. You choose the operations it may call, so bulk export and export-pack operations that consume plan allowance are not included unless you add them.
- **Credential handling:** Your Job Opportunities API secret is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'find remote jobs' or 'list closed roles', and Jentic returns the matching Job Opportunities operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Adzuna API** — Adzuna aggregates job ads from many boards; the Job Opportunities API limits itself to employer-direct sources with field provenance.
- **TheirStack API** — TheirStack mines job postings for company technology signals; the Job Opportunities API focuses on verified listings and closures.
- **USAJOBS API** — USAJOBS covers US federal government vacancies only.
- **Greenhouse Harvest API** — Greenhouse Harvest manages an employer's own hiring pipeline; the Job Opportunities API reads public listings across employers.

## FAQ

### What authentication does the Job Opportunities API use?

The Job Opportunities API authenticates with a bearer token sent as Authorization: Bearer followed by your API secret, per its OpenAPI spec. The public endpoints under /public, such as site stats and market signal history, are open and need no token. Through Jentic the token is stored encrypted by your own Jentic One instance and injected at call time.

### Is there a Job Opportunities API MCP server?

You don't need an MCP server to give your agent the Job Opportunities API. Jentic connects it directly from the API Directory: import it, store your token once, and your agent searches listings, closed roles, and employers as it needs them. Operations are discovered on demand, so no extra server's tool definitions sit in your agent's context.

### Can I limit what my agent is allowed to do with the Job Opportunities API?

Yes. For example, write a rule that allows only the listing search and single-listing read operations, so a candidate-facing agent can find and read jobs but cannot run bulk exports or queue export packs that draw on your plan's allowance. Because the employer slug is in the path at `/v1/companies/{slug}`, a rule can also hold an agent to one company's profile, and every call is logged.

### How do I find only jobs that are confirmed remote with the Job Opportunities API?

Add remote_confirmed=true to the listing search. Each job's field_sources names every field as published, inferred, or absent, and this filter returns only listings whose remote status the source itself stated rather than one derived by the API.

### What are the rate limits for the Job Opportunities API?

The Job Opportunities OpenAPI spec defines a rate-limited response that reports the limit hit in records per month, requests per day, or requests per minute, but it does not publish the numbers. Call GET `/v1/me` to read your key's plan and quota, and check https://jobopportunitiesapi.org for plan details.

### How do I search job listings with the Job Opportunities API through Jentic?

Search Jentic for an intent like 'find remote jobs in a country', import the Job Opportunities API from the API Directory, and store your bearer token once. Your agent then calls GET `/v1/jobs` with filters such as country and title, passing next_cursor back as cursor to page. To run it on your own infrastructure, install Jentic One from its GitHub repo.
