Jobs — entry 001 of 18
AI Dev Jobs
A REST job board built specifically for AI/agent access: search, apply, and even post AI/ML developer roles through a documented JSON API and an MCP server, alongside human-facing RSS/HTML views. Read endpoints are open with no key, gated only by hourly abuse throttling; an optional free API key raises those limits and gives a stable agent identity.
AI Dev Board is a job board built specifically for AI/ML engineering roles, with a REST API designed for both human tooling and agentic access — its own OpenAPI 3.0.3 spec (served live at aidevboard.com/openapi.yaml, enumerated this run) declares 22 paths covering job search, a candidate-matching endpoint, company profiles, tag/market statistics, and employer job-posting commerce. Every read endpoint is open with no key.
GreatAPIs Score
Auth quickstart
- No API key is required to read. A live probe of GET /tags this run returned real
x-ratelimit-limit: 200/x-ratelimit-remainingheaders withx-api-tier: anonymous— the anonymous tier is capped at 200 requests, andx-ratelimit-resetdecoded to the top of the current hour, confirming the spec's own "hourly abuse throttles" description as a measured fact, not a docs claim. - A free API key is available via
POST /registerwith a JSON body of{"name", "email"}, returned in the response and then sent back as anX-API-Keyheader on later calls (per the live spec'ssecuritySchemes.apiKey) — not tested live this run since it requires submitting a real email address; the spec states it exists only to raise the throttle and give a stable agent identity, not to unlock otherwise-gated data.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
analytics1
GET/analytics/searchesAPI search usage analytics
| Name | In | Required | Type |
|---|---|---|---|
days | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Free search and compiler transparency aggregates. Aggregate analytics are not a commercial product. | — |
candidate1
POST/candidate/resume-previewCompile a free anonymous job-specific resume preview
application/json (required)
| Status | Description | Schema |
|---|---|---|
200 | Anonymous, non-persisted preview with public job-signal coverage and a candidate-evidence improvement loop; no approval or submission authority. | — |
400 | Invalid, unverified, manipulative, hidden, or oversized candidate evidence. | — |
404 | Job not found or inactive. | — |
429 | Hourly abuse throttle exceeded. | — |
catalog1
GET/catalogOutcome-only employer pilot catalog
| Status | Description | Schema |
|---|---|---|
200 | Commerce catalog | — |
checkout2
GET/checkoutDiscover owner activation-review handoffs
| Status | Description | Schema |
|---|---|---|
200 | Non-binding owner activation-review handoff | — |
POST/checkoutCreate an owner activation-review handoff
application/json (required)
| Status | Description | Schema |
|---|---|---|
200 | Owner activation-review handoff; no external charge | — |
410 | Retired product requested; response includes the outcome-only pilot fallback | — |
companies2
GET/companiesList all companies with active job listings
| Status | Description | Schema |
|---|---|---|
200 | Companies sorted by job count, with avg salary data | — |
GET/companies/{slug}Get company details, active jobs, and engagement stats
| Name | In | Required | Type |
|---|---|---|---|
slug | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Company info (name, slug, website, logo_url, avg_salary, salary_count, views, views_7d, clicks) plus all active job listings | — |
404 | Company not found | — |
company1
POST/company/market-demand-pack/checkoutRetired company Market Brief endpoint
| Status | Description | Schema |
|---|---|---|
401 | Company API credential required. | — |
410 | Outcome-only commerce retirement response. | — |
developer4
POST/developer/apply/{job_id}Submit an exact reviewed artifact (requires verified candidate API key and explicit authorization)
| Name | In | Required | Type |
|---|---|---|---|
job_id | path | yes | string |
application/json
| Status | Description | Schema |
|---|---|---|
201 | Exact compiled artifact submitted and authorization consumed | — |
403 | Candidate email verification or exact-authorization binding failed | — |
409 | Missing, expired, stale, consumed, or duplicate exact authorization | — |
POST/developer/resend-verificationSend a fresh candidate email verification link
| Status | Description | Schema |
|---|---|---|
202 | Verification email queued | — |
POST/developer/subscribeRetired API Pro subscription endpoint
| Status | Description | Schema |
|---|---|---|
410 | API Pro checkout retired | — |
GET/developer/verifyVerify candidate email using the one-time registration link
| Name | In | Required | Type |
|---|---|---|---|
token | query | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Candidate email verified | — |
jobs4
GET/jobsSearch and list AI developer jobs
| Name | In | Required | Type |
|---|---|---|---|
q | query | no | string |
tags | query | no | string |
location | query | no | string |
workplace | query | no | string |
global_remote | query | no | boolean |
remote_scope | query | no | string |
type | query | no | string |
level | query | no | string |
salary_min | query | no | integer |
salary_max | query | no | integer |
salary_floor_min | query | no | integer |
posted_within_days | query | no | integer |
limit | query | no | integer |
page | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Paginated list of jobs | — |
POST/jobs/matchMatch jobs to a candidate profile — returns ranked results
application/json (required)
| Status | Description | Schema |
|---|---|---|
200 | Ranked job matches with scores and reasons | — |
GET/jobs/{id_or_slug}Get a specific job by ID or slug
| Name | In | Required | Type |
|---|---|---|---|
id_or_slug | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Full job details including description, requirements, apply URL | Job |
404 | Job not found | — |
GET/jobs/{id_or_slug}/similarFind similar jobs
| Name | In | Required | Type |
|---|---|---|---|
id_or_slug | path | yes | string |
limit | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Similar jobs ranked by similarity score | — |
404 | Job not found | — |
pricing1
GET/pricingOutcome-only employer pilot terms
| Status | Description | Schema |
|---|---|---|
200 | Outcome-only pilot contract | — |
quote2
GET/quoteGet a deterministic quote by query parameter
| Name | In | Required | Type |
|---|---|---|---|
product_id | query | no | string |
productId | query | no | string |
tier | query | no | string |
sku | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Pilot terms and owner-review constraints | — |
POST/quoteCreate a deterministic quote
application/json
| Status | Description | Schema |
|---|---|---|
200 | Pilot terms and owner-review constraints | — |
register3
POST/registerRegister for a developer API key (free)
application/json (required)
| Status | Description | Schema |
|---|---|---|
201 | API key returned | — |
POST/register/companyRegister a company for posting jobs
application/json (required)
| Status | Description | Schema |
|---|---|---|
201 | Company created with API key | — |
POST/register/developerLegacy alias for developer API-key registration
application/json (required)
| Status | Description | Schema |
|---|---|---|
201 | API key returned | — |
salary-trends1
GET/salary-trendsHistorical salary trend snapshots
| Name | In | Required | Type |
|---|---|---|---|
days | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Time-series of salary snapshots | — |
stats1
GET/statsAI developer job market statistics and salary benchmarks
| Status | Description | Schema |
|---|---|---|
200 | Market statistics | — |
subscribe1
POST/subscribeSubscribe to the weekly AI Dev Jobs newsletter
application/json (required)
| Status | Description | Schema |
|---|---|---|
200 | Subscribed (or already subscribed — idempotent) | — |
400 | Invalid email | — |
tags1
GET/tagsList popular tags with job counts
| Status | Description | Schema |
|---|---|---|
200 | Tags and degraded-state metadata | — |
trending1
GET/trending/companiesCompanies hiring most aggressively in the last N days
| Name | In | Required | Type |
|---|---|---|---|
days | query | no | integer |
limit | query | no | integer |
| Status | Description | Schema |
|---|---|---|
200 | Company leaderboard | — |
Try it
Developer reference
https://aidevboard.com/api/v1200 requests/hour for the anonymous tier, confirmed live via x-ratelimit-limit/x-ratelimit-remaining response headers, resetting on the top of the clock hour (x-ratelimit-reset)
- GET/jobs
- GET/jobs/{id_or_slug}
- GET/tags
- GET/stats
Gotchas & limits
- Every response, including this one, embeds a
candidate_actions.job_search_pack(oraccess/market_demand_pack, depending on the endpoint) block advertising a $29 paid "AI Market Demand Pack" CSV — confirmed live on both /tags and /jobs. It's a commerce compatibility field bolted onto otherwise-free read endpoints, not part of the job/tag data itself. - The anonymous tier is rate-limited to 200 requests/hour, confirmed live via the
x-ratelimit-limit/x-ratelimit-remainingheaders on /tags;x-ratelimit-resetdecoded to an exact top-of-the-hour Unix timestamp, so the window resets on the clock hour rather than 60 minutes after the first call. - A nonexistent job ID or slug (confirmed live with
/jobs/does-not-exist-xyz) returns a clean404 application/jsonbody{"error":"job not found"}— not an empty body or an HTML error page. POST /jobs/match(the candidate-matching/agentic-search endpoint) requires askillsarray in the JSON body; an empty{}body returns400 application/jsonwith{"error":"skills array required (e.g. [\"python\",\"llm\",\"pytorch\"])"}, confirmed live — the message itself documents the expected shape.- CORS is wide open: confirmed live with
access-control-allow-origin: *on /tags, both bare and with anOrigin: https://example.comheader. - The
Linkresponse header on every request (confirmed live on /tags) advertises/llms.txt,/openapi.yaml, and/.well-known/mcp.jsonas machine-readable alternates — all three were confirmed live and reachable (200) this run.
Availability
Changelog
- gained an OpenAPI spec