Catalitium Developers
Jobs & Salary API
Simple JSON endpoints for catalog jobs and salary lookup from the Catalitium index — a searchable snapshot, not a live ATS mirror or continuous ingest. Built for engineers, analysts, and recruiters who want to use Catalitium data in their own tools without ceremony. Need custom enterprise access? .
Trust: Privacy · DPA · Security · Legal overview
Explore sample data in the product: Salary tool · Jobs catalog
Quickstart — first successful GET in ~15 minutes
One path from zero to a verified JSON response: account → confirmed key → curl → understand the payload → handle errors → upgrade when you need scale.
- Sign in — use Sign in / Sign up so we can attach usage to your workspace.
- Open Studio → Developer API — Studio (#api-access) has Register free API key.
- Confirm the email — keys stay inactive until you click the confirmation link once.
- Call the API — send
X-API-Key: cat_…on every/v1/*request (query-string keys are rejected). - Inspect JSON — successful search responses expose
items(job rows) alongsidemeta.total,meta.page, and pagination hints; single-job GET returns one flattened job object withtitle,company, andapply_url(empty when no applyable http(s)/mailto link). - Quota headers — every
/v1/*response includesX-RateLimit-*.GET /api/keys/usagealso requiresX-API-Keyand counts against quota (not free monitoring). Prefer response headers for day-to-day checks. Optional IANA zone viaX-Client-Timezoneor?tz=addsreset_local. - Need higher limits? — upgrade to Builder $29/mo or Pro $79/mo via Pricing → API Access.
Minimal request (swap domain + key)
curl -sS "https://catalitium.com/v1/jobs?per_page=3" \
-H "X-API-Key: cat_your_confirmed_key"
Common errors
401 invalid_key— missing header, typo, or revoked key.401 key_inactive— key registered but not confirmed; open the confirmation email link, or re-register in Studio if the link expired.429 quota_exceeded— wait for UTC reset or upgrade.404— unknown job id or salary snapshot unavailable for that title/country pair.
What you get
- Job search API,
GET /v1/jobswith filters. - Job detail API,
GET /v1/jobs/<id>with apply URL. - Conditional GET — list + detail responses include a weak
ETag; send it back asIf-None-Matchfor304 Not Modifiedwhen the payload is unchanged. - Salary lookup API,
GET /v1/salary— location-median snapshot (countrypreferred; elsetitleas a location string). Response includesmatched_on— not a role×city band matrix. - Free tier (after email confirmation): 50 requests/day and 500/month, with rate-limit headers on every response.
- Paid API (Builder $29/mo · Pro $79/mo): see Pricing → API Access — paid tiers set both daily and monthly limits to the same call budget (not “monthly only”).
- Not sold: browser UI routes under
/api/jobs*are site-only (IP-limited). The public contract is/v1/*+ key management under/api/keys/*.
Getting an API key
- While signed in, POST to
/api/keys/register(or use Register free API key in Studio). - Click the confirmation link in the email (key activates once).
- Send the key in
X-API-Keyfor all/v1/*calls.
We never show your key again after the email. If you lose it, revoke it with
DELETE /api/keys/me and register a new one.
Quick examples
1. Job search API
Fetch senior remote roles in the EU:
curl -s "https://catalitium.com/v1/jobs?title=senior+engineer&country=EU" \
-H "X-API-Key: cat_XXXXXXXXXXXXXXXXXXXXXXXX"
2. Job detail API
Get a single job with an apply URL:
curl -s "https://catalitium.com/v1/jobs/123" \
-H "X-API-Key: cat_XXXXXXXXXXXXXXXXXXXXXXXX"
3. Salary lookup API
Location-median snapshot (not role×city). Prefer country; when only title is set it is treated as a location string. Response includes matched_on (country | title_as_location):
curl -s "https://catalitium.com/v1/salary?country=CH" \
-H "X-API-Key: cat_XXXXXXXXXXXXXXXXXXXXXXXX"
Python snippet
Minimal example using requests:
import os
import requests
BASE = "https://catalitium.com"
API_KEY = os.environ.get("CATALITIUM_API_KEY", "cat_XXXXXXXXXXXXXXXXXXXXXXXX")
resp = requests.get(
f"{BASE}/v1/jobs",
params={"title": "ai engineer", "country": "US"},
headers={"X-API-Key": API_KEY},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
print("Found", data["meta"]["total"], "jobs")
Limits & headers
Quotas combine daily and calendar-month limits (see API reference). Each response includes:
X-RateLimit-Limit/Remainingfor the daily window.X-RateLimit-Reset, next daily reset (UTC).X-RateLimit-Windowisdaily; monthly totals are inGET /api/keys/usage(that call increments quota).
FAQ
- Is the API a live ATS mirror?
- No. Endpoints read the Catalitium catalog index — a searchable snapshot, not continuous ingest.
- Need custom enterprise access?
- — we will not invent a fresher feed promise on this page.
- Where are quotas documented?
- See daily/monthly limits above and the API reference.