Rate Limit Tiers
Rate limits are enforced across three time windows — per minute, per hour, and per day — to prevent abuse while giving legitimate integrations plenty of headroom.General API Endpoints
| Tier | Lifetime Cap | Per Minute | Per Hour | Per Day |
|---|---|---|---|---|
| Free | 10 total requests | 5 | 10 | 10 |
| Paid | Unlimited | 60 | 1,000 | 10,000 |
Feed Endpoints
Feed endpoints (POST /api/jobs/feed and GET /api/jobs/expired) have separate, higher limits since they are designed for bulk data sync:
| Tier | Per Minute | Per Hour | Per Day |
|---|---|---|---|
| Free | N/A | N/A | N/A |
| Paid | 120 | 5,000 | 50,000 |
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.
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:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the current window resets |
Retry-After | Seconds to wait before retrying (only present on 429 responses) |
Example Headers
Retry Strategies
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.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.
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.
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.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.

