GET /api/v1/jobs returns every live public listing as JSON. No key, no auth, no signup. Filter with query parameters:
curl "https://picked.ai/api/v1/jobs?country=GB&remote=true"
The response envelope is { version, count, jobs }. Within v1 the shape only ever gains fields; nothing is renamed or removed. Fetch a single job with GET /api/v1/jobs/{slug}, using the slug from the list response or from the job page URL.
Errors are { version, error } with an enum code: not_found, rate_limited or temporarily_unavailable. Responses are CDN cached for up to an hour, so a repeated query is close to free.
POST /api/mcp is a Model Context Protocol server over the same live listings: Streamable HTTP, stateless, no auth. Three tools:
search_jobs: search live listings with the same filters as the JSON API.
get_job: fetch one job by slug, with the full description and the apply URL.
get_company: fetch a company profile and its open roles.
Add it to an MCP client config as a remote server:
{ "mcpServers": { "picked-jobs": { "url": "https://picked.ai/api/mcp" } } }Apply URLs point at the canonical job page. The form is one screen with no account: name, email, location, CV upload. Disclosed agent applies are welcome. Every candidate is assessed on merit, human or agent assisted alike.
The verification email must be clicked by the human candidate; an application only enters the process after that click.
About 60 requests per minute per IP. Over the limit you get a 429 with a Retry-After header. Responses are cached; heavy consumers should prefer the list endpoint over per-job fetches. Identify your agent with a descriptive User-Agent.
Applications that arrive through these surfaces carry their source (agent_api, agent_mcp), and employers see them as a first class channel with the same quality scoring as every other source.
Looking for the human version? Browse the same listings at picked.ai/jobs.