Skip to main content

Overview

The Jobo API exposes two endpoints for searching jobs, each accepting filters in a different format:
  • GET /api/jobs — filters via query parameters
  • POST /api/jobs/search — filters via typed JSON body fields
All filter values are case-insensitive.

Field Reference

FieldGET Query ParamPOST Body FieldType (GET / POST)Accepted Values
Text searchqqueriesstring / string[]Free text, Boolean operators (AND, OR, NOT), quoted phrases
Locationlocationlocationsstring / string[]City names, regions, countries, "remote"
Skillsskillsskillsstring / InclusionExclusionFilterComma-separated (GET) or include/exclude arrays (POST)
Companiescompanies— / InclusionExclusionFilterInclude/exclude arrays (POST only)
Work Modelwork_modelwork_modelsstring / string[]remote, hybrid, onsite
Employment Typeemployment_typeemployment_typesstring / string[]full-time, part-time, contract, internship, temporary
Experience Levelexperience_levelexperience_levelsstring / string[]entry level, mid level, senior level, lead/staff, principal, director, vp, executive
Salary (min)min_salary_usdsalary_usd.minint / intAnnual USD amount
Salary (max)max_salary_usdsalary_usd.maxint / intAnnual USD amount
Posted Afterposted_afterposted_afterdatetimeISO 8601 datetime string
SourcessourcesstringComma-separated ATS IDs (GET only)
PagepagepageintDefault 1
Page Sizepage_sizepage_sizeintDefault 25, max 100

Filter Patterns (POST)

InclusionExclusionFilter

The skills and companies fields in the POST body accept an object with include and exclude arrays. Items within include are combined with OR logic; items in exclude are removed from results.
{
  "include": ["python", "typescript"],
  "exclude": ["java"]
}

RangeFilter (salary_usd)

The salary_usd field in the POST body accepts min and/or max boundaries (annual USD).
{
  "min": 100000,
  "max": 200000
}

Accepted Values

work_model / work_models

Filter ValueStored ValueDescription
remoteRemoteFully remote position
hybridHybridMix of remote and in-office
onsiteOnsiteFully in-office

employment_type / employment_types

Filter ValueStored ValueDescription
full-timeFull-timeStandard full-time employment
part-timePart-timePart-time position
contractContractContract or freelance engagement
internshipInternshipInternship
temporaryTemporaryTemporary position

experience_level / experience_levels

Filter ValueStored ValueDescription
entry levelEntry LevelEntry-level / junior
mid levelMid LevelMid-level / intermediate
senior levelSenior LevelSenior
lead/staffLead/StaffLead or staff engineer
principalPrincipalPrincipal
directorDirectorDirector level
vpVPVice president
executiveExecutiveC-level / executive

sources (ATS Platforms)

Pass one or more of the following ATS identifiers as a comma-separated string in the GET sources param: greenhouse, lever, workday, ashby, bamboohr, icims, smartrecruiters, teamtailor, workable, rippling, personio, taleo, successfactors, paylocity, dayforce, phenompeople, jobvite, eightfold, jazzhr, breezy, recruitee, applicantpro, comeet, pinpoint, freshteam, gem, polymer, kula, homerun, careerplug, joincom, recooty, trakstar, hirehive, hiringthing, zohorecruit, gohire, jobscore, csod, adpmyjobs, adpworkforcenow, paycom, ultipro, isolved, oraclecloud, talnet, careerpuck

Examples

GET Request

GET /api/jobs?q=backend+engineer&location=new+york&work_model=remote&employment_type=full-time&experience_level=senior+level&min_salary_usd=120000&posted_after=2026-01-01T00:00:00Z&page=1&page_size=25

POST Request

POST /api/jobs/search

{
  "queries": ["backend engineer"],
  "locations": ["New York", "San Francisco"],
  "skills": {
    "include": ["python", "go"],
    "exclude": ["php"]
  },
  "companies": {
    "include": ["Stripe", "Datadog"]
  },
  "work_models": ["remote", "hybrid"],
  "employment_types": ["full-time"],
  "experience_levels": ["senior level", "lead/staff"],
  "salary_usd": {
    "min": 150000,
    "max": 250000
  },
  "posted_after": "2026-01-01T00:00:00Z",
  "page": 1,
  "page_size": 25
}

Facets (Response)

Search responses include a facets object containing aggregated counts for key dimensions. The server determines which facets to return. Common facet keys:
Facet KeyDescription
experience_levelDistribution of experience levels across matching jobs
work_modelDistribution of work models
employment_typeDistribution of employment types
sourceDistribution of ATS sources
Each facet is an array of objects sorted by count descending:
{
  "facets": {
    "work_model": [
      { "key": "Remote", "count": 842 },
      { "key": "Hybrid", "count": 314 },
      { "key": "Onsite", "count": 127 }
    ]
  }
}