# 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:

```http
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](/pagination)).
- **Use bigger pages:** `limit=250` reads five times as much per request as the default.
- **Spread out bulk jobs,** and slow down when `RateLimit-Remaining` gets low.
