Job Opportunity Index
Job feed API (v1) · New Jobs

Active jobs

Open postings first indexed within the time window, from company career sites, hiring platforms and public employment services, with filtering, full-text search, date ranges, pagination and field selection.

GET /api/v1/active-jobs

Query parameters

Window

time_framestring · enumrequired
1h (hourly polling), 24h (daily, the default), 7d (a week), 6m (every open posting, for a backfill). Counts also accept 1m: everything indexed in 31 days, closed or not. No ingestion delay: a posting is in the window the moment it is indexed. Every window holds only postings their source still lists; roles first posted more than 12 months ago are left out.
Enum values: 1h24h7d6m
Default: 24h

Pagination

limitinteger · int32
Postings per response, 1 to 1000. Default 100.
Default: 100
offsetinteger · int32
Postings to skip, up to 100,000. Keep adding limit until a page comes back shorter than limit.
Default: 0
cursorinteger · int64
The last id you received; returns the next postings by id ascending. Best for backfills; every response also carries it in the X-Last-Id header. Wins over offset.

Response

description_formatstring · enum
text or html to include the full description (and requirements). Left out by default because it is large.
Enum values: texthtml
include_page_textboolean
true: also the complete text read from the original posting page.
Enum values: truefalse
Default: false
formatstring · enum
json (an array, the default), jsonl, csv, or md (Markdown for language models; chars limits text per posting).
Enum values: jsonjsonlcsvmd
Default: json
fieldsstring · comma-separated
Comma-separated list of the fields to return, e.g. id,title,url.
schemastring · enum
The output layout. Default: the universal job-feed layout (ai_* names for derived fields, salary / employment_type as the source states them), so code written for other job feeds works unchanged; the values are still derived by rules from the posting. native: this index's own names (no ai_ prefix).
Enum values: fantasticnative
Default: fantastic
include_basic_organization_detailsboolean
true: the employer's profile inline (industry, headcount, headquarters, legal entity id, open and new postings).
Enum values: truefalse
Default: false
include_betaboolean
true: also the standard occupation of each posting, classification_onet (O*NET-SOC 2019), classification_soc (SOC 2018) and classification_isco (ISCO-08), each {id, name}, matched by rules against O*NET's official title lists (English titles; null when no title matches), and locations_derived_structured (each place as lat, lon, locality, county, region, country, country_code, continent, timezone).
Enum values: truefalse
Default: false
order_bystring · enum
date_created (default, newest first), date_posted or salary.
Enum values: date_createddate_postedsalary
Default: date_created
include_duplicatesboolean
true: also the same opening found on a second channel.
Enum values: truefalse
Default: false

Text search

titlestring
Google-style search of the title: software engineer (both words), "software engineer" (phrase), python OR rust, -senior (exclude).
descriptionstring
The same syntax over the title and the complete description.
locationstring
The same syntax over the location, raw and normalised: Munich also finds München; "London, England, United Kingdom"; "United States" OR Canada.
title_advancedstring
Boolean: & and, | or, ! not, <-> followed by, <N> within N words, 'exact phrase', manag:* prefix, parentheses. E.g. (python | rust) & senior & !staff.
description_advancedstring
Boolean expression over title and description.
location_advancedstring
Boolean expression over the location: Germany & !(Berlin | Munich).
organization_advancedstring
Boolean expression over the employer's name.
skillstring
Comma-separated skills, all required: Python,SQL.

Dates

date_posted_gtestring · date-time
Posted on or after (ISO 8601, UTC).
date_posted_ltstring · date-time
Posted before.
date_created_gtestring · date-time
First indexed on or after: the safe cursor for incremental syncs.
date_created_ltstring · date-time
First indexed before.

Source

sourcestring
Comma-separated sources: greenhouse, lever (or lever.co), ashby, workday, oracle, smartrecruiters, workable, recruitee, personio, bamboohr, teamtailor, breezy, adp, arbeitsagentur, eures, career_site. See Supported sources.
exclude_sourcestring
Sources to leave out.
source_typestring · enum · comma-separated
ats, career_site, public_employment_service.
Enum values: atscareer_sitepublic_employment_service

