429 Too Many Requests response and stops processing further requests until the current window resets.
Default limits
| Setting | Value |
|---|---|
| Window duration | 15 minutes (900 seconds) |
| Requests per window | 100 |
| Limit scope | Per API key (or per IP address for unauthenticated requests) |
rateLimit configured at creation time — contact support if you need a higher limit.
How limits are applied
The rate limiter counts requests within a sliding window. Each API key gets its own counter:- Authenticated requests (using
X-API-Key/X-API-Secret): the limit is tracked per API key. Multiple servers sharing the same credentials share a single counter. - Unauthenticated requests: the limit falls back to tracking by client IP address.
current >= limit) are rejected before the counter increments, so the 101st request in a window always fails.
429 response
When you exceed the limit, you receive:The API does not currently return
Retry-After or X-RateLimit-* headers. To determine when the window resets, track the timestamp of your first request in the current window and add 900 seconds.Best practices
Cache read responses
Endpoints like
/api/v1/bills/categories, /api/v1/bills/services, and /api/v1/transfers/banks return data that changes infrequently. Cache these responses locally for at least 15 minutes to avoid burning your quota on repeated lookups.Exponential backoff on 429
When you receive a
429, wait before retrying. Start with a 1-second delay and double it on each subsequent 429, up to a maximum of 60 seconds. Add random jitter to avoid synchronized retries across multiple instances.Batch status checks
If you need to poll for transaction status, use a single request per transaction at increasing intervals rather than polling every few seconds. Consider webhook notifications instead of polling where possible.
Separate keys per environment
Use different API keys for production and staging. This keeps limits independent and prevents test traffic from consuming your production quota.
Backoff implementation example
Request budgeting
With 100 requests per 15-minute window, plan your integration around these approximate budgets:| Use case | Estimated requests | Notes |
|---|---|---|
| Single bill payment flow | 3–4 | Validate customer, get service options, pay, check status |
| Single bank transfer flow | 2–3 | Account inquiry, initiate transfer, check status |
| KYC verification | 1 per check | Each endpoint call counts as one request |
| Listing billers + categories | 1–2 | Cache results; these rarely change |
