Quickstart
Create an API key and run your first job search in under two minutes.
Try it without a key first
Routes under /v1/sandbox need no API key and cost no credits. They return the same two fixed sample jobs whatever you send, in the { metadata, data } shape with a subset of the job fields. The sandbox does not validate your query, so use it to check your client wiring, not your filters.
curl https://api.jobspipe.dev/v1/sandbox/jobs/search \
-H "Content-Type: application/json" \
-d '{ "job_title_or": ["software engineer"], "remote": true }'For live data, follow the steps below. The request is the same; the live response carries the full job schema.
/v1/sandbox/jobs/export and /v1/sandbox/jobs/search/batch have no live equivalent. Do not build against them.
Create an API key
Sign in to your dashboard, open Settings → API Keys, and click Generate API key. Copy the key - it starts with jp_live_ and is shown only once.
See Manage API keys to name and revoke keys.
Make your first request
Send a POST to /v1/jobs/search with your key as a Bearer token.
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"], "limit": 5 }'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"], "limit": 5},
)
resp.raise_for_status()
data = resp.json()
print(data["metadata"], len(data["data"]))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"], limit: 5 }),
});
const data = await resp.json();
console.log(data.metadata, data.data.length);Read the response
Every response has a metadata object and a data array of normalized jobs.
{
"metadata": {
"total_results": null,
"truncated_results": 5,
"total_companies": null,
"truncated_companies": 0,
"next_cursor": "eyJwIjoiMjAyNi0wOS0wMiAwMDowMDowMCIsImkiOiI4MTY0OTMzIn0"
},
"data": [
{
"id": "8164933",
"job_title": "Senior Software Engineer",
"company": "Northwind Labs",
"location": "Austin, TX 78701",
"country_code": "US",
"remote": true,
"date_posted": "2026-09-02T00:00:00+00:00",
"source_url": "https://boards.greenhouse.io/northwindlabs/jobs/8164933"
}
]
}total_results is null unless you send include_total_results: true. Each job carries many more fields than shown here; see the job schema.