Employer

organizationstring
Exact employer names, comma-separated.
exclude_organizationstring
Employers to leave out.
domainstring
Employer domains: nvidia.com,microsoft.com.
exclude_domainstring
Domains to leave out.
organization_agencystring · enum
only staffing / placement agencies, or exclude them (direct employers only).
Enum values: onlyexclude
organization_industrystring
Sector, e.g. technology, finance, healthcare.
organization_sizestring · enum · comma-separated
Company size buckets, comma-separated: 1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+.
Enum values: 12-1011-5051-200201-500501-10001001-50005001-1000010001+
organization_headcount_gteinteger
At least this many employees.
organization_headcount_ltinteger
Fewer than this many employees.
company_countrystring
Employer's home country (ISO code).

Derived

experience_levelstring · enum · comma-separated
0-2, 2-5, 5-10, 10+ years (also as ai_experience_level).
Enum values: 0-22-55-1010+
work_arrangementstring · enum · comma-separated
On-site, Hybrid, Remote OK, Remote Solely.
Enum values: On-siteHybridRemote OKRemote Solely
employment_typestring · enum · comma-separated
FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER.
Enum values: FULL_TIMEPART_TIMECONTRACTORTEMPORARYINTERNVOLUNTEER
languagestring
Language the posting is written in: English, German, French, Spanish…
educationstring · enum · comma-separated
high school, associate degree, bachelor degree, postgraduate degree.
Enum values: high schoolassociate degreebachelor degreepostgraduate degree
taxonomiesstring
Job function, e.g. Software Engineering, Data & AI, Sales (also ai_taxonomies_a, function).
exclude_taxonomiesstring
Functions to leave out.
visa_sponsorshipstring · enum
only postings that offer sponsorship, or exclude them.
Enum values: onlyexclude
senioritystring · enum · comma-separated
internship, entry, mid, senior, lead, manager, director, executive.
Enum values: internshipentrymidseniorleadmanagerdirectorexecutive

Other

has_salaryboolean
true: only postings that state pay.
Enum values: truefalse
Default: false
salary_mininteger · per year
Minimum yearly pay (hourly, daily, weekly and monthly pay are converted).
currencystring
USD, EUR, GBP…
countrystring
ISO country codes of the job's location: US,CA.
has_no_locationboolean
true: only postings without a recognisable place.
Enum values: truefalse
Default: false
full_text_onlyboolean
true: only postings whose complete text is stored.
Enum values: truefalse
Default: false
idinteger · comma-separated
Posting ids, comma-separated.
no_collectstring
true: a search with few results does not trigger an automatic collection.

Response 200 · application/json

Default layout. With schema=native the ai_ prefix is dropped and salary_raw / employment_type_raw hold the source's own text. Employer profile fields (org_industry, org_headcount…) come with include_basic_organization_details=true.

