Usage and Meta costs

Plan usage and overage, Meta's per-message fees estimated at cost and reconciled with Meta, spend budgets, and every metric's definition.

Two different bills, kept apart everywhere:

  • Wabi's plan: messages (every inbound and outbound message; the sandbox is free) and AI replies, with overage on paid plans ($1 per 1,000 messages, $0.02 per AI reply) up to a monthly budget cap. See pricing.
  • Meta's per-message fees, billed by Meta to your WhatsApp Business Account. Wabi estimates them at cost, shows Meta's actual charges next to the estimates, and never bills or marks them up.

Plan usage

get_usage returns messages and AI replies against the allowance with a month-end forecast, overage so far against the budget cap, whether sends are stopped, and message volume by day, country and failure code. Free stops at its allowance; paid plans bill overage until the cap (default twice the plan price; set_budget_cap), then stop non-critical sends. Owners and admins get an email at 80 % and 100 % of the allowance and of the cap.

npx @meterapp/wabi get_usage

Meta's fees

Meta charges per delivered message, by the recipient's market (a country, or a region such as “Rest of Africa”), the message's category (marketing, utility, authentication, service) and, for utility and authentication, the month's volume tier. Service replies, and utility templates delivered inside an open 24-hour customer service window, are free.

  • Estimates: every delivered outbound message is priced once, from Meta's published rate card in force that day (the current card took effect 2026-10-01; Meta's pricing page). An estimate keeps the rate it used; a new card only changes later messages.
  • Actuals: Meta's pricing analytics for each live account and day, reconciled against the estimates: pending until Meta reports, reconciled within 2 % or 1 cent, or flagged as a discrepancy with where it differs.

get_costs breaks spend down by day, category, template, country, account, campaign and agent, with cost per delivered message and the month-end forecast. get_meta_rates gives a market's rates before you send:

npx @meterapp/wabi get_costs --days 30npx @meterapp/wabi get_meta_rates --country BR

Spend budgets

Admins can set monthly budgets on estimated Meta spend for the organization, one account or one campaign (set_spend_budget), with alert emails at chosen thresholds (default 50, 80 and 100 %) and an optional hard stop: marketing and bulk sends from that scope are refused at 100 %, while authentication, utility and replies always go out.

Analytics and metrics

The dashboard's Overview and Analytics pages read get_overview, get_usage, get_costs and get_analytics, so an agent sees exactly the same numbers. Each comes with its definition; the main ones:

MetricDefinition
Needs replyOpen conversations whose turn state is customer_waiting, acknowledged or escalated: at least one customer turn without a substantive business answer or an explicit disposition.
Expiring windowsOpen conversations whose 24-hour customer service window (last inbound + 24 h) closes within the warning threshold (default 2 hours).
First response timeFor conversations created in the range: first reply by a person or an AI agent (sender user or agent) minus the first inbound message. Campaign, workflow and system messages do not count. p50 and p90 in seconds.
Resolution timeFor conversations resolved in the range: resolved_at minus created_at, p50 and p90 in seconds.
AI-contained resolutionAI agent sessions on WhatsApp that ended in the range with resolution resolved and whose conversation was never reopened, divided by all AI sessions that ended in the range. Sessions ended in the last 72 hours are provisional (the reopen window is still open).
Escalation rateAI sessions that ended escalated or handed off to a person, divided by AI sessions that ended in the range.
Reopen rateConversations resolved in the range that were reopened at least once, divided by conversations resolved in the range.
Estimated costProvisional Meta fees: one estimate per delivered outbound message, priced from Meta's published rate card in force that day (market, category, volume tier); 0 when Meta does not charge it (service, utility inside an open window, free entry points). Never recomputed with later prices.
Reconciled costMeta's actual charges from its pricing analytics, per account and UTC day, next to the estimate for the same day. pending until Meta reports, discrepancy when they differ by more than 2 % or 1 cent.

get_analytics also returns optimization hints with their numbers: billed templates sent while the customer's window was open (a free-form reply would have been free), utility messages billed outside the window, expensive destinations, duplicate notifications, failure patterns and template languages read far less than the rest.