Rate limits
Each key has a bucket of requests that refills every second. Each store also has a daily allowance shared by all its keys, so one runaway script can't use up the store's whole allowance.
| Store's plan | Requests per second | Burst | Per store per day |
|---|---|---|---|
| Free | 2 | 10 | 10,000 |
| Starter, Growth | 5 | 20 | 50,000 |
| Business | 10 | 40 | 200,000 |
Every response tells you where the key stands:
RateLimit-Limit: 20
RateLimit-Remaining: 17
RateLimit-Reset: 0
RateLimit-Limit: the bucket's size.RateLimit-Remaining: requests left right now.RateLimit-Reset: seconds until the next request is allowed when none are left.
A request over the limit gets 429 rate_limited with Retry-After in seconds. Wait that long, then retry.
Staying within limits
- Use webhooks instead of asking every few seconds whether anything changed.
- Sync changes, not everything: use
updated_at_min(see Pagination and syncing). - Use bigger pages:
limit=250reads five times as much per request as the default. - Spread out bulk jobs, and slow down when
RateLimit-Remaininggets low.