FieldTypeDescription
idintegerStable posting id.
date_postedstring · date-timeWhen the source says it was posted.
date_createdstring · date-timeWhen it was first indexed. Monotonic: use it for incremental syncs.
date_last_seenstring · date-timeWhen it was last confirmed open.
titlestringTitle as posted.
organizationstringEmployer.
organization_urlstring · uri | nullEmployer's website.
date_valid_throughstring | nullClosing date, when the source states one.
locationsarray<Place> | nullRaw location, JobPosting-style.
location_typestring | nullTELECOMMUTE when remote.
salarystring | nullPay as the posting states it.
employment_typestring | nullEmployment type as the source states it.
urlstring · uriThe exact original posting.
apply_urlstring · uriWhere to apply.
source_typestring · enumats, career_site or public_employment_service.
sourcestringPlatform or service.
source_domainstringHost of the posting URL.
source_slugstring | nullThe employer's board on that platform.
cities_derivedarray<string> | nullNormalised cities.
counties_derivedarray<string> | nullCounties.
regions_derivedarray<string> | nullRegions / states.
countries_derivedarray<string> | nullCountries.
country_codes_derivedarray<string> | nullISO country codes.
locations_derivedarray<string> | null"City, Region, Country" in English.
timezones_derivedarray<string> | nullIANA time zones.
lats_derivedarray<number> | nullLatitudes.
lngs_derivedarray<number> | nullLongitudes.
domain_derivedstring | nullEmployer domain.
ai_salary_currencystring | nullISO currency.
ai_salary_valuenumber | nullA single amount.
ai_salary_min_valuenumber | nullLower end of a range.
ai_salary_max_valuenumber | nullUpper end.
ai_salary_unit_textstring · enum | nullHOUR, DAY, WEEK, MONTH, YEAR.
ai_benefitsarray<string> | nullBenefits the posting names.
ai_experience_levelstring · enum | null0-2, 2-5, 5-10, 10+.
years_experienceinteger | nullYears asked for.
senioritystring | nullinternship … executive.
ai_work_arrangementstring · enum | nullOn-site, Hybrid, Remote OK, Remote Solely.
ai_work_arrangement_office_daysinteger | nullOffice days a week (hybrid), when stated.
ai_remote_locationarray<string> | nullCountries a remote role is open to.
ai_key_skillsarray<string> | nullSkills the posting names.
ai_core_responsibilitiesstring | nullThe posting's own duties section, verbatim.
ai_requirements_summarystring | nullThe posting's own requirements section, verbatim.
ai_working_hoursnumber | nullHours a week, when stated.
ai_employment_typearray<string> | nullFULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER.
ai_job_languagestring | nullLanguage of the posting.
ai_visa_sponsorshipboolean | nullWhether the posting offers sponsorship, when it says.
ai_keywordsarray<string> | nullTitle words, function, department and skills.
ai_taxonomies_aarray<string> | nullJob function.
ai_educationarray<string> | nullDegree level asked for.
departmentstring | nullDepartment.
apply_effortstring · enum | nullquick or lengthy.
full_textbooleanThe complete text is stored.
detailsobject | nullEvery other fact the source gave.
org_idintegerEmployer id.
org_slugstringSlug for /api/company/{slug}.
org_industrystring | nullSector.
org_headcountinteger | nullEmployees.
org_headquarters_countrystring | nullHQ country.
org_headquarters_citystring | nullHQ city.
org_leistring | nullLegal Entity Identifier.
org_open_jobsintegerEmployer's open postings.
org_new_jobs_7dintegerNew this week.
org_recruitment_agency_derivedbooleanStaffing / placement agency.
date_modifiedstring · date-time | nullWhen a tracked field changed upstream.
modified_fieldsarray<string> | nullWhich fields changed.
description_textstringFull description (description_format=text).
description_htmlstringDescription as HTML (description_format=html).
requirements_textstring | nullRequirements section.
page_textstring | nullFull text of the original page (include_page_text).
locations_derived_structuredarray<object> | nullEach place as lat, lon, locality, county, region, country, country_code, continent, timezone (include_beta).
classification_onetobject | nullO*NET-SOC 2019 occupation {id, name}, e.g. {"id": "15-1252.00", "name": "Software Developers"} (include_beta; rule-matched from the title).
classification_socobject | nullSOC 2018 detailed occupation {id, name} (include_beta).
classification_iscoobject | nullISCO-08 unit group {id, name}, e.g. {"id": "2512", "name": "Software developers"} (include_beta).
org_sizestring | nullCompany size bucket: 1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ (include_basic_organization_details).
locations_altarray | nullAlways null (kept for layout compatibility).
location_requirementsarray | nullAlways null (kept for layout compatibility).
organization_logostring | nullAlways null (kept for layout compatibility).
ai_hiring_manager_namestring | nullAlways null: not collected.
ai_hiring_manager_email_addressstring | nullAlways null: not collected.

Errors

400 a parameter is not understood (the message names it) · 404 no such endpoint · 429 slow down · 503 the query would scan too much: add a filter or a shorter window.