Rate Limits¶
Jobko API rate limits protect the service and ensure fair usage.
Default Limits¶
| Limit | Value |
|---|---|
| Requests per hour | 100 |
| Requests per day | 1,000 |
These limits apply per API key.
Rate Limit Headers¶
Responses include rate limit information:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Max requests per hour |
X-RateLimit-Remaining |
Requests left in current window |
X-RateLimit-Reset |
Unix timestamp when limit resets |
When Limits Are Exceeded¶
You'll receive a 429 Too Many Requests response:
With a Retry-After header:
Best Practices¶
1. Check Remaining Requests¶
Before batch operations, check your remaining quota:
response = requests.get("https://jobko.ai/api/mcp/status", headers=headers)
remaining = int(response.headers.get("X-RateLimit-Remaining", 100))
if remaining < 10:
print("Running low on requests")
2. Implement Exponential Backoff¶
import time
def call_with_retry(func, max_retries=3):
for attempt in range(max_retries):
response = func()
if response.status_code == 429:
wait_time = 2 ** attempt # 1, 2, 4 seconds
retry_after = response.headers.get("Retry-After")
if retry_after:
wait_time = int(retry_after)
time.sleep(wait_time)
continue
return response
raise Exception("Max retries exceeded")
3. Cache Results¶
Don't re-analyze the same job multiple times:
from functools import lru_cache
@lru_cache(maxsize=100)
def analyze_job(job_url):
return jobko_request("analyze_job", {"job_url": job_url})
4. Use Webhooks for Batch Operations¶
For large batch jobs, contact us about webhook-based processing instead of polling.
Higher Limits¶
Need more requests? Contact us:
- Email: support@jobko.ai
- Dashboard: jobko.ai/dashboard
We offer increased limits for:
- Enterprise customers
- High-volume integrations
- Partnership programs