Rate Limit Tiers
Rate limits are enforced across three rolling windows — per minute, per hour, and per day — to prevent burst abuse while giving legitimate integrations plenty of headroom.General API Endpoints
Free-but-uncharged endpoints still count toward these limits.
GET /api/jobs/{id}
and GET /api/companies/{id} do not deduct wallet credits, but each request
is counted against your per-key request rate limit (X-RateLimit-*) like any
other general API call.Feed Endpoints
Feed endpoints (POST /api/jobs/feed, POST /api/jobs/feed/managed and GET /api/jobs/expired) have separate, higher limits since they are designed for bulk data sync:
Feed endpoints are subscription-only. Free-tier keys cannot access them. Feed
rate limits are tracked independently from general API limits — consuming your
search quota does not affect feed throughput.
Auto Apply Application Creation
Auto Apply is coming soon and is not accepting beta or production traffic. Creation limits, concurrency controls, sandbox quotas, and pricing will be published before launch. Create currently returns HTTP503 with problem code
auto_apply_coming_soon before any rate-limit or billing behavior applies.
Auto Apply Management Endpoints
The planned list, get, and cancel endpoints are documented as a contract preview. Their final limits will be published before launch.Auto Apply limits shown in older preview material are not launch commitments.
There is no live or allowlisted-beta allowance today.
How Rate Limits Work
- Rate limits are applied per API key — each key has its own independent counters
- Limits are checked before credits are deducted, so you are never charged for a rate-limited request
- If you exceed a rate limit, you’ll receive
HTTP 429 Too Many Requests - The most restrictive window applies: if you hit the per-minute cap, you’re blocked even if your hourly and daily budgets have room
- Limits reset on a rolling window basis, not at fixed clock boundaries
Rate Limit Response
Response Headers
Every API response includes rate limit headers so you can proactively manage your request pacing:Example Headers
Retry Strategies
1
Read the Retry-After header
When you receive a 429, always use the
Retry-After header value. This
tells you the exact number of seconds to wait. Never hardcode retry delays.2
Implement exponential backoff with jitter
For retries, use exponential backoff (e.g., 1s → 2s → 4s → 8s) with random
jitter (±25%) to avoid thundering-herd problems when multiple clients retry
simultaneously.
3
Set a max retry count
Cap retries at 3–5 attempts. If you’re still hitting 429 after multiple
retries, your request rate is fundamentally too high — slow down the overall
pipeline rather than hammering the API.
4
Track remaining quota proactively
Read
X-RateLimit-Remaining on every response. When it drops below 10–20%
of X-RateLimit-Limit, proactively throttle your request rate instead of
waiting for a 429.5
Cache responses aggressively
Cache search results and geocode lookups locally. Geocode results in
particular are highly cacheable since location strings map deterministically
to structured output.
6
Use the Feed API for bulk data
If you need to sync large volumes of jobs, use
POST /api/jobs/feed instead
of paginating through search results. The Feed endpoint is optimized for
high throughput with separate, generous rate limits.
