Recharge API Rate Limit During Subscription Billing
Root cause
Your integration exceeded Recharge's API rate limit (typically 40 requests per second on the standard plan) during a bulk billing operation, causing subsequent API calls to return 429 Too Many Requests and billing operations to fail without being retried.
Symptoms
- • Recharge API returns HTTP 429 with a Retry-After header during billing operations
- • Bulk subscription operations (billing cycle runs, migrations) fail partway through
- • Some subscriptions in a bulk run succeed while others fail with no payment error
- • Your integration logs show 429 errors clustering around scheduled billing windows
How to fix it
Implement exponential backoff on all Recharge API calls
When your Recharge API client receives a 429 response, read the Retry-After header and wait that many seconds before retrying. Implement exponential backoff with jitter: initial wait = Retry-After seconds, subsequent waits = previous wait × 2 + random(0–1) seconds. Never retry immediately on 429 — immediate retries worsen the rate limit situation.
Distribute bulk billing operations across time
For bulk operations (billing a cohort of subscriptions, running a migration), distribute the API calls over minutes rather than seconds. Use a queue with a configurable rate — for Recharge standard plans, stay below 30 requests per second to leave headroom. For Shopify API calls made alongside Recharge calls, use separate rate limiters for each API.
Resume incomplete bulk operations from the point of failure
Implement idempotent checkpointing in bulk billing jobs: before processing each subscription, write its ID to a checkpoint store. If the job fails due to rate limiting, restart it from the last checkpointed ID rather than from the beginning. This prevents double-billing of subscriptions that were already processed before the rate limit was hit.
Frequently asked questions
What is Recharge's API rate limit?
Recharge's standard plan allows 40 API requests per second per integration. Enterprise plans have higher limits. Rate limit headers are returned with every response: X-Recharge-Limit shows your current usage and X-Recharge-Limit-Remaining shows remaining calls in the current window. Monitor these headers in your integration to avoid hitting the limit unexpectedly.
Do Recharge API rate limit errors cause data loss or state corruption?
Rate limit errors do not corrupt data — they simply reject the request without acting on it. However, if your billing code does not retry rate-limited requests, the corresponding subscription billing attempt will not be created, resulting in a missed billing cycle. Always implement retry logic that handles 429 responses and tracks which subscriptions were successfully billed before the limit was hit.
Detect this error automatically
Free cross-stack scan finds all billing errors in 60 seconds.
Run Free Scan →