Ledger entryNo. 885511
Business Use Case Rate Limit(BUC)
Also called: BUC rate limit · X-Business-Use-Case-Usage · WABA rate limit · WhatsApp Business Management API rate limit
- Graph API & SDKs
- Expert
- Developers
- Definition
- Meta's hourly per-app, per-WABA quota on WhatsApp Business Management API calls, reported in the X-Business-Use-Case-Usage response header.
Graph API & SDKs
Mode · gauge
Work it out
Watch one WABA's hourly budget fill up
- Normal0–75%
- Defer background jobs75–90%
- Pause or throttled90–100%
Number registered
4%
With a registered number the WABA is active and the budget is 5,000 an hour, so the same 200 calls are 4%.
Number registered: 4% — Normal zone. With a registered number the WABA is active and the budget is 5,000 an hour, so the same 200 calls are 4%.
What is the business use case rate limit?
A business use case (BUC) rate limit is a Graph API quota counted against a business asset rather than against an app as a whole. For WhatsApp the asset is the WhatsApp Business Account (WABA): Meta counts the requests your app makes on each WABA over a rolling one-hour window. On the WhatsApp Business Management API endpoints (GET /{WABA_ID}, /{WABA_ID}/phone_numbers, /{WABA_ID}/message_templates, /{WABA_ID}/subscribed_apps and /{WABA_ID}/assigned_users) an app may make 200 requests an hour per WABA by default. Once the WABA is active, with at least one registered phone number, that becomes 5,000 requests an hour per app. The Credit Line API endpoints have their own 5,000-an-hour budget.
Unlike the BUC limits for ads or Pages, which Meta derives from formulas, the WhatsApp budgets are fixed counts. Usage is reported on responses in the X-Business-Use-Case-Usage header: a JSON string keyed by the business object's ID, holding objects with type, call_count, total_cputime and total_time (each a percentage of the allowance used) and estimated_time_to_regain_access (minutes until throttled calls work again). When the budget runs out, management calls fail: Meta's rate-limiting reference lists error 80008 for the WhatsApp Business Management API, and WhatsApp's error reference uses 80007 for a WABA that has reached its rate limit. Calls made with system user tokens are measured by BUC logic rather than by the app-level limit that reports in X-App-Usage and returns error 4.
The most common confusion is with throughput. Sending a message with POST /{PHONE_NUMBER_ID}/messages is governed by the number's throughput (up to 80 messages per second by default, error 130429), the pair rate limit and the portfolio's messaging limits, not by this hourly management quota. The BUC limit is what stops a template-sync job or an onboarding script that calls too often, while message sends keep flowing. Because the count is per app per WABA, a partner managing 300 customer WABAs has 300 separate budgets, and Graph API batch requests do not stretch them: every operation in a batch counts as one call.
Key takeaways
- The business use case (BUC) rate limit counts the WhatsApp management calls each app makes on each WABA over a rolling hour.
- The budget is 200 requests an hour per app per WABA by default, and 5,000 once the WABA has at least one registered phone number.
- The
X-Business-Use-Case-Usageheader reports usage as percentages and, when throttled, minutes until access returns. - Hitting the limit returns error 80008 (or 80007, the WABA-level code in WhatsApp's error reference); stop calling until the window recovers.
- Message sends are not part of it:
/messagesis governed by throughput and messaging limits, not by this management quota.
The figures
The business use case rate limit: key facts and limits
- Counted per
- App, per WABA, over a rolling hour
- Default budget
- 200 requests an hour
- Active WABA (registered number)
- 5,000 requests an hour
- Credit Line API
- 5,000 requests an hour
- Usage header
- X-Business-Use-Case-Usage (percentages + minutes to regain access)
- Limit errors
- 80008 (BUC reference) · 80007 (WABA rate limit)
- Template creation cap
- Also at most 100 new templates per WABA an hour
- Not counted here
- Message sends — see throughput (80 mps default)
How does the business use case rate limit work?
Know which calls count
The WABA node and its
phone_numbers,message_templates,subscribed_appsandassigned_usersedges count against the per-WABA budget; the Credit Line API has its own. Message sends do not.Know the budget for each WABA
200 requests an hour per app per WABA until a phone number is registered, 5,000 after. Track which of your WABAs are active, because the same script costs very different shares of each.
Read the usage header
Parse
X-Business-Use-Case-Usageon every response, find the entry for the WABA you called, and take the highest ofcall_count,total_cputimeandtotal_timeas your usage.Slow down before 100%
Set your own thresholds, for example deferring background syncs at 75% and pausing all non-urgent calls at 90%, so interactive actions such as creating a template still have room.
Stop and wait when throttled
On 80008 or 80007, stop calling that WABA and wait for
estimated_time_to_regain_accessminutes. Meta's guidance is to stop making calls once the limit is reached, so immediate retries only prolong the problem.Replace polling with webhooks
Subscribe to template status, template quality and phone number quality webhooks so changes arrive as events, instead of fetching every template on a timer.
In code
The business use case rate limit in code
HTTP/1.1 200 OKContent-Type: application/jsonX-Business-Use-Case-Usage: {"102290129340398":[{"type":"{rate-limit-type}","call_count":48,"total_cputime":9,"total_time":12,"estimated_time_to_regain_access":0}]}
Keyed by the business object ID. The three usage fields are percentages of the allowance; the last is minutes until throttled calls work again (0 when not throttled).
Example: An Indore Tech Provider's onboarding script runs dry
An Indore Tech Provider onboards a new restaurant chain whose WABA has no registered number yet. Its setup script creates 40 templates and, after each one, lists all templates again to show progress, roughly 80 calls before anything else runs. Add phone number lookups, webhook subscription checks and a dashboard refreshing every 30 seconds, and the header's call_count reaches 100 within the hour: the next template creation fails with 80008 and the header says access returns in 34 minutes. The fix has three parts. The script registers the number first, which lifts the WABA to the 5,000 budget. Progress now comes from the template status webhook instead of re-listing. And the client pauses background calls once usage passes 80%. The next onboarding uses about 60 calls in total.
Costly mistakes
Common mistakes with the business use case rate limit
Polling instead of listening
Fetching every template or number on a timer spends the budget on calls that usually return nothing new. Subscribe to the template status and phone number quality webhooks and fetch only when an event says something changed.
Confusing it with throughput
Slowing message sends will not clear an 80008, and pacing management calls will not fix a 130429. Identify the error code and endpoint first, then apply the matching limit.
Retrying straight away
Calls made while throttled fail and delay recovery. Pause that WABA for the
estimated_time_to_regain_accessminutes the header gives, then resume gradually.Forgetting new WABAs get 200, not 5,000
Onboarding work happens before the number is registered, exactly when the budget is smallest. Register the number early and keep pre-registration scripts lean.
Expecting batches to save quota
A batch of 50 operations costs 50 calls. Batching saves round trips, not budget, so the header climbs just as fast.
Why does the business use case rate limit matter?
Management calls are where partners and large brands quietly overspend their quota: a dashboard that polls every template every minute, an onboarding script that lists phone numbers after each step, a health check on a timer. On a new WABA with no registered number, 200 calls disappear quickly, and then template creation fails just as a campaign is about to launch. Reading the usage header and replacing polling with webhooks keeps the budget for the calls that matter and makes throttling a planned slowdown instead of an outage.
Best practices for the business use case rate limit
- Chart
buc_usage_pctper WABA and alert at 75%, long before calls start failing. - Give interactive actions (creating a template, connecting a number) priority over background syncs when usage is high.
- Cache WABA and phone number details for minutes, not seconds; they rarely change and webhooks report the important changes.
- Spread nightly jobs across the hour instead of firing them all at minute zero.
BUC FAQs
- What is the rate limit for the WhatsApp Business Management API?
- 200 requests an hour per app per WABA by default, rising to 5,000 once the WABA has at least one registered phone number. The window is a rolling hour, and the Credit Line API endpoints have their own 5,000 budget.
- What does the X-Business-Use-Case-Usage header mean?
- It reports how much of a business use case budget your app has used. Each entry, keyed by the business object ID, gives call_count, total_cputime and total_time as percentages, plus estimated_time_to_regain_access in minutes when you are throttled.
- What does WhatsApp error 80008 mean?
- Your app has reached the business use case rate limit for the WhatsApp Business Management API on that account. Stop calling it, wait for the time the usage header gives, and reduce polling before resuming.
- Does the BUC rate limit affect sending WhatsApp messages?
- No. Message sends are governed by throughput (80 messages per second per number by default), the pair rate limit and messaging limits. The BUC limit applies to management calls such as templates, phone numbers and subscribed apps.
Put BUC to work
InfiQ is an official Meta Business Partner. Start a 7-day free trial — no card needed — and see this running on your own number.