402, a trial quota, a number limit. This page says what a plan actually controls and how to see your own figures without asking anyone.
A plan controls three things and nothing else: how many numbers you may connect, how many messages a trial may send in total, and how many requests a minute you may make. Every message type, every field and every endpoint on this site is available on every plan.
What a plan controls
This page does not list the figures for each plan, on purpose. They are configured per plan and can change without this site being rebuilt, so anything printed here could quietly stop being true. Your own current figures are always in the API and on the portal — see Reading your own limits — and those are the numbers that actually govern your account.
If you bought through a provider
If your account came from a reseller rather than directly from us, you are not on one of our plans at all. Your provider sets two things on your account instead:- how many numbers you may connect, and
- how long your access runs for.
instance_limit_reached with details.limit_source: "account" — that means “ask your provider”, not “upgrade a plan”. See Telling the two number limits apart.
The number limit
The cap counts the numbers on your account that have not been deleted, whether they are connected or not. Deleting a number frees its slot immediately. Going over it gives403 instance_limit_reached, carrying the cap in details.instance_limit and where it came from in details.limit_source. You will see it in two places: when you add a number, and when you ask for a new QR for a number that is outside the cap.
If your allowance goes down
Moving to a plan with fewer numbers does not disconnect anything. Numbers that are connected stay connected and keep sending. What changes is that the cap counts your numbers oldest first, so a reduced allowance costs your newest numbers their slot — and those numbers will be refused a new QR the next time they need to reconnect. The ones you have been using longest are unaffected. You can see which is which before it happens: every entry inGET /v1/instances carries within_limit. false means that number is outside the current allowance and will not be issued a new QR.
Nothing is ever disconnected for being over the cap. To bring a number back inside the allowance, delete one you no longer use — that frees the slot for the next one in line — or move to a plan with more numbers.
The trial message cap
A trial allows a fixed number of messages in total — not per day, and not per number. Every message type counts against it equally: an image costs the same one message as a text.- Only sent messages count. A send that failed does not.
- A number check is not a message and does not count.
- When it is used up, every send returns
403 trial_quota_exceededwith the allowance indetails.trial_message_limit.
The rate limit
Per minute, per API key, and split across two separate budgets:
The instance budget is deliberately generous so that polling a QR while somebody scans can never eat into your sending allowance. Full detail, including the headers, is on the Errors page.
Reading your own limits
Nothing here needs to be hardcoded, and nothing should be. Every figure that applies to you is in the API or on the portal:Your number limit
GET /v1/instances returns data.slots — used and limit, straight from whatever cap applies to your account. limit is null when there is no fixed cap.Your rate limit
Every response carries
X-RateLimit-Limit and X-RateLimit-Remaining for the scope named in X-RateLimit-Scope. Read the header rather than assuming a number.Your trial allowance
details.trial_message_limit on the 403 trial_quota_exceeded you get when it runs out. Usage so far is on your portal dashboard.Everything else
Your plan, your renewal date and your usage are on the portal. That is the authoritative view of your own account.
Your current number allowance
What a plan does not change
No plan unlocks a capability. Every endpoint, every message type and every field on this site is available on all of them — and so is every limitation:- You cannot receive messages. There are no incoming messages, no webhooks and no delivery receipts on any plan. See What is not available yet.
- Media is sent from a public link you host. There is no upload endpoint. See Sending media.
- Buttons and lists are best-effort. Many WhatsApp clients no longer render them and may show plain text instead. A successful response means the message was accepted, not that the buttons appeared.
- Poll results and button taps cannot be read back. The response goes to the phone, not to your system.
- There is no bulk send and no scheduling. One request sends one message to one recipient.
Field limits, which are not a plan thing
Message field sizes — 4,096 characters of text, 1,024 of caption, 3 buttons, 50 numbers per check — are the same on every plan and are documented on each endpoint page. They come from what WhatsApp itself will carry, not from what you pay.When access stops
Nothing is destroyed when a plan lapses. You can still list, inspect, re-scan and delete your existing numbers. What stops is sending and adding a new number —
POST /v1/instances is the one instance endpoint that needs an active plan.
