Rate Limits
API requests are rate-limited based on your partner tier. Rate limits are applied per partner account, not per API key.
Limits by tier
| Tier | Requests per Minute |
|---|---|
| Tier 1 (default) | 100 |
| Tier 2 | 500 |
| Tier 3 | 2,000 |
All new partner accounts start on Tier 1. To request a tier upgrade, contact your RynoPay account manager.
Response headers
Every API response includes rate limit information:
| Header | Description |
|---|---|
X-RateLimit-Limit | Your tier's request limit per minute |
X-RateLimit-Remaining | Requests remaining in the current window |
Exceeding your limit
When you exceed your rate limit, you will receive:
HTTP/1.1 429 Too Many Requests
How to handle rate limits
- Check the headers -- Use
X-RateLimit-Remainingto monitor your usage proactively. - Back off -- When you receive a
429, wait before retrying. The rate limit window resets every minute. - Implement exponential backoff -- For automated retries, use exponential backoff with jitter to avoid thundering herd problems.
- Batch where possible -- If the API supports batch operations, prefer them over individual requests.
Example: Retry with backoff
async function callWithRetry(fn, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fn();
if (response.status !== 429) {
return response;
}
// Exponential backoff: 1s, 2s, 4s
const delay = Math.pow(2, attempt) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error('Rate limit exceeded after max retries');
}