API & dumps
OpenIntern is a free, structured corpus of tech internships. Browse the board with no account. Mark applied status in your browser only. Query the public API or download the daily dump for bulk use.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/jobs | List role families with nested postings (paginated, filterable) |
| GET | /api/v1/jobs/{id} | Single job by UUID |
| GET | /api/v1/companies | Company registry |
| GET | /api/v1/health | Ingest pipeline health |
GET /api/v1/jobs query params
| Param | Notes |
|---|---|
| q | Title substring (case-insensitive) |
| company | Company slug (exact) |
| role | software|backend|frontend|fullstack|data|ml|mobile|security|devops|hardware|quant|product|research — repeatable or comma-separated (OR) |
| region | remote|us|canada|europe|other — repeatable or comma-separated (OR) |
| season | summer|fall|winter (spring → summer). Repeatable or comma-separated. Board-compatible alias: term |
| duration_months | Repeatable/comma-separated ints (1–24). Matches jobs whose duration array overlaps any selected value (e.g. Cohere “4–6 months” matches 4 or 6). Board-compatible alias: duration |
| posted_after | ISO date — jobs posted on/after |
| page | Page number (default 1) |
| limit | Page size in role families (default 27, max 100) |
The live API is grouped by role family (same title variants across locations). Response shape: { jobs, page, limit, total, total_pages, has_more }. Each entry has role_family_id, company, title, and postings[] (id, location, posted_at, apply_url). Daily dumps stay flat (one row per posting).
Examples
curl "https://openintern.dev/api/v1/jobs?role=ml,software&limit=10"
curl "https://openintern.dev/api/v1/jobs?region=canada&season=fall,winter"
curl "https://openintern.dev/api/v1/jobs?duration_months=4,6"
curl "https://openintern.dev/api/v1/jobs/{id}"
curl "https://openintern.dev/api/v1/companies"
curl "https://openintern.dev/api/v1/health"Rate limits & bulk access
The hosted API defaults to 60 requests per minute per IP. Limits are best-effort on serverless instances and may be changed for stability. For bulk consumers, prefer the daily dumps below or self-host — don’t paginate the hosted API all day.
Dump fields
JSON/CSV rows include: id, title, company, company_slug, locations, apply_url, excerpt, terms, term_years, duration_months (int[]), cohort_year, roles, regions, is_remote, source, posted_at, first_seen_at, last_seen_at. Seasons are summer|fall|winter only (spring stored as summer). Past seasons and old postings without term years are hidden consistently on the board, API, sitemap, job detail pages, and dumps. JSON uses the envelope { generatedAt, count, jobs }; CSV is flat.
Add a company
Extend the corpus with a YAML PR — see CONTRIBUTING.md. Supported ATS: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Rippling, BambooHR.