Rate limits
How Harmonia rate-limits the public API + how to handle 429s.
The public API uses a token-bucket rate limiter per API key.
Default budgets
| Plan | Reads / minute | Writes / minute | Concurrent webhook deliveries |
|---|---|---|---|
| Starter | 60 | 30 | 2 |
| Pro | 600 | 300 | 8 |
| Business | 2400 | 1200 | 32 |
| Custom | Negotiable | Negotiable | Negotiable |
Headers
Every API response carries:
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 482
X-RateLimit-Reset: 1718800000
On exhaust we return 429 with a Retry-After header in seconds:
HTTP/1.1 429 Too Many Requests
Retry-After: 4
Burst handling
The bucket allows 1.5× burst for short windows — bursting at 2× the documented rate for under 10 seconds usually succeeds, but plan against the documented number.
Webhook backoff
If your webhook endpoint returns non-2xx, Harmonia retries with exponential backoff: 30s, 2m, 10m, 1h, 6h, 24h. After 24h we move the event to the dead-letter queue. Inspect at Settings → API → Webhooks → Deliveries.
Tips
- Page in chunks of 100, not 1000 — smaller requests are friendlier to both us and you.
- Use
Idempotency-Keyon writes so retries don't double-write. - For bulk migrations, talk to us — we can lift your write budget temporarily.