Throughput
Each business phone number can send up to 80 messages per second by default (combined inbound and outbound across text, media, and template messages). Higher capacity is available through Meta on request.
Throughput is per phone number, not per portfolio — adding more numbers under the same WABA is one way to scale total send rate.
API Rate Limits
Two layers of rate limiting apply at the Graph API level:
App-level call limits
Calls your app makes against a WABA count toward an app-level request budget over a rolling one-hour window:
| WABA state | Default limit (per app, per WABA) |
|---|---|
| New WABA, no registered phone number | 200 requests / hour |
| Active WABA with at least one registered phone number | 5,000 requests / hour |
These limits apply to management endpoints such as /<WABA_ID>, /<WABA_ID>/phone_numbers, /<WABA_ID>/message_templates, /<WABA_ID>/subscribed_apps, and /<WABA_ID>/assigned_users.
Runtime symptoms
Rate limiting can also occur even when your account is healthy. Two common runtime modes:
- Request-rate limit — returns
429when request-per-second thresholds are exceeded. - Concurrent-load limit — returns
503when upstream systems are temporarily overloaded.
If either appears:
- Slow down request pace immediately.
- Use queue-based traffic shaping.
- Retry with exponential backoff and jitter.
For error code details, see Meta API Error Reference.
Pair Rate Limit (Per Recipient)
Independent of throughput, a single business phone number can only send 1 message every 6 seconds to the same WhatsApp user (≈10 messages/minute, 600/hour per pair). Exceeding this returns error 131056 until the pair is back within the allowed rate.
Bursting is allowed: up to 45 messages in a 6-second burst to the same user, but each burst "borrows" from future quota — after a burst of 20, you must wait roughly 2 minutes before sending more to that recipient.
Recommended retry on 131056: back off 4^X seconds (start with X=0, increment on each repeated failure) until the send succeeds.
Messaging Limits (Portfolio-Level)
Messaging limits define how many unique users your business can message outside the customer service window in a rolling 24-hour period.
Limits are shared at the Meta Business Portfolio level — all numbers in the same portfolio consume the same messaging pool.
Typical tiers:
| Tier | Unique users / 24h |
|---|---|
TIER_250 | 250 |
TIER_2K | 2,000 |
TIER_10K | 10,000 |
TIER_100K | 100,000 |
UNLIMITED | No cap |
Important: User-initiated conversations are not counted toward this limit. Limits only apply to business-initiated outreach outside the service window.
Legacy vs Current Limit Fields
Meta shifted to portfolio-level limit handling on October 7, 2025. Some older limit-related fields were gradually phased out after that date.
| Field | Status |
|---|---|
whatsapp_business_manager_messaging_limit | Current (portfolio-level) |
messaging_limit_tier | Legacy (per-number) |
current_limit | Used in some webhook events |
Dualhook prefers current portfolio-level fields when present and keeps compatibility with legacy fields for backward support.
Increasing Limits
Limit growth happens in stages:
- Scale from
250to2,000 - Scale from
2,000upward (10K,100K,UNLIMITED)
Common qualification factors:
- Business verification path completion
- Consistent high-quality messaging
- Sufficient recent usage of current limit
After eligibility is met, upgrades are often applied automatically within a few hours.
Automatic Scaling Beyond 2,000
Meta evaluates:
- Message quality across numbers and templates
- Utilization of current limit over the last 7 days
If criteria are satisfied, the portfolio moves up one tier automatically.
Quality Rating
Quality is based on recent user feedback signals, weighted by recency:
- Blocks
- Reports
- Read/engagement behavior
- Negative feedback patterns
When quality degrades:
- Upgrade eligibility can be delayed
- Sending restrictions can appear
- Health may move from
AVAILABLEtoLIMITEDorBLOCKED(see Health Monitoring)
Template Quality States
Template-level quality is tracked separately from number-level health.
| State | Meaning |
|---|---|
ACTIVE - QUALITY_PENDING | Not enough data to rate |
ACTIVE - HIGH QUALITY | Strong user satisfaction |
ACTIVE - MEDIUM QUALITY | Early dissatisfaction signals |
ACTIVE - LOW QUALITY | High dissatisfaction risk |
Low template quality can lead to pauses or disablement even if account-level access is still active.
Check Current Status
curl -X GET "https://graph.facebook.com/<GRAPH_VERSION>/<PHONE_NUMBER_ID>?fields=health_status,quality_rating,whatsapp_business_manager_messaging_limit,messaging_limit_tier" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
{
"id": "<PHONE_NUMBER_ID>",
"health_status": {
"can_send_message": "AVAILABLE",
"entities": []
},
"quality_rating": "GREEN",
"whatsapp_business_manager_messaging_limit": "TIER_10K",
"messaging_limit_tier": "TIER_10K"
}
Webhook Signals to Monitor
Dualhook surfaces management events for operations monitoring. See Webhook Events for the complete event list.
phone_number_quality_update
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WABA_ID>",
"changes": [
{
"field": "phone_number_quality_update",
"value": {
"event": "QUALITY_UPDATED",
"phone_number_id": "<PHONE_NUMBER_ID>",
"display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
"current_limit": "TIER_2K",
"current_quality_rating": "YELLOW",
"previous_quality_rating": "GREEN"
}
}
]
}
]
}
business_capability_update
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WABA_ID>",
"changes": [
{
"field": "business_capability_update",
"value": {
"event": "increased_capabilities_eligibility_deferred"
}
}
]
}
]
}
Monitoring Locations
Use both product and Meta surfaces:
- Dualhook dashboard — webhook-driven health and limit/quality signals
- WhatsApp Manager — Messaging Limits and account insights
- Meta Account Quality —
business.facebook.com/accountquality
Operational Playbook
If quality drops or limit upgrades stall:
- Reduce promotional volume and tighten audience targeting.
- Send only to recently opted-in users.
- Improve template relevance and frequency control.
- Monitor blocks/reports daily and pause weak campaigns quickly.
- Resume scale gradually only after sustained quality recovery.
For a comprehensive health maintenance strategy, see Maintain Account Health.