API Rate Limits
Quotas and limits by subscription tier
Best-effort capacity: Rate limits are enforced on a best-effort basis. No SLA guarantees except for Enterprise tier.
Limits by Tier
| Limit | Free | Developer | Professional | Enterprise |
|---|---|---|---|---|
| Requests/minute | 10 | 60 | 300 | Unlimited* |
| Requests/day | 100 | 5,000 | 50,000 | Unlimited* |
| Burst limit | 5 | 20 | 50 | 100 |
| Concurrent | 2 | 5 | 20 | 50 |
Response Headers
Rate limit info is included in API responses for keyed endpoints. Public endpoints use standard 429 responses.
Note: X-RateLimit headers are being rolled out progressively across all endpoints.
X-RateLimit-Limit: 60X-RateLimit-Remaining: 45X-RateLimit-Reset: 1705359600X-Request-ID: req_abc123
| Header | Description |
|---|---|
X-RateLimit-Limit | Max requests per window |
X-RateLimit-Remaining | Requests left in window |
X-RateLimit-Reset | Unix timestamp when window resets |
X-Request-ID | Unique request ID for support |
Rate Limit Exceeded
When rate limited, you receive HTTP 429:
{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 45 seconds."
},
"meta": {
"schema_version": "1.0.0",
"request_id": "req_xyz789",
"retry_after": 45
}
}
Best Practices
- Cache responses — Most data updates hourly or daily
- Implement backoff — Exponential backoff on 429
- Monitor headers — Check remaining quota
- Batch requests — Use bulk endpoints where available
Cache Recommendations
| Endpoint | Update Freq | Cache TTL |
|---|---|---|
| Carbon Data | Hourly | 1 hour |
| World Bank | Annual | 24 hours |
| Grid UK | 30 min | 15 min |
| Energy | Annual | 24 hours |
| Macro | Daily | 1 hour |
| DAP Status | Hourly | 5 min |
Upgrade Options
Need higher limits? Upgrade your plan at /pricing or contact enterprise@feedoracle.io for custom quotas.