Skip to content
Contents
Reference

Plans and quotas

Four different ceilings apply to an integration, and they fail in four different ways. Confusing them is why a message that is refused looks unexplainable — so this page separates them, then gives the real numbers for each.

Four kinds of limit

Each has its own failure, its own remedy and its own place to look.

Kind of limitCodeDescription
Plan entitlementENTITLEMENT_LIMIT_REACHEDHow much of a resource your plan allows: contacts, channels, webhook endpoints. Fixed by the plan; raised by changing plan.
HTTP rate limitRATE_LIMITEDHow often you may call one route. Per workspace or per IP, over a short window. Wait and retry.
Provider throughputPROVIDER_RATE_LIMITEDHow fast the upstream provider will accept messages on a channel. Not something you can raise.
QR safety policyQR_SAFETY_LIMIT_REACHEDA conservative cap the platform applies to unofficial QR channels. A policy choice, not a WhatsApp rule.

Plan entitlements

GET/v1/plan

Read your own entitlements rather than hard-coding them — a workspace can carry an override, and the endpoint reports the effective value with its source.

The seeded plan configuration. Unlimited is returned as unlimited: true with a null value.
EntitlementfreestartergrowthenterpriseEnforced
monthly_message_quotaUnlimitedUnlimitedUnlimitedUnlimitedYes
production_channels1310UnlimitedYes
contacts50010,000100,000UnlimitedYes
webhook_endpoints1520UnlimitedYes
shared_test_sessions111UnlimitedYes
sandbox_message_quotaUnlimitedUnlimitedUnlimitedUnlimitedNot yet
verified_sandbox_recipients111UnlimitedNot yet
api_keys21025UnlimitedNot yet
team_seats1520UnlimitedNot yet
active_automations220100UnlimitedNot yet
campaigns_enabledfalsetruetruetrueNot yet
admin_log_retention_days73090UnlimitedNot yet
support_tierdocsstandardpriorityslaNot yet

Not every entitlement is enforced yet

The keys marked as not enforced are reported by the plan endpoint but nothing counts against them today. Treat them as a published intention rather than as a limit you will hit — and do not build a billing assumption on one.

Current consumption comes from a separate endpoint, which reports the metered totals alongside the limits and what is left.

GET/v1/usage
  • The period is always the current UTC calendar month, with an exclusive end. It is not a rolling thirty days and it is not the workspace's timezone.
  • The counts under current are live gauges, not period sums. Contacts, connected channels, keys and seats are all point-in-time.
  • The endpoint takes no parameters. There is no daily granularity and no way to ask for a past month, so a per-day figure cannot be derived from it.

HTTP rate limits

Rate-limited routes and their buckets. A denial is a 429 with a Retry-After header — see errors and limits for the headers in full.

EndpointLimitScope
POST /v1/messages600 / 1minworkspace
POST /v1/channels20 / 1minworkspace
POST /v1/sandbox/sessions10 / 1hworkspace
POST /v1/sandbox/sessions/{id}/verify20 / 10minworkspace
POST /v1/contacts600 / 1minworkspace
POST /v1/contacts/imports20 / 1minworkspace
POST /v1/templates/{id}/test-send60 / 1minworkspace
POST /v1/conversations/{id}/messages600 / 1minworkspace
POST /v1/channels/{id}/qr/start30 / 1minworkspace

They are configuration, not contract

These are the deployed defaults. Rate limiting is on in production and off elsewhere, and the numbers can be tuned, so read the headers rather than encoding a ceiling in your client.

Provider throughput

Every channel publishes a max_throughput_mps in its capabilities, and the dispatcher paces messages to it.

ProviderThroughputDescription
sandbox2 msg/sComfortable for testing, and shared with nobody: the pool number is yours for the session.
qr0.5 msg/sDeliberately slow. An unofficial client that sends quickly is a client that gets noticed.
metaNot applicable yet. Meta tiers throughput by quality rating and messaging limit tier.

Exceeding throughput does not fail a send. Messages queue and are dispatched in priority order, which is what the message category controls.

The QR safety limit

A platform policy, not a WhatsApp guarantee

A QR channel may send 200 outbound messages per rolling 24-hour window. Exceeding it is refused with QR_SAFETY_LIMIT_REACHED.

This number was chosen to be conservative. Staying under it does not make an account safe: WhatsApp's policies restrict unauthorised clients regardless of volume, and an account linked this way can be restricted at any time. Migrate to an official channel before volume matters.

  • The window is rolling, counted over the outbound messages actually sent, not a calendar day that resets at midnight.
  • It can be lowered per workspace or per channel, never raised without an explicit platform decision.
  • A separate limit caps messages to any one recipient at 6 per minute.
  • Marketing traffic is dispatched at the lowest priority, so it is the first thing a saturated channel delays.

Payload limits

LimitValue
Text message body (characters)4 096
Template body (characters)1 024
Contact import file (decoded)5 MiB
Contact import rows50 000
List page size100
Idempotency-Key (characters)255

Prices

The limits above are real and published. Prices are not decided yet, and the pricing page says so rather than showing a number nobody has agreed.