Admin REST and GraphQL storefront APIs
Why Shopify returns 429
Shopify enforces strict upstream quotas. When your integration exceeds permitted throughput, the API responds with HTTP 429 and rate-limit headers that signal how long to wait before retrying.
- Inventory sync jobs exceed the leaky-bucket REST quota.
- Webhook processors replay orders without respecting Retry-After.
- Multi-store integrations share one app credential and collide on the same bucket.
Shopify rate-limit headers
Monitor these response headers to detect quota exhaustion before users see failures. Official reference: Shopify rate limit documentation.
| Header | Meaning |
|---|---|
X-Shopify-Shop-Api-Call-Limit | Bucket usage in the form current/limit (e.g., 32/40) for REST Admin API calls. |
Retry-After | Recommended wait time in seconds before the next request. |
X-Request-Id | Unique request identifier useful for correlating throttled calls in logs. |
Default Shopify limits
- Requests per minute
- 40
- Throttle status code
- 429
Drop-in fix with ThrottleProxy
ThrottleProxy serializes Shopify Admin API traffic per workspace, respects Retry-After semantics, and prevents sync workers from draining your shared bucket during flash sales.
curl "https://proxy.throttleproxy.com/proxy?target=https://api.example.com/v1/resource" \ -H "Authorization: Bearer YOUR_API_KEY"
ThrottleProxy queues eligible bursts, enforces workspace RPM ceilings, and surfaces privacy-safe request activity so teams can understand pressure before increasing traffic to Shopify.
Start Setup →