> ## 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 to protect platform stability and prevent unintended overload from misconfigured clients or retry loops. Two limits apply, and a request must pass both: **operation-level** (below) and [**entity-level**](#entity-level-rate-limits-resource-protection) (per customer, subscription, or customer resource).

## Operation-level rate limits

How many times a specific GraphQL operation can be called per minute, regardless of which customer or subscription is targeted.

| SDK method                                                                                               | GraphQL operation                       | Rate limit (calls per minute)                  |
| -------------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------------------------------------------- |
| getPaywall (public)                                                                                      | paywall                                 | 6,000<sup>†</sup>                              |
| getPaywall (in-app)                                                                                      | paywall                                 | 3000                                           |
| provisionSubscription                                                                                    | provisionSubscription                   | 250                                            |
| applySubscription                                                                                        | applySubscription                       | 250                                            |
| getEntitlements / getEntitlement / getBooleanEntitlement / getNumericEntitlement / getMeteredEntitlement | entitlement                             | 6,000<sup>†</sup>                              |
| getActiveSubscriptionsList                                                                               | getActiveSubscriptionsList              | 6,000<sup>†</sup>                              |
| getSubscriptions                                                                                         | subscriptions                           | 1500                                           |
| getSubscription                                                                                          | getSubscription                         | 3000                                           |
| provisionCustomer                                                                                        | provisionCustomer                       | 250                                            |
| reportEvent                                                                                              | reportEvent                             | 100,000 events **per second** (across batches) |
| reportUsage                                                                                              | reportUsage                             | 3000                                           |
| reportUsageBulk                                                                                          | reportUsageBulk                         | 600 in bulks of 100                            |
| getUsageHistoryV2                                                                                        | getUsageHistoryV2                       | 250                                            |
| previewSubscription                                                                                      | previewSubscription                     | 3000                                           |
| estimateSubscription                                                                                     | estimateSubscription                    | 3000                                           |
| estimateSubscriptionUpdate                                                                               | estimateSubscriptionUpdate              | 3000                                           |
| getCustomer                                                                                              | getCustomerByRefId                      | 3000                                           |
| getCustomerPortal                                                                                        | getCustomerPortal                       | 1500                                           |
| cancelSubscription                                                                                       | cancelSubscription                      | 250                                            |
| updateCustomer                                                                                           | updateOneCustomer                       | 250                                            |
| updateSubscription                                                                                       | updateOneSubscription                   | 250                                            |
| archiveCustomer                                                                                          | archiveCustomer                         | 250                                            |
| migrateSubscriptionToLatest                                                                              | migrateSubscriptionToLatest             | 250                                            |
| getCoupons                                                                                               | coupon                                  | 500                                            |
| revokePromotionalEntitlements                                                                            | revokePromotionalEntitlements           | 500                                            |
| ~~getCreditBalance~~ *(deprecated — use `getCreditEntitlement` instead)*                                 | ~~creditBalanceSummary~~ *(deprecated)* | 500                                            |
| getCreditGrants                                                                                          | creditGrants                            | 1500                                           |
| getCreditLedger                                                                                          | creditsLedger                           | 500                                            |
| getCreditUsage                                                                                           | creditUsage                             | 500                                            |
| grantCredits                                                                                             | createCreditGrant                       | 250                                            |
| voidCreditGrant                                                                                          | voidCreditGrant                         | 500                                            |

<sup>†</sup> Routed through the Edge API (a separate, REST-style layer) and shared with all Edge API endpoints — see [Edge API rate limits](/api-and-sdks/integration/graphql/edge-api-rate-limits).

<Note>
  `reportEvent` supports up to **100,000 events per second** on Stigg Cloud. For higher limits, see BYOC below or contact [Stigg Support](mailto:support@stigg.io).
</Note>

<Card title="Need 1M+ events/second? Join the BYOC Early Access" icon="rocket" href="mailto:support@stigg.io?subject=BYOC Early Access">
  **Bring Your Own Cloud (BYOC)** deploys Stigg's ingestion layer in your own infrastructure, removing rate-limit ceilings and keeping event data in your cloud. [Contact us](mailto:support@stigg.io) to join the Early Access program.
</Card>

## Entity-level rate limits (resource protection)

These limits exist to prevent repeated concurrent mutations on the same entity, which can cause:

* Parallel processing contention
* Unnecessary retries
* Backend instability
* Incident-level load amplification

### Entity types

Entity-level rate limits are enforced for the following entities:

* Customer
* Subscription
* Customer resource (customer and resource combination)

Each entity has its own rate limit bucket, independent of other entities. When a request mutates state, it is routed to a bucket based on the entity it targets:

* Customer-based operations → `customerId`
* Subscription-based operations → `subscriptionId`
* Customer and resource operations → `customerId:resourceId`

### Example

If the entity-level limit is 30 calls per minute:

* Calling `cancelSubscription` 30 times per minute for the same subscription ID is allowed
* The 31st call for that subscription will fail
* Calls for other subscriptions are unaffected
* Calls for other customers are unaffected

This applies even if:

* The calls use different GraphQL mutations
* The operation-level rate limit has not been reached

### GraphQL operations with entity-level rate limits

The following GraphQL mutations are subject to entity-level rate limiting. Each mutation is limited based on the specific entity key it mutates.

| GraphQL mutation                                                                 | Rate-limited entity (key)               | Rate limit (calls per minute per entity) |
| -------------------------------------------------------------------------------- | --------------------------------------- | ---------------------------------------- |
| `applySubscription`                                                              | `customerId:resourceId` or `customerId` | 30                                       |
| `createCustomer`                                                                 | `customerId`                            | 30                                       |
| `provisionCustomer`                                                              | `customerId`                            | 30                                       |
| `archiveCustomer`                                                                | `customerId`                            | 30                                       |
| `unarchiveCustomer`                                                              | `customerId`                            | 30                                       |
| `importCustomer`                                                                 | `customerId`                            | 30                                       |
| `updateCustomer`                                                                 | `customerId`                            | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`initAddStripeCustomerPaymentMethod`</span> | `customerId`                            | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`preparePaymentMethodForm`</span>           | `customerId`                            | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`attachCustomerPaymentMethod`</span>        | `customerId`                            | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`detachCustomerPaymentMethod`</span>        | `customerId`                            | 30                                       |
| `createSubscription`                                                             | `customerId:resourceId` or `customerId` | 30                                       |
| `provisionSubscription`                                                          | `customerId:resourceId` or `customerId` | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`provisionSubscriptionV2`</span>            | `customerId:resourceId` or `customerId` | 30                                       |
| `transferSubscription`                                                           | `customerId:resourceId` or `customerId` | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`triggerSubscriptionUsageSync`</span>       | `customerId:resourceId` or `customerId` | 30                                       |
| `cancelSubscription`                                                             | `subscriptionId`                        | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`migrateSubscriptionToLatest`</span>        | `subscriptionId`                        | 30                                       |
| `chargeSubscriptionUsage`                                                        | `subscriptionId`                        | 30                                       |
| `markInvoiceAsPaid`                                                              | `subscriptionId`                        | 30                                       |
| `updateSubscription`                                                             | `subscriptionId`                        | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`estimateSubscriptionUpdate`</span>         | `subscriptionId`                        | 30                                       |
| <span style={{whiteSpace: "nowrap"}}>`updateSubscriptionMaximumSpend`</span>     | `subscriptionId`                        | 30                                       |
| `cancelSchedule`                                                                 | `subscriptionId`                        | 30                                       |

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