| name | vercel-rate-limits |
| description | Handle Vercel API rate limits, implement retry logic, and configure WAF rate limiting.
Use when hitting 429 errors, implementing retry logic,
or setting up rate limiting for your Vercel-deployed API endpoints.
Trigger with phrases like "vercel rate limit", "vercel throttling",
"vercel 429", "vercel retry", "vercel backoff", "vercel WAF rate limit".
|
| allowed-tools | Read, Write, Edit |
| version | 1.18.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","vercel","api","rate-limiting","security"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Vercel Rate Limits
Overview
Handle Vercel REST API rate limits with proper retry logic, and configure Vercel's WAF rate limiting SDK to protect your deployed API endpoints from abuse. Covers both consuming the Vercel API (outbound) and protecting your own functions (inbound).
Prerequisites
- Vercel CLI installed and authenticated
- Understanding of HTTP 429 status codes
- For WAF rate limiting: Vercel Pro or Enterprise plan
Instructions
Step 1: Vercel REST API Rate Limits
The Vercel REST API enforces rate limits per endpoint. When exceeded, the API returns HTTP 429 with rate limit headers:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711152000
Retry-After: 60
Known API limits:
| Endpoint Category | Rate Limit |
|---|
| Deployments (create) | 100/hour per project |
| Deployments (list/get) | 500/min |
| Projects (CRUD) | 200/min |
| Environment variables | 200/min |
| Domains | 200/min |
| Teams | 200/min |
| DNS records | 200/min |
| General API | 120 requests/min (default) |
Step 2: Implement Retry with Backoff for Vercel API
interface RateLimitInfo {
limit: number;
remaining: number;
reset: number;
}
function parseRateLimitHeaders(headers: Headers): RateLimitInfo {
return {
limit: Number(headers.() ?? ),
: (headers.() ?? ),
: (headers.() ?? ),
};
}
(): <> {
( attempt = ; attempt <= maxRetries; attempt++) {
res = (url, options);
(res. !== ) res;
(attempt === maxRetries) {
();
}
retryAfter = res..();
waitMs = retryAfter
? (retryAfter) *
: .( * .(, attempt) + .() * , );
.();
( (r, waitMs));
}
();
}