Developers
HTTP API reference
Job search and salary data as JSON. Requires an API key — included with API Access or a confirmed free-tier key from Studio.
Prefer a guided walkthrough? Open the Developers quickstart (sign-in → Studio → confirmed key → curl). Trust docs: Privacy, Security.
Quick checklist
- Create / sign in to your Catalitium account.
- In Studio → Developer API, register a free key and confirm the email.
- Issue
GET https://catalitium.com/v1/jobs?per_page=5with headerX-API-Key. - Read
items[]plusmeta; watch401/429/404cases below. - Upgrade quotas via Pricing when you graduate past the free tier.
Base URL
https://catalitium.com
Authentication
- Header:
X-API-Key: cat_… - Query-string keys are not accepted (they leak via logs and Referer).
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /v1/jobs | Search catalog jobs. Query: title, country, page, per_page, remote=1, has_salary=1, freshness (7|14|30), function, salary_min, salary_max. Title tokens like 100k also set a salary floor. Response meta.filters echoes applied filters; meta.catalog_freshest is the newest catalog posting date (ISO, ingest-dependent). Items include is_new and is_ghost (30d+ postings), plus estimated_salary_range_compact / median_salary_currency (catalog location-median estimates — not employer offers). List responses intentionally omit empty description (browse stub avoids TOAST); use /v1/jobs/<id> for full cleaned text. Catalog-scoped — not a live ATS feed. |
| GET | /v1/jobs/<id> | Single job by ID. Includes full cleaned description and apply_url (empty when no applyable http(s)/mailto link). Same Est. fields as list (estimated_salary_range_compact, median_salary_currency) when a location median exists — catalog estimates only. |
| GET | /v1/salary | Location-median salary snapshot (not role×city). Query: country preferred, else title treated as a location string. Response includes matched_on (country | title_as_location). Catalog reference bands only — not live offer data. |
| GET | /api/keys/usage | Counts against quota (same X-API-Key decorator as /v1/*). Prefer X-RateLimit-* headers for free monitoring. Optional IANA timezone via X-Client-Timezone or ?tz= adds reset_local. |
| DELETE | /api/keys/me | Revoke key (same X-API-Key) |
Quotas & rate-limit UX
- Free (confirmed): 50 requests/day, 500/month (calendar month, UTC windows).
- API Builder: 25,000/day and 25,000/month (same budget on both windows).
- API Pro: 100,000/day and 100,000/month.
- Not in this contract:
/api/jobs*UI routes — site-only, not sold as the developer API.
Every successful /v1/* response includes:
X-RateLimit-Limit— daily limit for this keyX-RateLimit-Remaining— calls left in the daily windowX-RateLimit-Reset— next daily reset (ISO UTC midnight)X-RateLimit-Window— alwaysdaily(monthly totals live on usage)
GET /api/keys/usage (same X-API-Key) returns
remaining_today, remaining_month,
forecast_month_end, and optional upgrade —
and increments your quota. Prefer response headers for routine checks.
Pass an IANA name with X-Client-Timezone or ?tz=
to include reset_local.
Studio (signed-in) shows the same numbers for your key only — never other tenants.
Near limits? Upgrade on Pricing or wait for reset.
Errors
401invalid_key— missing header, typo, or revoked key401key_inactive— registered but unconfirmed; open the confirmation email link, or re-register in Studio if the link expired429quota_exceeded—details.windowisdailyormonthly; includesupgrade/hinttoward Pricing503catalog_unavailable— job catalog search failed; retry shortly (not an empty result set)404for missing job or no salary data
Example
curl -sS "https://catalitium.com/v1/jobs?per_page=5" \
-H "X-API-Key: cat_your_key_here"
FAQ
- How do I get an API key?
- Sign in, open Studio → Developer API, register a free key, and confirm the email. Send the key in the
X-API-Keyheader (never in the query string). - What are free-tier quotas?
- Free API access is 50 calls/day · 500/month. Paid API Access raises limits — see Pricing.
- What do 401 and 429 mean?
401 invalid_keymeans a missing, typo, or revoked key;401 key_inactivemeans the key is registered but not confirmed (open the email link or re-register in Studio);429means you hit the rate or daily/monthly quota.- Free vs paid?
- Free is for evaluation and light scripts. Upgrade via Pricing when you need higher throughput or production use.
API usage and examples are documented in README.md (section "API Access").