Rate Limits
Per-minute and per-day request limits, the 429 response, and how to back off correctly.
Last updated 05 Aug 2026
Every account has a per-minute and a per-day request limit, enforced across every API key on that account (not per key).
Default limits
| Window | Default limit |
|---|---|
| Per minute | 1,200 requests |
| Per day | 100,000 requests |
These defaults can be raised for your account - contact your Riffre account manager if you expect to exceed them.
What counts against the limit
Both Send Message and Upload Media requests count against the same account-level limit. The limit is checked before your request body is parsed, so even a malformed request that fails validation still counts.
When you exceed the limit
The API responds with 429 Too Many Requests and a Retry-After header telling you how many seconds to wait before your next request:
HTTP/1.1 429 Too Many Requests
Retry-After: 42
Content-Type: application/json
{"error": "too_many_attempts", "message": "Too many attempts. Please try again in about 1 minute(s)."}
Handling rate limits correctly
- Read the
Retry-Afterheader and wait at least that long before retrying - do not use a fixed retry interval. - If you are sending in bulk, spread requests out over time rather than firing them all at once; this also reduces the chance of hitting Meta's own per-phone-number throughput limits during delivery.
- Rate limit responses do not consume your wallet balance - you are only charged when a message is actually accepted and queued.
429 response is never charged to your wallet.