Skip to main content
The Swish API enforces rate limits to ensure fair usage and platform stability. When you exceed the limit, the API returns a 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

  • Orders (GET /orders, GET /orders/{orderId})
  • Profile identify (POST /profiles/identify)
  • 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)
  • 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 a 429 status with a Retry-After header indicating how many seconds to wait before retrying.

Retry strategies

When you receive a 429, wait for the number of seconds indicated by Retry-After before retrying.
The @swishapp/api-client supports request and response interceptors, making it straightforward to add retry logic in one place rather than wrapping every call.