# Rate limits

> Each account gets 1,000 requests per rolling hour. The X-RateLimit headers, meta.rate_limit_remaining, and how to handle 429 with Retry-After.

*Source: https://shopsavvy.com/data/documentation/rate-limits* · Part of the [ShopSavvy Data API documentation](https://shopsavvy.com/data/documentation.md)

---

Each account can make **1,000 requests per rolling hour**, counted across all of its API keys. Rate limits are separate from credits: a request that costs 0 credits still counts as one request. To fetch many products without using up requests, pass up to 100 comma-separated identifiers in one call or use `POST /products/batch`.

Every authenticated response includes these headers:

| Header | Description |
|--------|-------------|
| `X-RateLimit-Limit` | Requests allowed per rolling hour. |
| `X-RateLimit-Remaining` | Requests left after this one. |
| `X-RateLimit-Reset` | Seconds until your oldest request in the window ages out and frees a slot. |

The same remaining count is in `meta.rate_limit_remaining` on every response, error responses included:

```json
{
  "meta": {
    "credits_used": 2,
    "credits_remaining": 998,
    "rate_limit_remaining": 958
  }
}
```

When you run out, the API answers **HTTP 429** with error code `ERR_RATE_LIMIT` and a `Retry-After` header (in seconds). Wait that long before retrying. Requests rejected with 429 don't count against your limit, so retrying won't extend the wait. If you need a higher limit, contact business@shopsavvy.com.
