> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stigg.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate Limits

Stigg enforces rate limits on REST API endpoints to protect platform stability and prevent unintended overload from misconfigured clients or retry loops.

Two kinds of limits apply, depending on the endpoint:

* **Entity-level limits** — mutation endpoints are limited per entity (customer, subscription, or customer+resource), so repeated calls against one entity can't starve out calls to others. Each entity has its own independent bucket: a customer-based operation is keyed on `customerId`, a subscription-based operation on `subscriptionId`, and a customer+resource operation on `customerId:resourceId`.
* **Shared Edge limits** — paywall and entitlement reads are always served through the [Edge API](/api-and-sdks/integration/additional-deployment-methods/network-requirements#api-endpoints), a separate low-latency layer, and share a single rate-limit bucket per API key across all of those endpoints (not per-endpoint). This includes the REST entitlement-check endpoints below, [REST SDK entitlement checks](https://changelog.stigg.io/faster-entitlement-checks-rest-sdks-now-route-through-the-edge-by-default-4cU7qo), and the raw `edge.api.stigg.io` JSON endpoints used internally by the SDKs — there is no separate "Edge API" surface to track independently.

| Endpoint                                                                               | Rate limit                                     |
| -------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `POST /subscriptions`                                                                  | 30 / min per customer (or customer + resource) |
| `POST /subscriptions/:id/transfer`                                                     | 30 / min per subscription                      |
| `POST /subscriptions/:id/migrate`                                                      | 30 / min per subscription                      |
| `POST /subscriptions/:id/delegate`                                                     | 30 / min per subscription                      |
| `DELETE /subscriptions/:id/future-update/pending-payment`                              | 30 / min per subscription                      |
| `DELETE /subscriptions/:id/future-update/schedule`                                     | 30 / min per subscription                      |
| `PATCH /subscriptions/:id`                                                             | 30 / min per subscription                      |
| `POST /subscriptions/:id/cancel`                                                       | 30 / min per subscription                      |
| `PATCH /customers/:id`                                                                 | 30 / min per customer                          |
| `POST /customers/:id/archive`                                                          | 30 / min per customer                          |
| `POST /customers/:id/unarchive`                                                        | 30 / min per customer                          |
| `POST /customers/:id/payment-method`                                                   | 30 / min per customer                          |
| `DELETE /customers/:id/payment-method`                                                 | 30 / min per customer                          |
| `GET /customers/:id/entitlements`                                                      | 6,000 / min (shared Edge bucket)               |
| `GET /customers/:id/entitlements/check`                                                | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/paywall.json`                                       | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/p/:productId/paywall.json`                          | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/c/:customerId/entitlements.json`                    | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/c/:customerId/entitlements-state.json`              | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/c/:customerId/subscriptions.json`                   | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/config/client-sdk-configuration.json`               | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/config/server-sdk-configuration.json`               | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/config/persistent-cache-service-configuration.json` | 6,000 / min (shared Edge bucket)               |
| `/v1/a/:accountId/e/:environmentId/credentials/event-queue.json`                       | 6,000 / min (shared Edge bucket)               |

## Behavior

* When the limit is exceeded, Stigg returns a `429` response: `{"error":"rate_limit_exceeded","message":"Too many requests"}`
* No `Retry-After` header is included in the response
* The `/health` endpoint is exempt from rate limiting
* Entity-level limits apply even across different endpoints or HTTP methods targeting the same entity

<Note>
  If higher rate limits are required, please contact [Stigg Support](mailto:support@stigg.io)
</Note>


## Related topics

- [Rate Limits](/api-and-sdks/integration/graphql/rate-limits.md)
- [I want to run Stigg Sidecar and API in production](/guides/i-want-to/run-stigg-sidecar-api-in-production.md)
- [Integrate data ingestion into Stigg](/guides/i-want-to/integrate-data-ingestion.md)
- [Responses](/api-and-sdks/api-reference/rest/responses.md)
- [Entitlement checks](/api-and-sdks/integration/backend/entitlements.md)
