API Reference
Rate Limits
Rate limits protect the API from abuse and ensure fair usage for all customers. Limits vary by subscription tier.
Limits by Tier
| Feature | StarterFree | Professional$99/mo | EnterpriseCustom |
|---|---|---|---|
| Monthly Requests | 100,000 | 5,000,000 | Unlimited |
| Requests/Minute (RPM) | 60 | 300 | 1,000+ |
| Redaction Formats | Token only | All (Token, Hash, Synthetic) | All (Token, Hash, Synthetic) |
| Custom Patterns | No | Up to 50 | Unlimited |
| Audit Log Retention | 7 days | 30 days | 90 days |
Rate Limit Headers
Every API response includes headers with your current rate limit status:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per minute for your tier |
| X-RateLimit-Remaining | Remaining requests in the current window |
| X-RateLimit-Reset | Unix timestamp when the limit resets |
| Retry-After | Seconds to wait before retrying (only on 429) |
HTTP/1.1 200 OK
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1702000060
X-Request-ID: 01HXYZ123ABCHandling Rate Limits
When you exceed your rate limit, you'll receive a 429 Too Many Requests response:
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1702000090
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please wait 30 seconds before retrying.",
"status": 429
}
}Best Practices
- •Implement exponential backoff - When receiving a 429, wait for the
Retry-Afterduration, then retry with increasing delays. - •Monitor headers proactively - Check
X-RateLimit-Remainingand slow down before hitting the limit. - •Use request queuing - Queue requests and process them at a controlled rate to stay within limits.
- •Batch when possible - Combine multiple operations into fewer API calls where the API design allows.
async function requestWithRetry(url: string, options: RequestInit, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = parseInt(response.headers.get('Retry-After') || '60');
console.log(`Rate limited. Waiting ${retryAfter}s...`);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}Monthly Quotas
In addition to per-minute rate limits, each tier has a monthly request quota:
- Starter: 100,000 requests/month
- Professional: 5,000,000 requests/month
- Enterprise: Unlimited (custom agreement)
Quotas reset on the first day of each billing cycle.
Need Higher Limits?
If you're hitting rate limits frequently, consider upgrading your plan or contact us for enterprise pricing with custom limits.