Skip to main content
POST
Search jobs via structured request body

Authorizations

X-Api-Key
string
header
required

API key provided by Jobo

Body

application/json
queries
string[] | null

Free-text search queries; multiple entries are OR'd. Each entry matches broadly by default (title, company name, popular skills, summary) with typo tolerance. Wrap an entry in double quotes (e.g. ""Quantitative Developer"") to make it an exact, contiguous phrase match restricted to the job title only — use this when a query is a job-title filter and broad matches are noise. Prefix an entry with - to exclude it. Maximum 10 positive terms per request; more returns a 400 (negative - exclusions don't count toward the limit).

search_description
boolean
default:true

Controls which fields the queries match against. When true (default), queries match title, curated alternative titles, company, popular skills, and summary — broad recall, best for keyword discovery (e.g. "python" finds a "Software Engineer" that lists Python as a skill). When false, queries match against job titles only — the job's own title plus a curated set of same-role alternative titles, so "Android Developer" also finds roles titled "Android Engineer" without pulling in jobs that merely mention the terms in their summary or skills (e.g. an "IT Support Engineer" that lists Android as a skill no longer matches). Use false when you pass exact job titles and want relevance over keyword recall. Double-quoted entries are stricter still: an exact, contiguous phrase match against the literal job title only (alternative titles excluded) — the escape hatch when even title synonyms are unwanted. In both modes results are relevance-ordered — jobs matching every word of a query always rank above partial matches, and partial matches only appear at the tail when a query has no full match inside the filtered window (e.g. a short posted_after range). Take results from the top; the tail of a large page is best-effort filler.

locations
string[] | null

Location strings to filter by (geocoded automatically)

sources
string[] | null

Restrict to specific ATS provider IDs (e.g. greenhouse, lever, workday).

skills
object | null

Include/exclude skills filter

companies
object | null

Include/exclude company display names, resolved case-insensitively.

industries
object | null

Include/exclude company-industry filter (matched case-insensitively).

work_models
enum<string>[] | null

Filter by work model: remote, hybrid, onsite

Available options:
remote,
hybrid,
onsite
employment_types
enum<string>[] | null

Filter by employment type: full-time, part-time, contract, internship, freelance, temporary

Available options:
full-time,
part-time,
contract,
internship,
freelance,
temporary
experience_levels
enum<string>[] | null

Exact-match experience-level filter. Canonical values are intern, entry, mid, senior, lead, and executive.

Available options:
intern,
entry,
mid,
senior,
lead,
executive
salary_usd
object | null

Annualized USD range-overlap filter. A job matches when its disclosed salary range intersects the requested range. Jobs without disclosed compensation are excluded.

posted_after
string<date-time> | null

Only return jobs whose employer posting date is on or after this date

posted_before
string<date-time> | null

Only return jobs whose employer posting date is on or before this date

discovered_after
string<date-time> | null

Only return jobs first indexed on or after this UTC timestamp

discovered_before
string<date-time> | null

Only return jobs first indexed on or before this UTC timestamp

page
integer
default:1
Required range: x >= 1
page_size
integer
default:25
Required range: 1 <= x <= 100
include_facets
enum<string>[] | null

Facets to compute and return. Omit (or null) for the default subset (work_model, experience_level, employment_type, sources). Pass an empty array to skip facets entirely. industries and skills are high-cardinality and only computed when explicitly requested. Unknown names are ignored.

Available options:
work_model,
experience_level,
employment_type,
sources,
industries,
skills
include_fields
enum<string>[] | null

Heavy, non-core fields to include. Omit (or null) for the full job — every field, the default. Pass a subset to keep only those non-core fields alongside the always-present core fields. Pass an empty array for core fields only. Unknown names are ignored; excluded non-core fields come back empty.

Available options:
description,
summary,
qualifications,
responsibilities,
benefits

Response

Paginated list of matching jobs with optional facets

jobs
object[]
required
total
integer<int64>
required
page
integer
required
page_size
integer
required
total_pages
integer
required
facets
object
required