- Documentation
- Get started
Quickstart
From zero to your first enriched job payload in about two minutes: create a key, make one authenticated request to /v1/jobs, and read what comes back.
Before you start#
You need an API key. Keys are created in the dashboard and shown exactly once — see authentication for the details.
Create an API key
Sign in, open the dashboard, and create a key. It looks like
hj_live_followed by 48 hex characters.Copy it immediately. Only a hash is stored, so the full key cannot be shown again — if you lose it, revoke it and make another.
Check you can reach the API
/v1/healthneeds no key, so it isolates network problems from auth problems:cURLcurl https://api.hyperjobs.io/v1/healthResponse{ "ok": true, "jobs": 596768, "version": "1.0.0" }Make your first authenticated request
Ask for one remote job with a salary attached:
curl -H "Authorization: Bearer $HYPERJOBS_KEY" \ "https://api.hyperjobs.io/v1/jobs?remote=1&has_salary=true&limit=1"Read the response
JSON{ "data": [ { "id": "ashby:7c1f…", "title": "Staff Backend Engineer", "company": { "slug": "linear", "name": "Linear", "domain": "linear.app", "industry": "Software Development", "employee_count": 120 }, "location": { "remote": true, "countries": ["United States"], "cities": null }, "salary": { "annual_min": 190000, "annual_max": 240000, "currency": "USD" }, "skills": ["typescript", "graphql", "postgresql"], "apply_url": "https://jobs.ashbyhq.com/linear/…", "posted_at": "2026-07-08T14:02:11.000Z" } ], "total": 21497, "limit": 1, "offset": 0, "next_cursor": "eyJwIjoiMjAyNi0wNy0wOCAxNDowMjoxMSIsImlkIjoiYXNoYnk6N2MxZjJhOTQuLi4ifQ" }totalis the full match count, not the page size;next_cursoris how you page to the rest.companyis already there; there is no second request.
Two things worth knowing immediately#
Descriptions are omitted by default
description is absent from the response unless you ask for it with
description_format=text or html. Descriptions are multi-kilobyte, and
paying to move 200 of them when you wanted titles is the most common way to
make this API feel slow. Ask for them when you need them.
Comma means OR — except for skill
?country=US,Germany matches jobs in either country: on every multi-value
filter, a comma-separated list is OR. The one exception is skill, where the
list is AND — ?skill=python,aws returns jobs tagged both Python and
AWS, because "knows Python or AWS" is rarely what a skills filter means. See
filtering.
A more realistic query#
Senior remote backend roles at US companies, posted this week, with a salary, one row per company/title pair:
curl -G https://api.hyperjobs.io/v1/jobs \
-H "Authorization: Bearer $HYPERJOBS_KEY" \
--data-urlencode "skill=python" \
--data-urlencode "seniority=Mid-Senior level" \
--data-urlencode "work_arrangement=Remote" \
--data-urlencode "country=US" \
--data-urlencode "has_salary=true" \
--data-urlencode "time_frame=7d" \
--data-urlencode "collapse=true" \
--data-urlencode "limit=50"country takes an ISO-2 code or a full name — US and United States both
work, and a value that's neither is a 400, not an empty result. See
filtering.
Next#
Every filter, with the exact matching semantics.
Syncing the feedKeep a local copy fresh without re-crawling the index.
The Job objectEvery field, its type, and when it's null.
Rate limitsWhat your plan allows and how throttling behaves.