Company career-site jobs
POST https://tools.yukai.uk/api/v1/jobs
Get a company's open jobs. Finds the company's job board (links and embeds on its site, its careers page, then verified name guesses) and returns its jobs, filtered and normalized. Per-job descriptions are fetched only for the jobs returned. hasMore tells you when more jobs match than limit; notes explain partial scans of very large boards.
Cost
Credits: 18 + 9 per job ($0.0018 + $0.0009 per job). 198 credits are reserved before the call; the call is then settled on the real number of items returned. Failed calls are free. Source price: ats-career-site-jobs/company-detected + ats-career-site-jobs/job.
Input
Send a JSON body (POST) or the same fields as a query string (GET).
Required: company.
| Field | Type | Default | Description |
|---|---|---|---|
company required | string | The company: its website or careers page (stripe.com, https://careers.airbnb.com), an ATS job board URL (https://jobs.lever.co/leverdemo, https://job-boards.greenhouse.io/airbnb, a Workday site) or ats:slug (greenhouse:airbnb, lever:leverdemo, ashby:notion). Aliases: url, domain, board. | |
keyword | string | Title keywords, comma-separated (any of). Short words (US, QA) match whole words. | |
excludeKeyword | string | Drop jobs whose title contains any of these comma-separated words. | |
location | string | Location words, comma-separated (any of), matched against city, region, country and workplace type. | |
department | string | Department or team words, comma-separated (any of). | |
remote | boolean | false | Only remote jobs. |
postedWithinDays | integer | 0 | Only jobs posted in the last N days (0 = any). |
description | string | "none" | Include the job description as plain text, HTML or both. |
limit | integer | 50 | Maximum jobs returned (at most 50 with descriptions). |
guessBoard | boolean | true | When the website links no job board, try boards named after the domain (used only when the company name or website matches). |
Examples
Replace tt_live_XXXX with your key from the pricing page.
curl
curl -i -X POST "https://tools.yukai.uk/api/v1/jobs" \
-H "Authorization: Bearer tt_live_XXXX" \
-H "Content-Type: application/json" \
-d '{"company":"greenhouse:airbnb"}'JavaScript (fetch)
const res = await fetch("https://tools.yukai.uk/api/v1/jobs", {
method: "POST",
headers: { "Authorization": "Bearer tt_live_XXXX", "Content-Type": "application/json" },
body: JSON.stringify({"company":"greenhouse:airbnb"}),
});
console.log(res.status, res.headers.get("x-credits-charged"), res.headers.get("x-credits-balance"));
console.log(await res.json());Python (requests)
import requests
r = requests.post(
"https://tools.yukai.uk/api/v1/jobs",
headers={"Authorization": "Bearer tt_live_XXXX"},
json={"company": "greenhouse:airbnb"},
timeout=120,
)
print(r.status_code, r.headers.get("x-credits-charged"), r.headers.get("x-credits-balance"))
print(r.json())
Response
JSON with "success": true and the result fields; on failure {"success": false, "error": {"code", "message", "retryable"}} and no credits are used. Every answer carries x-credits-charged (credits used) and x-credits-balance (balance after the call); check the balance any time with GET https://tools.yukai.uk/v1/billing/balance.
Full field list and response schema: OpenAPI spec company-jobs (its servers entry is the marketplace gateway; call https://tools.yukai.uk with your key).