Stigg enforces rate limits to protect platform stability and prevent unintended overload scenarios caused by misconfigured clients or retry loops. Rate limiting is applied at two levels: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.
- Global endpoint rate limits: how many times a specific operation can be called per minute.
- Entity-level rate limits: how many times the same entity (customer, subscription, or customer resource) can be mutated within a time window.
Edge API rate limits
Edge API endpoints are rate-limited per API key, aggregated globally across all regions and endpoints. The following endpoints are subject to Edge API rate limiting:/v1/a/:accountId/e/:environmentId/paywall.json/v1/a/:accountId/e/:environmentId/p/:productId/paywall.json/v1/a/:accountId/e/:environmentId/c/:customerId/entitlements.json/v1/a/:accountId/e/:environmentId/c/:customerId/entitlements-state.json/v1/a/:accountId/e/:environmentId/c/:customerId/subscriptions.json/v1/a/:accountId/e/:environmentId/config/client-sdk-configuration.json/v1/a/:accountId/e/:environmentId/config/server-sdk-configuration.json/v1/a/:accountId/e/:environmentId/config/persistent-cache-service-configuration.json/v1/a/:accountId/e/:environmentId/credentials/event-queue.json
- When the limit is exceeded, Stigg returns a
429response:{"error":"rate_limit_exceeded","message":"Too many requests"} - No
Retry-Afterheader is included in the response - The
/healthendpoint is exempt from rate limiting - The rate limit is shared across all Edge API endpoints (not per-endpoint)
If higher rate limits are required, please contact Stigg Support
Global endpoint rate limits
Global rate limits apply per operation, regardless of which customer or subscription is being targeted.| SDK method | GraphQL operation | Rate limit (calls per minute) |
|---|---|---|
| getPaywall (public) | paywall (Edge API) | See Edge API rate limits |
| getPaywall (in-app) | paywall | 3000 |
| provisionSubscription | provisionSubscription | 250 |
| applySubscription | applySubscription | 250 |
| getEntitlements / getEntitlement / getBooleanEntitlement / getNumericEntitlement / getMeteredEntitlement | entitlement (Edge API) | See Edge API rate limits |
| getActiveSubscriptionsList | getActiveSubscriptionsList (Edge API) | See Edge API rate limits |
| getSubscriptions | subscriptions | 1500 |
| getSubscription | getSubscription | 3000 |
| provisionCustomer | provisionCustomer | 250 |
| reportEvent | reportEvent | 1000/bulk size per second |
| 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 |
getCreditEntitlement instead) | 500 | |
| getCreditGrants | creditGrants | 500 |
| getCreditLedger | creditsLedger | 500 |
| getCreditUsage | creditUsage | 500 |
| grantCredits | createCreditGrant | 500 |
| voidCreditGrant | voidCreditGrant | 500 |
If higher rate limits are required, please contact Stigg Support
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)
- 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
cancelSubscription30 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
- The calls use different GraphQL mutations
- The global endpoint 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 |
initAddStripeCustomerPaymentMethod | customerId | 30 |
preparePaymentMethodForm | customerId | 30 |
attachCustomerPaymentMethod | customerId | 30 |
detachCustomerPaymentMethod | customerId | 30 |
createSubscription | customerId:resourceId or customerId | 30 |
provisionSubscription | customerId:resourceId or customerId | 30 |
provisionSubscriptionV2 | customerId:resourceId or customerId | 30 |
transferSubscription | customerId:resourceId or customerId | 30 |
triggerSubscriptionUsageSync | customerId:resourceId or customerId | 30 |
cancelSubscription | subscriptionId | 30 |
migrateSubscriptionToLatest | subscriptionId | 30 |
chargeSubscriptionUsage | subscriptionId | 30 |
markInvoiceAsPaid | subscriptionId | 30 |
updateSubscription | subscriptionId | 30 |
estimateSubscriptionUpdate | subscriptionId | 30 |
updateSubscriptionMaximumSpend | subscriptionId | 30 |
cancelSchedule | subscriptionId | 30 |
