{"openapi":"3.1.0","info":{"title":"HyperJobs API","version":"1.0.0","description":"Job postings scraped at the source from 60+ ATS platforms and job boards — Greenhouse, Ashby, Lever, Workday, SmartRecruiters, plus LinkedIn — deduplicated, geocoded, AI-enriched, with the verified hiring company embedded inline. Strict validation (bad input → 400, never a silent drop), comma = OR on enum filters (`skill` = AND), salary filters use range-overlap, cursor pagination at any depth. Live per-field coverage is published at /v1/meta — we document what we actually hold.","contact":{"name":"HyperJobs","url":"https://hyperjobs.io","email":"hello@hyperjobs.io"}},"servers":[{"url":"https://api.hyperjobs.io/v1"}],"security":[{"bearerAuth":[]},{"apiKeyQuery":[]}],"paths":{"/jobs":{"get":{"operationId":"searchJobs","summary":"Search jobs","parameters":[{"name":"title","in":"query","required":false,"description":"Search job titles. Google-style: `machine learning` (AND), `\"machine learning\"` (phrase), `rust OR go`, `-intern` (exclude).","schema":{"type":"string"},"example":"software engineer -intern"},{"name":"description","in":"query","required":false,"description":"Search title + description combined. Same syntax as `title`. The slowest filter — combine it with others.","schema":{"type":"string"},"example":"\"machine learning\" python"},{"name":"title_advanced","in":"query","required":false,"description":"Boolean title search: `&` AND · `|` OR · `!` NOT · `<->` adjacency · `term:*` prefix · `'multi word phrase'` · parentheses.","schema":{"type":"string"},"example":"(rust | go) & !intern"},{"name":"description_advanced","in":"query","required":false,"description":"Boolean search on title + description. Same operators as `title_advanced`.","schema":{"type":"string"},"example":"python & 'machine learning'"},{"name":"organization","in":"query","required":false,"description":"Case-insensitive substring match on the hiring company name.","schema":{"type":"string"},"example":"stripe"},{"name":"exclude_organization","in":"query","required":false,"description":"Exclude companies by EXACT name (case-insensitive). Comma-separated.","schema":{"type":"string"},"example":"Crossmark,TieTalent"},{"name":"country","in":"query","required":false,"description":"Country — full name or ISO-2 code, comma = OR. `US,Germany` both work.","schema":{"type":"string"},"example":"United States,DE"},{"name":"city","in":"query","required":false,"description":"City name, comma = OR.","schema":{"type":"string"},"example":"Berlin,Amsterdam"},{"name":"region","in":"query","required":false,"description":"State / province / region, comma = OR.","schema":{"type":"string"},"example":"California"},{"name":"continent","in":"query","required":false,"description":"Continent, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: Africa · Antarctica · Asia · Europe · North America · Oceania · South America"}},{"name":"remote","in":"query","required":false,"description":"`true` → remote jobs only; `false` → on-site/hybrid only.","schema":{"type":"string","enum":["true","false"]}},{"name":"work_arrangement","in":"query","required":false,"description":"Work arrangement, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: On-site · Hybrid · Remote"}},{"name":"skill","in":"query","required":false,"description":"Required skills — comma = AND (every listed skill must be present). Exact tokens; `c++`, `c#`, `.net`, `node.js` are matchable.","schema":{"type":"string"},"example":"python,aws"},{"name":"taxonomies","in":"query","required":false,"description":"Job family, comma = OR (overlap match).","schema":{"type":"string","description":"comma-separated; each value one of: Administrative · Agriculture · Art & Design · Construction · Consulting · Creative & Media · Customer Service & Support · Data & Analytics · Education · Energy · Engineering · Finance & Accounting · Healthcare · Hospitality · Human Resources · Legal · Logistics · Management & Leadership · Manufacturing · Marketing · Sales · Science & Research · Security & Safety · Social Services · Software · Technology · Trades · Transportation"}},{"name":"employment_type","in":"query","required":false,"description":"Employment type, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: FULL_TIME · PART_TIME · CONTRACTOR · TEMPORARY · INTERN · PER_DIEM · VOLUNTEER · OTHER"}},{"name":"seniority","in":"query","required":false,"description":"Seniority level, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: Internship · Entry level · Associate · Mid-Senior level · Director · Management"}},{"name":"experience_level","in":"query","required":false,"description":"Years-of-experience bucket, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: 0-2 · 2-5 · 5-10 · 10+"}},{"name":"education","in":"query","required":false,"description":"Education requirement, comma = OR (overlap match).","schema":{"type":"string","description":"comma-separated; each value one of: high school · professional certificate · associate degree · bachelor degree · postgraduate degree"}},{"name":"language","in":"query","required":false,"description":"Job-description language — full name (`English`) or ISO-2 (`en`), comma = OR.","schema":{"type":"string"}},{"name":"visa_sponsorship","in":"query","required":false,"description":"`only` → jobs that mention visa sponsorship; `exclude` → hide them.","schema":{"type":"string","enum":["only","exclude"]}},{"name":"has_salary","in":"query","required":false,"description":"`true` → only jobs with structured salary data (~36% of the pool).","schema":{"type":"string","enum":["true","false"]}},{"name":"salary_gte","in":"query","required":false,"description":"Annualized salary floor: matches jobs whose salary RANGE reaches this (annual_max ≥ value). Range-overlap semantics.","schema":{"type":"number","minimum":0}},{"name":"salary_lte","in":"query","required":false,"description":"Annualized salary ceiling: matches jobs whose range starts at or below this (annual_min ≤ value).","schema":{"type":"number","minimum":0}},{"name":"salary_currency","in":"query","required":false,"description":"ISO-4217 currency of the posted salary, comma = OR.","schema":{"type":"string"},"example":"USD,EUR"},{"name":"company_industry","in":"query","required":false,"description":"Company LinkedIn industry (exact, case-insensitive), comma = OR.","schema":{"type":"string"},"example":"Software Development"},{"name":"company_size","in":"query","required":false,"description":"Company size bucket, comma = OR.","schema":{"type":"string"},"example":"51-200 employees,201-500 employees"},{"name":"employee_count_gte","in":"query","required":false,"description":"Minimum company employee count (inclusive).","schema":{"type":"integer","minimum":0}},{"name":"employee_count_lt","in":"query","required":false,"description":"Maximum company employee count (exclusive).","schema":{"type":"integer","minimum":1}},{"name":"funding_gte","in":"query","required":false,"description":"Minimum company total funding in USD (Crunchbase, inclusive).","schema":{"type":"integer","minimum":0}},{"name":"funding_lt","in":"query","required":false,"description":"Maximum company total funding in USD (exclusive).","schema":{"type":"integer","minimum":1}},{"name":"company_country","in":"query","required":false,"description":"Company HQ country — full name or ISO-2, comma = OR.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Company website domain (exact), comma = OR.","schema":{"type":"string"},"example":"stripe.com"},{"name":"source","in":"query","required":false,"description":"ATS / source platform, comma = OR. Valid values = the keys of `/v1/meta` → `sources`.","schema":{"type":"string"},"example":"greenhouse,lever"},{"name":"source_type","in":"query","required":false,"description":"Provenance class, comma = OR: `ats` = a board the employer authors and manages applicants on (incl. join.com), `jobboard` = third-party boards (LinkedIn, Wellfound, …), `aggregator` = re-listing sites. Cross-source duplicates are already folded — this filters provenance, not duplication.","schema":{"type":"string","description":"comma-separated; each value one of: ats · jobboard · aggregator"}},{"name":"exclude_source","in":"query","required":false,"description":"Exclude source platforms, comma-separated.","schema":{"type":"string"}},{"name":"posted_gte","in":"query","required":false,"description":"Jobs posted on/after this ISO-8601 instant.","schema":{"type":"string"},"example":"2026-07-01T00:00:00Z"},{"name":"posted_lt","in":"query","required":false,"description":"Jobs posted before this ISO-8601 instant.","schema":{"type":"string"}},{"name":"created_gte","in":"query","required":false,"description":"Jobs WE first indexed on/after this instant (use for incremental sync).","schema":{"type":"string"}},{"name":"created_lt","in":"query","required":false,"description":"Jobs we first indexed before this instant.","schema":{"type":"string"}},{"name":"time_frame","in":"query","required":false,"description":"Posting-age shortcut: `1h`, `24h`, `7d`, `30d`. (Mutually convenient with posted_gte.)","schema":{"type":"string"},"example":"24h"},{"name":"description_format","in":"query","required":false,"description":"Include the job description as clean plain `text` or sanitized `html`. Omit the parameter → no description key (smaller payloads).","schema":{"type":"string","enum":["text","html"]}},{"name":"collapse","in":"query","required":false,"description":"Fold multi-location duplicates of the same (company, title) into one representative + `openings` count.","schema":{"type":"string","enum":["true","title,organization"]}},{"name":"limit","in":"query","required":false,"description":"Results per page (default 50, max 200).","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Results to skip. For deep pagination prefer `cursor`.","schema":{"type":"integer","minimum":0,"maximum":100000}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from the previous page's `next_cursor` — stable at any depth, unlike offset.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"collapsed":{"type":"boolean"},"next_cursor":{"type":["string","null"],"description":"Pass back as ?cursor= for the next page; null when done."}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/count":{"get":{"operationId":"countJobs","summary":"Count matching jobs (same filters as /jobs, cheap)","parameters":[{"name":"title","in":"query","required":false,"description":"Search job titles. Google-style: `machine learning` (AND), `\"machine learning\"` (phrase), `rust OR go`, `-intern` (exclude).","schema":{"type":"string"},"example":"software engineer -intern"},{"name":"description","in":"query","required":false,"description":"Search title + description combined. Same syntax as `title`. The slowest filter — combine it with others.","schema":{"type":"string"},"example":"\"machine learning\" python"},{"name":"title_advanced","in":"query","required":false,"description":"Boolean title search: `&` AND · `|` OR · `!` NOT · `<->` adjacency · `term:*` prefix · `'multi word phrase'` · parentheses.","schema":{"type":"string"},"example":"(rust | go) & !intern"},{"name":"description_advanced","in":"query","required":false,"description":"Boolean search on title + description. Same operators as `title_advanced`.","schema":{"type":"string"},"example":"python & 'machine learning'"},{"name":"organization","in":"query","required":false,"description":"Case-insensitive substring match on the hiring company name.","schema":{"type":"string"},"example":"stripe"},{"name":"exclude_organization","in":"query","required":false,"description":"Exclude companies by EXACT name (case-insensitive). Comma-separated.","schema":{"type":"string"},"example":"Crossmark,TieTalent"},{"name":"country","in":"query","required":false,"description":"Country — full name or ISO-2 code, comma = OR. `US,Germany` both work.","schema":{"type":"string"},"example":"United States,DE"},{"name":"city","in":"query","required":false,"description":"City name, comma = OR.","schema":{"type":"string"},"example":"Berlin,Amsterdam"},{"name":"region","in":"query","required":false,"description":"State / province / region, comma = OR.","schema":{"type":"string"},"example":"California"},{"name":"continent","in":"query","required":false,"description":"Continent, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: Africa · Antarctica · Asia · Europe · North America · Oceania · South America"}},{"name":"remote","in":"query","required":false,"description":"`true` → remote jobs only; `false` → on-site/hybrid only.","schema":{"type":"string","enum":["true","false"]}},{"name":"work_arrangement","in":"query","required":false,"description":"Work arrangement, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: On-site · Hybrid · Remote"}},{"name":"skill","in":"query","required":false,"description":"Required skills — comma = AND (every listed skill must be present). Exact tokens; `c++`, `c#`, `.net`, `node.js` are matchable.","schema":{"type":"string"},"example":"python,aws"},{"name":"taxonomies","in":"query","required":false,"description":"Job family, comma = OR (overlap match).","schema":{"type":"string","description":"comma-separated; each value one of: Administrative · Agriculture · Art & Design · Construction · Consulting · Creative & Media · Customer Service & Support · Data & Analytics · Education · Energy · Engineering · Finance & Accounting · Healthcare · Hospitality · Human Resources · Legal · Logistics · Management & Leadership · Manufacturing · Marketing · Sales · Science & Research · Security & Safety · Social Services · Software · Technology · Trades · Transportation"}},{"name":"employment_type","in":"query","required":false,"description":"Employment type, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: FULL_TIME · PART_TIME · CONTRACTOR · TEMPORARY · INTERN · PER_DIEM · VOLUNTEER · OTHER"}},{"name":"seniority","in":"query","required":false,"description":"Seniority level, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: Internship · Entry level · Associate · Mid-Senior level · Director · Management"}},{"name":"experience_level","in":"query","required":false,"description":"Years-of-experience bucket, comma = OR.","schema":{"type":"string","description":"comma-separated; each value one of: 0-2 · 2-5 · 5-10 · 10+"}},{"name":"education","in":"query","required":false,"description":"Education requirement, comma = OR (overlap match).","schema":{"type":"string","description":"comma-separated; each value one of: high school · professional certificate · associate degree · bachelor degree · postgraduate degree"}},{"name":"language","in":"query","required":false,"description":"Job-description language — full name (`English`) or ISO-2 (`en`), comma = OR.","schema":{"type":"string"}},{"name":"visa_sponsorship","in":"query","required":false,"description":"`only` → jobs that mention visa sponsorship; `exclude` → hide them.","schema":{"type":"string","enum":["only","exclude"]}},{"name":"has_salary","in":"query","required":false,"description":"`true` → only jobs with structured salary data (~36% of the pool).","schema":{"type":"string","enum":["true","false"]}},{"name":"salary_gte","in":"query","required":false,"description":"Annualized salary floor: matches jobs whose salary RANGE reaches this (annual_max ≥ value). Range-overlap semantics.","schema":{"type":"number","minimum":0}},{"name":"salary_lte","in":"query","required":false,"description":"Annualized salary ceiling: matches jobs whose range starts at or below this (annual_min ≤ value).","schema":{"type":"number","minimum":0}},{"name":"salary_currency","in":"query","required":false,"description":"ISO-4217 currency of the posted salary, comma = OR.","schema":{"type":"string"},"example":"USD,EUR"},{"name":"company_industry","in":"query","required":false,"description":"Company LinkedIn industry (exact, case-insensitive), comma = OR.","schema":{"type":"string"},"example":"Software Development"},{"name":"company_size","in":"query","required":false,"description":"Company size bucket, comma = OR.","schema":{"type":"string"},"example":"51-200 employees,201-500 employees"},{"name":"employee_count_gte","in":"query","required":false,"description":"Minimum company employee count (inclusive).","schema":{"type":"integer","minimum":0}},{"name":"employee_count_lt","in":"query","required":false,"description":"Maximum company employee count (exclusive).","schema":{"type":"integer","minimum":1}},{"name":"funding_gte","in":"query","required":false,"description":"Minimum company total funding in USD (Crunchbase, inclusive).","schema":{"type":"integer","minimum":0}},{"name":"funding_lt","in":"query","required":false,"description":"Maximum company total funding in USD (exclusive).","schema":{"type":"integer","minimum":1}},{"name":"company_country","in":"query","required":false,"description":"Company HQ country — full name or ISO-2, comma = OR.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Company website domain (exact), comma = OR.","schema":{"type":"string"},"example":"stripe.com"},{"name":"source","in":"query","required":false,"description":"ATS / source platform, comma = OR. Valid values = the keys of `/v1/meta` → `sources`.","schema":{"type":"string"},"example":"greenhouse,lever"},{"name":"source_type","in":"query","required":false,"description":"Provenance class, comma = OR: `ats` = a board the employer authors and manages applicants on (incl. join.com), `jobboard` = third-party boards (LinkedIn, Wellfound, …), `aggregator` = re-listing sites. Cross-source duplicates are already folded — this filters provenance, not duplication.","schema":{"type":"string","description":"comma-separated; each value one of: ats · jobboard · aggregator"}},{"name":"exclude_source","in":"query","required":false,"description":"Exclude source platforms, comma-separated.","schema":{"type":"string"}},{"name":"posted_gte","in":"query","required":false,"description":"Jobs posted on/after this ISO-8601 instant.","schema":{"type":"string"},"example":"2026-07-01T00:00:00Z"},{"name":"posted_lt","in":"query","required":false,"description":"Jobs posted before this ISO-8601 instant.","schema":{"type":"string"}},{"name":"created_gte","in":"query","required":false,"description":"Jobs WE first indexed on/after this instant (use for incremental sync).","schema":{"type":"string"}},{"name":"created_lt","in":"query","required":false,"description":"Jobs we first indexed before this instant.","schema":{"type":"string"}},{"name":"time_frame","in":"query","required":false,"description":"Posting-age shortcut: `1h`, `24h`, `7d`, `30d`. (Mutually convenient with posted_gte.)","schema":{"type":"string"},"example":"24h"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/feed":{"get":{"operationId":"jobsFeed","summary":"Incremental sync feed (newly indexed jobs, ascending, cursor-paged)","parameters":[{"name":"since","in":"query","required":false,"description":"Relative window: `15m`, `2h`, `24h`, `7d` (default 24h). Filters on when WE indexed the job.","schema":{"type":"string"}},{"name":"created_gte","in":"query","required":false,"description":"Absolute ISO-8601 alternative to `since`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Results per page (default 200, max 1000).","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"cursor","in":"query","required":false,"description":"Keyset cursor from `next_cursor` — page until it comes back null.","schema":{"type":"string"}},{"name":"description_format","in":"query","required":false,"description":"Same as /v1/jobs.","schema":{"type":"string","enum":["text","html"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"since":{"type":"string"},"count":{"type":"integer"},"next_cursor":{"type":["string","null"],"description":"Pass back as ?cursor= for the next page; null when done."}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/expired":{"get":{"operationId":"expiredJobs","summary":"Jobs that expired/vanished — purge signal for synced copies","parameters":[{"name":"since","in":"query","required":false,"description":"Relative window (default 24h): jobs that expired within it.","schema":{"type":"string"}},{"name":"expired_gte","in":"query","required":false,"description":"Absolute ISO-8601 alternative to `since`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Results per page (default 1000, max 5000 — the payload is just ids + timestamps).","schema":{"type":"integer","minimum":1,"maximum":5000}},{"name":"cursor","in":"query","required":false,"description":"Keyset cursor.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"expired_at":{"type":"string"}}}},"next_cursor":{"type":["string","null"],"description":"Pass back as ?cursor= for the next page; null when done."}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/modified":{"get":{"operationId":"modifiedJobs","summary":"Jobs whose tracked fields changed (16 tracked: title, organization_name, locations, countries, employment_type, work_arrangement, seniority, salary_min, salary_max, salary_currency, salary_unit, apply_url, url, remote, department, description)","parameters":[{"name":"since","in":"query","required":false,"description":"Relative window (default 24h): jobs whose tracked fields changed within it.","schema":{"type":"string"}},{"name":"modified_gte","in":"query","required":false,"description":"Absolute ISO-8601 alternative to `since`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Results per page (default 200, max 1000).","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"cursor","in":"query","required":false,"description":"Keyset cursor.","schema":{"type":"string"}},{"name":"description_format","in":"query","required":false,"description":"Same as /v1/jobs.","schema":{"type":"string","enum":["text","html"]}}],"responses":{"200":{"description":"Each job carries modified_at + modified_fields.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"count":{"type":"integer"},"next_cursor":{"type":["string","null"],"description":"Pass back as ?cursor= for the next page; null when done."}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}":{"get":{"operationId":"getJob","summary":"One job by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"description_format","in":"query","required":false,"description":"Include the job description as clean plain `text` or sanitized `html`. Omit the parameter → no description key (smaller payloads).","schema":{"type":"string","enum":["text","html"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown id, expired, or folded duplicate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/companies":{"get":{"operationId":"searchCompanies","summary":"Search companies","parameters":[{"name":"q","in":"query","required":false,"description":"Case-insensitive substring match on company name.","schema":{"type":"string"},"example":"data"},{"name":"industry","in":"query","required":false,"description":"LinkedIn industry (exact, case-insensitive), comma = OR.","schema":{"type":"string"}},{"name":"country","in":"query","required":false,"description":"HQ country — full name or ISO-2, comma = OR.","schema":{"type":"string"}},{"name":"size","in":"query","required":false,"description":"Size bucket, comma = OR.","schema":{"type":"string"},"example":"11-50 employees"},{"name":"employee_count_gte","in":"query","required":false,"description":"Minimum employee count (inclusive).","schema":{"type":"integer","minimum":0}},{"name":"employee_count_lt","in":"query","required":false,"description":"Maximum employee count (exclusive).","schema":{"type":"integer","minimum":1}},{"name":"has_jobs","in":"query","required":false,"description":"`true` → only companies with at least one live job in the pool.","schema":{"type":"string","enum":["true","false"]}},{"name":"limit","in":"query","required":false,"description":"Results per page (default 50, max 200).","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"description":"Results to skip.","schema":{"type":"integer","minimum":0,"maximum":100000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Invalid request — unknown parameter or bad value; the body names the parameter. The API NEVER silently drops a bad filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/companies/{slug}":{"get":{"operationId":"getCompany","summary":"One company by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/meta":{"get":{"operationId":"getMeta","summary":"Pool metadata: live counts, source vocabulary, per-field coverage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"type":"integer"},"companies":{"type":"integer"},"newest":{"type":"string"},"sources":{"type":"object","additionalProperties":{"type":"integer"},"description":"THE valid `?source=` vocabulary."},"coverage_pct":{"type":"object","additionalProperties":{"type":"number"}},"full_text_search":{"type":"boolean"},"version":{"type":"string"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit (see Retry-After / X-RateLimit-*) or monthly quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/health":{"get":{"operationId":"health","summary":"Liveness (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"jobs":{"type":"integer"},"version":{"type":"string"}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Authorization: Bearer hj_live_…"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key"}},"schemas":{"Job":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Stable job id (source-prefixed)."},"title":{"type":["string","null"]},"company":{"oneOf":[{"$ref":"#/components/schemas/Company"},{"$ref":"#/components/schemas/CompanyFallback"},{"type":"null"}],"description":"Full verified profile when resolved (has `slug`), minimal fallback otherwise, null when unknown."},"location":{"type":["object","null"],"properties":{"remote":{"type":"boolean"},"countries":{"type":["array","null"],"items":{"type":"string"}},"cities":{"type":["array","null"],"items":{"type":"string"}},"regions":{"type":["array","null"],"items":{"type":"string"}},"coords":{"type":["array","null"],"items":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}}}},"timezones":{"type":["array","null"],"items":{"type":"string"}},"continent":{"type":["string","null"]},"raw":{"type":["array","null"],"items":{"type":"string"}}}},"employment_type":{"type":["array","null"],"items":{"type":"string"}},"work_arrangement":{"type":["string","null"]},"office_days":{"type":["number","null"]},"remote_location":{"type":["array","null"],"items":{"type":"string"}},"department":{"type":["string","null"]},"team":{"type":["string","null"]},"requisition_id":{"type":["string","null"]},"seniority":{"type":["string","null"]},"experience_level":{"type":["string","null"]},"salary":{"type":["object","null"],"properties":{"min":{"type":["number","null"]},"max":{"type":["number","null"]},"currency":{"type":["string","null"]},"unit":{"type":["string","null"]},"annual_min":{"type":["number","null"]},"annual_max":{"type":["number","null"]},"summary":{"type":["string","null"]}}},"working_hours":{"type":["number","null"]},"skills":{"type":["array","null"],"items":{"type":"string"}},"keywords":{"type":["array","null"],"items":{"type":"string"}},"taxonomies":{"type":["array","null"],"items":{"type":"string"}},"education_requirements":{"type":["array","null"],"items":{"type":"string"}},"visa_sponsorship":{"type":["boolean","null"]},"job_language":{"type":["string","null"]},"description":{"type":"string","description":"Present only when description_format=text|html."},"requirements_summary":{"type":["string","null"]},"core_responsibilities":{"type":["string","null"]},"benefits":{"type":["array","null"],"items":{"type":"string"}},"hiring_manager":{"type":["object","null"],"properties":{"name":{"type":["string","null"]},"email":{"type":["string","null"]}}},"apply_url":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"source_type":{"type":["string","null"],"enum":["ats","jobboard","aggregator",null],"description":"Provenance class of the source."},"source_domain":{"type":["string","null"]},"posted_at":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"modified_at":{"type":["string","null"]},"modified_fields":{"type":["array","null"],"items":{"type":"string"}},"created_at":{"type":["string","null"]},"updated_at":{"type":["string","null"]},"openings":{"type":"integer","description":"Only with collapse: postings folded into this row."}}},"Company":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"website":{"type":["string","null"]},"logo":{"type":["string","null"]},"industry":{"type":["string","null"]},"type":{"type":["string","null"]},"description":{"type":["string","null"]},"slogan":{"type":["string","null"]},"specialties":{"type":["array","null"],"items":{"type":"string"}},"employee_count":{"type":["number","null"]},"size_range":{"type":["string","null"]},"followers":{"type":["number","null"]},"founded_year":{"type":["number","null"]},"hq":{"type":["object","null"],"properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"locality":{"type":["string","null"]},"raw":{"type":["string","null"]}}},"funding":{"type":["object","null"],"properties":{"rounds":{"type":["number","null"]},"last_round_type":{"type":["string","null"]},"last_round_date":{"type":["string","null"]},"last_round_amount_usd":{"type":["number","null"]},"total_investment_usd":{"type":["number","null"]},"crunchbase_slug":{"type":["string","null"]},"crunchbase_categories":{"type":["array","null"],"items":{"type":"string"}}}},"stock":{"type":["object","null"],"properties":{"exchange":{"type":["string","null"]},"ticker":{"type":["string","null"]}}},"affiliated_companies":{"type":["array","null"],"items":{"type":"string"}},"data_tier":{"type":["string","null"]},"jobs_count":{"type":"integer","description":"Live openings in the pool (list/retrieve endpoints)."},"updated_at":{"type":["string","null"]}}},"CompanyFallback":{"type":"object","description":"Minimal company (unverified) — detect by the ABSENCE of `slug`.","properties":{"name":{"type":["string","null"]},"domain":{"type":["string","null"]},"website":{"type":["string","null"]},"logo":{"type":["string","null"]},"industry":{"type":["string","null"]},"description":{"type":["string","null"]}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"param":{"type":"string"},"hint":{"type":"string"},"message":{"type":"string"},"rate_per_min":{"type":"integer"},"retry_after_s":{"type":"integer"},"monthly_quota":{"type":"integer"}}}}}}