Skip to main content

Rate Limits

AlertifyPro enforces rate limits on all API endpoints to ensure fair usage and platform stability.

Limits by plan​

PlanRequests / minuteRequests / dayBurst
Free301,00050
Starter6010,000100
Professional300100,000500
EnterpriseCustomCustomCustom

Limits are applied per API key, not per IP address.

Rate limit headers​

Every API response includes rate limit information:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 247
X-RateLimit-Reset: 1709337600
X-RateLimit-Window: 60
HeaderDescription
X-RateLimit-LimitTotal requests allowed in the window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets
X-RateLimit-WindowWindow duration in seconds

Handling rate limit errors​

When rate limited, AlertifyPro returns 429 Too Many Requests:

{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after 2026-03-02T14:24:00Z.",
"retry_after": "2026-03-02T14:24:00Z",
"status": 429
}
}

Best practices​

Implement retry with backoff​

async function apiRequest(url: string, retries = 3): Promise<Response> {
for (let attempt = 0; attempt <= retries; attempt++) {
const res = await fetch(url, { headers: { Authorization: `Bearer ${API_KEY}` } });

if (res.status === 429) {
const resetAt = res.headers.get('X-RateLimit-Reset');
const waitMs = resetAt ? (Number(resetAt) * 1000 - Date.now()) : (2 ** attempt * 1000);
await new Promise(r => setTimeout(r, Math.min(waitMs, 30_000)));
continue;
}

return res;
}
throw new Error('Rate limit retries exhausted');
}

Cache responses​

Avoid re-fetching the same data repeatedly. Cache monitor status and uptime data locally for at least 30 seconds.

Use webhooks instead of polling​

Instead of polling /v1/monitors repeatedly, configure webhooks to receive real-time events.

Enterprise rate limits​

Enterprise customers can request increased rate limits or dedicated API capacity. Contact [email protected].