StepStone job search
Jobs on StepStone.de for a keyword and/or location, with the site's filters: radius, sort, posting age, home office, full/part time, minimum salary, and every facet the results page offers (contract type, experience, discipline, category, sector, city, region, skills, application method, language). country=uk searches Totaljobs (StepStone's UK board) with the same fields; its facets (salary, work policy, discipline, contract type, skills, category, sector, city, region, application method) work the same way. total is StepStone's count; 25 jobs per page. Facets come back in facets; pass a value's filter (e.g. ct=222) back as filter (repeatable). Each job: id, global_id, title, url, company, company_id, company_url, logo, location, remote, salary (StepStone's range, predicted when it is the site's estimate), snippet, benefits, posted_at, expires_at, top_job, sponsored, labels, skills and raw. Pass next_page back as page; null on the last page.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
q | string | Keywords, e.g. python, projektmanager. Required unless location is given. Example: python |
country | de | uk | de (default): StepStone.de. uk: Totaljobs (totaljobs.com). |
location | string | City or region, e.g. berlin. Example: berlin |
radius | integer | Radius around the location, in km. |
sort | relevance | date | Order. |
age | 1 | 7 | Posted within this many days (country=de only). |
remote | partly | only | onsite | Home office: partly (hybrid) or only (remote); onsite only with country=uk. |
work_type | full_time | part_time | Full or part time (country=de only). |
salary_min | integer | Minimum yearly salary in EUR, or GBP with country=uk (the site's bands: 10000 to 100000). |
filter | string | More filters as key=value from facets[].values[].filter. Repeatable. |
page | integer | Page number. Pass next_page from the previous response; null on the last page. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/stepstone/v1/search?q=python" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/stepstone/v1/search",
params={"q": "python"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/stepstone/v1/search");
url.searchParams.set("q", "python");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).