Rate limits
How many requests a store can make, and what happens past it.
Limits apply per store, across all of its keys, over a sliding one-minute window. Adding keys doesn't add capacity.
| Plan | Requests per minute | API keys |
|---|---|---|
| Pro | 60 | 5 |
| Advanced | 300 | 20 |
Every response tells you where you stand:
| Header | Meaning |
|---|---|
RateLimit-Limit | Requests allowed per window |
RateLimit-Remaining | Requests left in the current window |
RateLimit-Reset | Seconds until the window frees up |
Past the limit you get 429 with code rate_limited and a Retry-After
header in seconds:
if (response.status === 429) {
const seconds = Number(response.headers.get("Retry-After") ?? 1);
await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
// …then retry
}Staying under the limit
- Page with
limit=100instead of many small pages. - Sync changes with
updated_afterinstead of re-reading everything. - Let webhooks tell you what changed instead of polling each record.
- Spread bulk jobs out, and back off when
RateLimit-Remaininggets low.