429 Too Many Requests response until the window resets. Understanding how limits work — and designing your integration around them — ensures a smooth experience for your users.
Default Rate Limits
Rate limits are set at the workspace level and vary by the workspace’s current Zolt subscription plan. All limits apply per minute on a rolling basis.
If your integration consistently approaches these limits and upgrading your plan is not sufficient, contact support@zolt.io to discuss a custom limit for high-volume use cases.
Rate Limit Headers
Every API response — whether successful or not — includes three headers that tell you exactly where you stand in the current rate limit window. Always read these headers in your integration rather than counting requests yourself.Rate Limit Response Headers
Handling 429 Too Many Requests
When your integration receives a429 response, it should pause and retry the request after a delay rather than immediately re-attempting. Use an exponential backoff strategy — each successive retry waits twice as long as the previous one — with a small amount of random jitter added to prevent multiple instances of your integration from retrying in lockstep.
Exponential Backoff with Retry (JavaScript)
X-RateLimit-Reset header to calculate the exact time remaining in the current window and delay your retry until after that timestamp, rather than using a generic backoff interval.
Best Practices
Following these patterns from the start will help your integration stay well within its rate limit even as usage grows:- Cache responses locally — for data that does not change frequently (such as team member lists or project metadata), store the API response in memory or in a database and serve it from your cache instead of making repeated API calls
- Batch requests where possible — retrieve a full list of resources in a single paginated request rather than fetching each resource individually by ID in a loop
- Use webhooks instead of polling — rather than calling the API on a timer to check for changes, subscribe to Zolt webhook events to receive instant notifications when data changes; this eliminates polling entirely and uses zero rate limit budget when there is no activity
- Monitor
X-RateLimit-Remainingproactively — log this header in development and set up alerts if it drops close to zero, so you can identify high-traffic code paths before they cause429errors in production - Distribute requests over time — if your integration performs bulk operations (such as creating hundreds of tasks from a CSV import), introduce a small delay between requests to spread the load rather than firing them all at once