Skip to main content
The rate limit controls how many calls you can make to the Zapster API within a time window. When you go over the limit, the API responds with 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.
Before asking for a higher limit, handle the rate limit on your side. The most robust way to integrate is to never depend on the 429: pace your outbound calls in your own code (queue and throttling) so you stay under the limit. A higher limit helps with spikes, but it does not replace client-side pacing.

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:
The 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 example bottleneck 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 in Retry-After (or, if absent, in RateLimit-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, wait RateLimit-Reset seconds before the next call.

Code examples

The examples below send a message and handle the 429 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, and RateLimit-Reset; the 429 also carries Retry-After. RateLimit-Reset and Retry-After are 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.