Get started / Quickstart

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.

  1. 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.

  2. Check you can reach the API

    /v1/health needs no key, so it isolates network problems from auth problems:

    cURL
    curl https://api.hyperjobs.io/v1/health
    Response
    { "ok": true, "jobs": 596768, "version": "1.0.0" }
  3. 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"
  4. 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"
    }

    total is the full match count, not the page size; next_cursor is how you page to the rest. company is 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:

BASH
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#

Was this page helpful?