Public API
A read-only JSON API over the same data the site renders. No API key is required. Responses are cached at the edge with stale-while-revalidate, and clients are rate limited per IP.
Conventions
Conventions
- • All responses are JSON with a
dataarray or object and ametaobject. - •
meta.generatedAtis the render time in UTC. - • Scores are integers 0-100. Deltas are signed points since the previous calculation.
- • Approximate values are suffixed
Approxin field names. - • Errors return an object with
erroranddetailfields and a 4xx or 5xx status. - • Rate limit: 60 requests per minute per IP for search, 120 for the rest. Exceeding it returns 429 with
Retry-After. - • Slugs must match
^[a-z0-9-]{1,90}$; all inputs are parameterised, never interpolated into SQL.
Endpoints
Endpoints
| Method | Path | Parameters | Description | Example |
|---|---|---|---|---|
| GET | /api/jobs | q, industry, category, sort, minExposure, maxExposure, limit | Occupations with exposure scores and component breakdowns. Sort accepts safety (safest first). | curl https://aikillswhat.com/api/jobs?sort=safety&maxExposure=40&limit=20 |
| GET | /api/jobs/{slug} | - | One occupation: score, components, tasks, evidence trail and series. | curl https://aikillswhat.com/api/jobs/graphic-designer |
| GET | /api/tasks | q, category, sort, limit | Task taxonomy with automation exposure and occupation counts. | curl https://aikillswhat.com/api/tasks?limit=50 |
| GET | /api/tasks/{slug} | - | One task: exposure, capabilities, occupations and evidence. | curl https://aikillswhat.com/api/tasks/data-entry |
| GET | /api/models | q, capability, limit | AI models with release dates, modality and capability summaries. | curl https://aikillswhat.com/api/models |
| GET | /api/events | type, occupation, limit, offset | Live event feed, newest first. Source internals are never exposed. | curl https://aikillswhat.com/api/events?type=new_model&limit=10 |
| GET | /api/signals | type, limit, offset | Signals with scores and total count. Source internals are never exposed. | curl https://aikillswhat.com/api/signals?type=new_model |
| GET | /api/stats | - | Coverage counts and data freshness. | curl https://aikillswhat.com/api/stats |
| GET | /api/search | q | Cross-entity search over occupations, tasks, models, tools and industries. | curl https://aikillswhat.com/api/search?q=designer |
| GET | /api/health | - | Liveness and database check. | curl https://aikillswhat.com/api/health |
| GET | /api/health/ingestion | - | Pipeline freshness without per-feed internals. | curl https://aikillswhat.com/api/health/ingestion |
Internal
Internal endpoints
POST /api/cron/ingest runs the ingestion pipeline. It is authenticated with CRON_SECRET and is intended for the scheduler, not for public use. It is documented here because its behaviour affects data freshness, which is itself public.
The admin interface at /admin is not part of the public API, is excluded from robots and returns no data without a valid session.