H
HelpKit
API & Developers

API Rate Limits and Best Practices

1 min readMar 19, 2026

API Rate Limits and Best Practices



Understanding and respecting rate limits ensures your integration stays stable and your account isn't throttled.

Rate Limit Tiers



| Plan | Requests/Minute | Requests/Hour | Requests/Day | |------|-----------------|---------------|---------------| | Free | 30 | 500 | 2,000 | | Pro | 120 | 5,000 | 50,000 | | Business | 600 | 20,000 | 200,000 | | Agency | 2,000 | 100,000 | Unlimited |

Rate Limit Headers



Every API response includes rate limit headers:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1742377200
Retry-After: 45


Handling 429 Errors



When you hit a rate limit, the API returns HTTP 429. Implement exponential backoff:

javascript
async function apiCallWithRetry(url, options, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await fetch(url, options);
    if (res.status !== 429) return res;
    
    const retryAfter = res.headers.get('Retry-After') || Math.pow(2, i) * 1000;
    await new Promise(r => setTimeout(r, retryAfter));
  }
  throw new Error('Max retries exceeded');
}


Best Practices



Batch operations where possible:
  • Use /contacts/bulk for importing multiple contacts at once
  • Use /messages/bulk for sending to multiple recipients


  • Cache responses:
  • Templates rarely change — cache them for 1 hour
  • Contact data changes infrequently — cache for 5 minutes


  • Use webhooks instead of polling:
  • Don't poll /conversations every 10 seconds
  • Subscribe to message.received webhook instead


  • Paginate efficiently:
  • Use limit and cursor parameters
  • Don't fetch all records in one request


  • Separate API keys by environment:
  • Use different API keys for development, staging, and production
  • This prevents accidental test data from polluting production
  • Was this article helpful?
    Let us know so we can improve our documentation
    Still need help?
    Our support team is here for you
    Submit a ticket →