Jobs Search
Search live job postings with POST /v1/jobs/search.
POST https://api.jobspipe.dev/v1/jobs/searchReturns live job postings matching your filters, normalized into a single schema. Requires authentication.
Prefer to explore interactively? The API Explorer has a live playground with every parameter, the full response schema, and a "try it" panel.
Request
The body is a JSON object of filters. All fields are optional - an empty body returns the most recent postings (up to your plan's page size). Filters combine with AND; array filters (*_or) match any of their values.
See the full filter reference for every field.
curl https://api.jobspipe.dev/v1/jobs/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"job_title_or": ["software engineer", "backend engineer"],
"job_country_code_or": ["US"],
"posted_at_max_age_days": 7,
"remote": true,
"limit": 25,
"include_total_results": true
}'import requests
resp = requests.post(
"https://api.jobspipe.dev/v1/jobs/search",
headers={"Authorization": "Bearer jp_live_your_key_here"},
json={
"job_title_or": ["software engineer", "backend engineer"],
"job_country_code_or": ["US"],
"posted_at_max_age_days": 7,
"remote": True,
"limit": 25,
"include_total_results": True,
},
)
resp.raise_for_status()
result = resp.json()
for job in result["data"]:
print(job["job_title"], "-", job["company"])const resp = await fetch("https://api.jobspipe.dev/v1/jobs/search", {
method: "POST",
headers: {
Authorization: "Bearer jp_live_your_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({
job_title_or: ["software engineer", "backend engineer"],
job_country_code_or: ["US"],
posted_at_max_age_days: 7,
remote: true,
limit: 25,
include_total_results: true,
}),
});
const result = await resp.json();
for (const job of result.data) {
console.log(job.job_title, "-", job.company);
}Response
A 200 response has two top-level keys:
metadata- counts and the pagination cursor. See pagination.data- an array of normalized job objects. See the job schema.
{
"metadata": {
"total_results": 412,
"truncated_results": 25,
"total_companies": null,
"truncated_companies": 0,
"next_cursor": "eyJvZmZzZXQiOjI1fQ"
},
"data": [
{
"id": "jp_3958211043",
"job_title": "Backend Engineer",
"company": "Acme Inc",
"location": "Remote · United States",
"country_code": "US",
"remote": true,
"seniority": "Mid-Senior",
"date_posted": "2026-06-18",
"final_url": "https://example.com/careers/3958211043"
}
]
}The maximum number of results per call depends on your plan (Free 25, Builder 100, Scale 500). Requesting a higher limit is capped at that ceiling. See plans.
Status codes
| Status | Meaning |
|---|---|
200 | Success |
401 | Missing or invalid API key |
402 | Monthly request quota exceeded |
429 | Per-second rate limit exceeded |
504 | The upstream search timed out |
See the error reference for handling guidance.