Pod Engine tracks API usage and enforces rate limits to ensure fair access for all users. Every API response includes headers with your current usage and limits.
Every API response includes these headers to help you monitor your usage:
| Header | Description |
|---|---|
X-RateLimit-Limit | Your monthly limit for this endpoint (or "unlimited") |
X-RateLimit-Remaining | Number of requests remaining before you hit the limit |
X-RateLimit-Reset | Unix timestamp (seconds) when your limit resets |
X-Usage-Monthly | Your current monthly usage count for this endpoint type |
X-Plan-Tier | Your current plan tier (e.g., free, business, agency) |
Monthly limits reset on the 1st of each month at midnight UTC.
On top of the per-plan monthly limits, all API traffic is throttled per IP at the edge:
Exceeding the per-IP limit returns 429 Too Many Requests.
Spread load across requests or implement exponential backoff (see below).
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Monthly limit of 100 search requests exceeded"
}
}
Use the X-RateLimit-Reset header to determine when you
can retry:
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const resetTime = response.headers.get('X-RateLimit-Reset');
const waitMs = resetTime
? (parseInt(resetTime) * 1000) - Date.now()
: Math.pow(2, attempt) * 1000; // Exponential backoff
console.log(`Rate limited. Waiting ${waitMs}ms before retry...`);
await new Promise(resolve => setTimeout(resolve, Math.max(waitMs, 1000)));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
} X-RateLimit-Remaining header to avoid hitting limits
We believe great tools should be accessible to everyone building amazing things.
Eligible for a discount? Contact us to learn more.
See the full pricing page for addons and Agency options, or schedule a call.
Need more than 10,000 searches / mo? Get in touch and we'll tailor a plan.