Jobs API
Search Jobs
Search for jobs using traditional filtering methods
POST
Search Jobs
Search for jobs using common filters such as job titles, experience level, salary range, etc., in the JSON request body. All requests require an API key (
x-api-key header) — see Authentication. API calls bill 1 unit of m_jobs_api_calls per job returned — see Usage Headers & Metering. The easiest way to start using our API is to use our Export button on our Search Page, this allows you to edit the tune the request using our Job Filters UI and easily export as a Javascript or cURL request.
Endpoint
Request Body
Note:
- All request body fields are optional.
- Filter combinations can be mixed and matched.
- Use specific filters to narrow down search results and obtain relevant matches.
string[]
Array of job titles to search for (matched against the parsed
job_title field). Multiple entries are OR’d together. Each entry supports the following syntax:- Unquoted, multi-word (
"data scientist"as a JSON string) — matches titles containing all of the words, in any order or position. Example match: “Scientist/Sr. Scientist, Bioinformatics Data”. - Quoted (
"\"data scientist\""— escaped quotes inside the JSON string) — matches the exact phrase only. -prefix ("-senior") — excludes titles containing the term. Works in any position in the array.
Special characters: Slashes are supported (
"AI/ML Engineer" works). Parentheses and square brackets are not accepted and return a 422 validation error. Avoid a spaced hyphen ("engineer - data") inside a title — it currently returns a 500 error.string[]
Array of keywords matched against
description, technologies, skills, and benefits. Multiple entries are OR’d together.Keywords are a relevance signal, not a hard filter: results containing the exact phrase rank highest, followed by results containing all of the words, then results containing any of the words. Rare phrases will still return partial matches rather than zero results.Prefix an entry with - to exclude jobs matching it, e.g. ["machine learning", "-blockchain"]. A keywords array may consist solely of exclusions. Exclusions apply to the same four fields — they do not apply to job titles, so use job_titles negation for that.string[]
Array of keywords to match in company descriptions, services, and products
string[]
Array of work arrangements. Accepted values:
"Remote", "Hybrid", "In-Person".object[]
Array of structured location objects with
city, region, and country.object
Geographic filtering configuration
Geo filtering is approximate — results are weighted toward the target area but may include some out-of-radius locations, especially in
auto mode. The default (auto) performs metro-area fuzzy matching, not exact-city matching: searching a city will also return jobs in its surrounding metro area. Use mode: "strict" if you need exact location matching.string[]
Array of experience levels. Accepted values:
"Entry", "Junior", "Mid", "Senior", "Executive".Any other value will return a
422 Unprocessable Entity error.object
Years of experience range object
string[]
Array of employment types. Accepted values:
"Full Time", "Part Time", "Contract", "Internship".The
"Contract" value matches roles whose returned job_type is "Contract / Temporary" — request token and response label differ.string[]
Filter by one or more job category tags (e.g.,
"Engineering Jobs", "Marketing Jobs"). See the full category list.string[]
Filter jobs by the hiring company’s headcount bucket. Accepted values:
"1-10", "11-50", "51-200", "201-500", "501-1000", "1001-5000", "5001-10000", "10000+". Pass multiple values to combine ranges (e.g., ["11-50", "51-200"]).This parameter is named
company_types for historical reasons but currently filters by company size. A separate classification filter (Public Company / Non-Profit / etc.) will be added in a future API update.string[]
Filter by the source job board (e.g., “iCIMS”, “Lever”, “Greenhouse”).
string
Filter by specific company name
string
Filter by the unique company slug (used for deep linking or specific company targeting).
object
Salary range object
string[]
Filter by industry sector. Can be a single string or an array of strings. See List Industries for accepted values.
integer
How many days ago to filter for. Days Ago set to
3 will return jobs posted on and after 3 days ago.string
Filter by a specific posted date (format:
YYYY-MM-DD). Returns jobs posted on or after this date.string
Currency code to use when applying the
salary filter (e.g., "USD", "EUR", "GBP").string
Filter for jobs that offer visa sponsorship (
"true" or "false").string
Filter out recruiter agency repostings (
"true" or "false").string
Include jobs that do not specify a salary (
"true" or "false") when a salary filter is applied.string
Include jobs that do not specify years of experience (
"true" or "false") when a yoe filter is applied.string
Omit jobs the current user has already viewed (
"true" or "false"). Requires user_id.string
Filter out jobs with incomplete listing data (
"true" or "false").string
Set to
"true" to include the full original HTML description from the ATS source on each job object.string
Field to sort results by. Accepted values:
"relevance", "date_posted", "salary", "company", "yoe"."company" orders by company prominence/size, not alphabetically by name. Invalid values are silently ignored and the default sort (relevance) is applied.string
Sort direction (
"asc" or "desc").number
default:"1"
Page number for pagination
number
default:"10"
Number of results per page (maximum 100).
Values above 100 return
422. The pagination (page and limit) fields control the number of results returned and which subset of results is displayed.Response
array
Array of job objects
number
Total number of matching jobs for the query
number
Number of unique companies represented in the result set
number
Current page number in the response
number
Number of job results returned per page
number
Total number of available pages for the query
Rate limit: 100 requests per 60 seconds per API key. Exceeding it returns
429 with a Retry-After header. A 429 with X-Billing-Code: limit_exceeded is a plan quota, not a rate limit — see Error Handling.Example Request
Error Responses
422 Unprocessable Entity Error
422 Unprocessable Entity Error
Returns when the request contains invalid or improperly formatted data. Some possible reasons may include the following:
- When the
industryfield is missing, not a string, or doesn’t match any value from the list of valid industries. JSONdecoding errors, such as malformed JSON or incorrect data types in the request body.
500 Internal Server Error
500 Internal Server Error
Returns when an unexpected error occurs on the server.
- Also occurs during unhandled server-side failures or bugs that prevent the request from being processed.