- Quick search —
GET /api/jobs. Simple query-string search with comma-separated filters. Best for lightweight integrations and URL-shareable queries. - Advanced search —
POST /api/jobs/search. Typed JSON body with inclusion/exclusion filters, range filters, and multi-value text queries. Best for filter UIs and programmatic search.
Endpoints
Full request/response reference and a live “Try it” playground live on the dedicated pages below.Quick search
GET /api/jobs — simple query-string search. Best for lightweight integrations and URL-shareable queries.Advanced search
POST /api/jobs/search — typed JSON body with inclusion/exclusion filters, range filters, and multi-value text queries. Best for filter UIs and programmatic search.Filter recipes
Basic text search with location
Search for jobs by keyword in one or more cities:Skill include/exclude filtering
Find jobs requiring Python or Go but not PHP:Company filtering
Search only at specific companies, or exclude staffing agencies:Salary range + experience level
Find senior or principal roles paying 250k:Remote jobs posted recently
Full combination query
Combine every filter type for a highly targeted search:Facets
The response includes afacets object with server-computed aggregations. The set of facets is controlled by the include_facets request parameter; when omitted the server returns a low-cardinality default subset to keep responses fast.
Available facets
| Response key | Source field | Notes |
|---|---|---|
work_model | work_model | Default |
experience_level | experience_level | Default |
employment_type | employment_type | Default |
sources | provider_id | Default |
industries | company_industries | Opt-in — moderate cardinality |
skills | all_skill_names | Opt-in — high cardinality, adds noticeable latency |
Controlling the facet set
include_facets | Result |
|---|---|
omitted / null | Default subset (work_model, experience_level, employment_type, sources). |
["skills"] | Only skills is computed and returned. |
[] (empty array) | No facets — "facets": {}. |
["skills","unknown"] | skills is returned; unknown names are silently dropped. |
GET /api/jobs pass a comma-separated string (?include_facets=skills,industries); on POST /api/jobs/search pass a JSON array ("include_facets": ["skills", "industries"]). To skip facets from the GET endpoint, send the empty value ?include_facets=.
Example — default response
Example — opting in to skills + industries
skills is faceted on its display-cased values.
Counts are bounded by Typesense’s top_values strategy, so long-tail buckets may be approximate — exact totals come from the total field, not from summing facet counts.
Use facet values to power filter UIs. Since all filter fields are case-insensitive, you can pass facet key values directly back as filter values.
Enum reference
Send the canonical value listed below. Filter inputs are matched case-insensitively and common variants (e.g.sr → senior, WFH → remote) are normalized server-side, so most reasonable strings will resolve to the right bucket.
work_models
| Value | Meaning |
|---|---|
remote | Fully remote; no expectation of being in an office. |
hybrid | Mix of remote and in-office work. |
onsite | On-site / in-person at a specific location. |
employment_types
| Value | Meaning |
|---|---|
full-time | Standard full-time permanent role. |
part-time | Part-time role with reduced hours. |
contract | Fixed-term or contractor engagement (incl. contract-to-hire). |
internship | Internship, co-op, or apprenticeship. |
freelance | Freelance / self-employed / gig work. |
temporary | Short-term or seasonal role. |
experience_levels
| Value | Meaning |
|---|---|
intern | Interns, trainees, apprentices. |
entry | Entry-level / junior / new graduate. |
mid | Mid-level / intermediate individual contributor. |
senior | Senior individual contributor (incl. staff, principal). |
lead | Tech lead or first-line manager. |
executive | Director, VP, C-level, head-of. |
Source values
All 57 ATS / job-board providers Jobo currently ingests. Use theprovider_id in the sources filter (e.g. "sources": ["greenhouse", "lever"]); the same value comes back on the source field of every JobDto and in the facets.sources bucket.
provider_id | Provider |
|---|---|
adpmyjobs | ADP MyJobs |
adpworkforcenow | ADP Workforce Now |
applicantpro | ApplicantPro |
ashby | Ashby |
bamboohr | BambooHR |
breezy | Breezy HR |
careerplug | CareerPlug |
careerpuck | Careerpuck |
comeet | Comeet |
csod | Cornerstone OnDemand |
dayforce | Dayforce |
dover | Dover |
eightfold | Eightfold |
freshteam | Freshteam |
gem | Gem |
gohire | GoHire |
greenhouse | Greenhouse |
hibob | HiBob |
hirebridge | HireBridge |
hirehive | HireHive |
hireology | Hireology |
hiringthing | HiringThing |
homerun | Homerun |
icims | iCIMS |
isolved | iSolved |
jazzhr | JazzHR |
jobscore | JobScore |
jobvite | Jobvite |
joincom | Join.com |
kula | Kula |
lever | Lever |
manatal | Manatal |
oraclecloud | Oracle Cloud |
pageup | PageUp |
paycom | Paycom |
paycor | Paycor |
paylocity | Paylocity |
personio | Personio |
phenompeople | Phenom |
pinpoint | Pinpoint |
polymer | Polymer |
recooty | Recooty |
recruitee | Recruitee |
rippling | Rippling |
rival | Rival |
smartrecruiters | SmartRecruiters |
successfactors | SAP SuccessFactors |
taleo | Oracle Taleo |
talnet | TalNet (Oleeo) |
teamtailor | Teamtailor |
trakstar | Trakstar Hire |
trinet | TriNet |
ultipro | UltiPro (UKG Pro) |
werecruit | WeRecruit |
workable | Workable |
workday | Workday |
zohorecruit | Zoho Recruit |

