Skip to main content

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

TierRequests per Minute
Tier 1 (default)100
Tier 2500
Tier 32,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:

HeaderDescription
X-RateLimit-LimitYour tier's request limit per minute
X-RateLimit-RemainingRequests 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

  1. Check the headers -- Use X-RateLimit-Remaining to monitor your usage proactively.
  2. Back off -- When you receive a 429, wait before retrying. The rate limit window resets every minute.
  3. Implement exponential backoff -- For automated retries, use exponential backoff with jitter to avoid thundering herd problems.
  4. 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');
}