429 Too Many Requests response.
How it works
Each endpoint is subject to a 60-second sliding window. If the number of requests from a single client exceeds the limit within that window, subsequent requests are throttled until the window resets. Rate limits are tracked per authenticated user (store + profile). Unauthenticated requests are tracked by IP address.Rate limit groups
Endpoints are assigned to one of four groups based on their expected traffic pattern:Endpoint assignments
Small
Small
- Orders (
GET /orders,GET /orders/{orderId}) - Profile identify (
POST /profiles/identify)
Medium (default)
Medium (default)
- Items (
GET /items,POST /items,PATCH /items/{itemId},DELETE /items, etc.) - Lists (
GET /lists,POST /lists,PATCH /lists/{listId},DELETE /lists/{listId}, etc.) - Shared lists (
GET /shared-lists,POST /shared-lists, etc.) - Smart lists (
GET /smart-lists,DELETE /smart-lists/{smartListId}/items/{itemId}, etc.) - Notifications (
GET /notifications,POST /notifications/read, etc.) - Subscriptions (
GET /subscriptions,POST /subscriptions, etc.) - Profile (
POST /profiles/token,GET /profiles,PATCH /profiles/profile)
Extra large
Extra large
- Tracking (
POST /collect)
The large group (300 req/60s) exists but is not currently assigned to any
endpoint. It is reserved for future use.
Rate limit headers
Successful responses include headers that report your current usage:
When a request is throttled (
429), the response includes a single header:
Handling 429 responses
When you hit the rate limit, the API returns a429 status with a Retry-After header indicating how many seconds to wait before retrying.
Retry strategies
When you receive a429, wait for the number of seconds indicated by Retry-After before retrying.