Search, scraping if needed
One call for 'give me this': answers from the index when it holds at least min_results postings; otherwise it launches scraping for exactly this (the title / place / country through the public employment services, a company's career site with company_url) and answers with what exists now plus the request ids, or, with wait=N, waits for the scraping and answers with the fresh postings. Accepts every active-jobs filter.
GET /api/v1/search
Query parameters
Pagination
limitinteger · int32100offsetinteger · int32limit until a page comes back shorter than limit.0cursorinteger · int64id 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 · enumtexthtmlinclude_page_textbooleantruefalsefalseformatstring · enumchars limits text per posting).jsonjsonlcsvmdjsonfieldsstring · comma-separatedid,title,url.schemastring · enumai_* 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).fantasticnativefantasticinclude_basic_organization_detailsbooleantruefalsefalseinclude_betabooleanclassification_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).truefalsefalseorder_bystring · enumdate_createddate_postedsalarydate_createdinclude_duplicatesbooleantruefalsefalseText search
titlestringsoftware engineer (both words), "software engineer" (phrase), python OR rust, -senior (exclude).descriptionstringlocationstringMunich also finds München; "London, England, United Kingdom"; "United States" OR Canada.title_advancedstring& and, | or, ! not, <-> followed by, <N> within N words, 'exact phrase', manag:* prefix, parentheses. E.g. (python | rust) & senior & !staff.description_advancedstringlocation_advancedstringGermany & !(Berlin | Munich).organization_advancedstringskillstringPython,SQL.Dates
date_posted_gtestring · date-timedate_posted_ltstring · date-timedate_created_gtestring · date-timedate_created_ltstring · date-timeSource
exclude_sourcestringsource_typestring · enum · comma-separatedatscareer_sitepublic_employment_serviceEmployer
organizationstringexclude_organizationstringdomainstringnvidia.com,microsoft.com.exclude_domainstringorganization_agencystring · enumonlyexcludeorganization_industrystringorganization_sizestring · enum · comma-separated1, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+.12-1011-5051-200201-500501-10001001-50005001-1000010001+organization_headcount_gteintegerorganization_headcount_ltintegercompany_countrystringDerived
experience_levelstring · enum · comma-separatedai_experience_level).0-22-55-1010+work_arrangementstring · enum · comma-separatedOn-siteHybridRemote OKRemote Solelyemployment_typestring · enum · comma-separatedFULL_TIMEPART_TIMECONTRACTORTEMPORARYINTERNVOLUNTEERlanguagestringeducationstring · enum · comma-separatedhigh schoolassociate degreebachelor degreepostgraduate degreetaxonomiesstringSoftware Engineering, Data & AI, Sales (also ai_taxonomies_a, function).exclude_taxonomiesstringvisa_sponsorshipstring · enumonlyexcludesenioritystring · enum · comma-separatedinternshipentrymidseniorleadmanagerdirectorexecutiveOther
has_salarybooleantruefalsefalsesalary_mininteger · per yearcurrencystringcountrystringUS,CA.has_no_locationbooleantruefalsefalsefull_text_onlybooleantruefalsefalseidinteger · comma-separatedSearch
modestring · enumwait seconds; the answer says what was added and what is still coming).indexliveindexmin_resultsintegerlimit). While the index holds fewer, the search scrapes for more at the same time: the hiring boards that had such postings before (ranked by what each actually delivered in earlier searches), the public employment services and Amazon for the place, and the place's own employers in the background.limitwaitinteger · seconds (0-120)call_again link.45company_urlstring · urihttps://www.example.com.refreshbooleantruefalsefalseResponse 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.
| Field | Type | Description |
|---|---|---|
status | string | ready (answered from the index), collecting (scraping launched, call again), collected (scraping finished within wait). |
count | integer | Postings in jobs. |
jobs | array<Job> | Postings, in the active-jobs layout. |
requests | array<object> | What was launched: type (collect / company), id, status, status_url. |
call_again | string | null | The same search, to call when the scraping has finished. |
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.