429 Too Many Requests instead of processing the request.
Why the rate limit exists
The limit protects two things at once:- The platform, keeping the API stable and fair for every customer, so a single integration cannot overload the service.
- Your WhatsApp number, preventing bursts that WhatsApp reads as spam behavior. Sending steadily is safer for your number’s health than firing everything at once.
Default limit
The default limit is 3 requests per second, counted per access token (that is, per account). Since every API call is authenticated, the quota is always tied to your token.The limit applies to every API route, not just message sending. Listing, recipient lookups, and instance management calls all consume the same quota.
Per-plan flexibility
The default limit fits most integrations. If your volume needs more, your account quota can be raised according to your plan or as a paid add-on. Contact support so we can find the right limit and the best option for your case.Rate limit headers
Every API response carries rate limit headers that report the current state of your quota. They follow the IETF RateLimit header fields for HTTP standard.Example 200 response
A successful request, still within quota:Example 429 response
When you exceed the limit, the API responds:code field is always rate_limited, and the messages text reflects your account’s current limit and window size.
How to handle the rate limit
The recommended strategy has two layers. 1. Pace your calls before sending (preferred). For high-volume integrations (batch sends, message queues), throttle your own outbound rate so you never exceed the limit. Use a queue with throttling (for examplebottleneck or p-queue in Node.js, or rate.Limiter in Go) set to the same ceiling as your account. That way you never rely on receiving a 429.
2. Handle the 429 when it happens (safety net). Even with throttling, keep a retry:
- On a
429, wait the number of seconds inRetry-After(or, if absent, inRateLimit-Reset) and try again. - If no header is present, use exponential backoff with jitter (wait 1s, then 2s, 4s, and so on, up to a cap).
- Before sending, you can also read
RateLimit-Remaining: if it is near zero, waitRateLimit-Resetseconds before the next call.
Code examples
The examples below send a message and handle the429 while respecting the headers. Replace YOUR_API_TOKEN with your token and YOUR_INSTANCE_ID with the instance ID.
Summary
- The default is 3 requests per second per access token, applied across the whole API.
- Every response carries
RateLimit-Limit,RateLimit-Remaining, andRateLimit-Reset; the 429 also carriesRetry-After.RateLimit-ResetandRetry-Afterare counted in seconds. - The 429 returns
{ "errors": [{ "code": "rate_limited", ... }] }. - Pace your calls in your own code (queue and throttling) so you do not depend on the 429, and keep a retry with backoff as a safety net.
- Need more volume? Contact support to evaluate a higher limit.