429 Too Many Requests response — understanding each tier helps you stay well within bounds and design resilient integrations.
The Three Tiers
All windows are fixed-window, 1-second intervals. Counters reset at the top of each second — there is no rolling window or token-bucket smoothing.
A
POST /v1/events/batch request counts as one request against all tiers, regardless of how many events are in the payload (up to the 100-event maximum). Batching is the most efficient way to ingest high volumes while staying within limits.429 Response & Retry-After
When you exceed a rate limit, AuditRails responds with HTTP429 Too Many Requests and a Retry-After header indicating how many seconds to wait before retrying.
AuditRails does not include
X-RateLimit-Limit, X-RateLimit-Remaining, or X-RateLimit-Reset headers on successful responses. Use the Retry-After header on 429 responses to drive your back-off logic.Handling Rate Limits in Your Code
Respect Retry-After
Always parse theRetry-After header value (in seconds) and wait at least that long before resending a request. A value of 1 is typical given the 1-second fixed window.
Use Batch Ingestion
If you are sending many events in a tight loop, switch toPOST /v1/events/batch. A single batch request of 100 events consumes only 1 request from your per-plan quota — a 100× improvement in throughput efficiency.
SDK Auto-Retry
All official AuditRails SDKs automatically retry5xx server errors with exponential back-off. While SDKs do not automatically retry 429 responses (to avoid thundering-herd issues), they surface the Retry-After value so you can implement the wait loop shown above.
Increasing Your Limits
Default plan limits cover the vast majority of production workloads. If you have a use case that requires sustained throughput above 1,000 req/s on live keys, contact the AuditRails sales team to discuss a custom plan.Talk to Sales
Request a higher rate limit or discuss an enterprise plan tailored to your ingestion volume.
Batch Ingestion
Learn how to structure batch payloads and maximise throughput within your existing limits.