Skip to main content
The published Meta / WhatsApp Business Platform per-message rate for a single market + currency + category — the list price Meta charges per delivered message. This is Meta’s public rate card exposed as reference data; it is not your account’s real billing.

Endpoint

GET https://pilotstatus.com.br/v1/meta/pricing
Requires any valid API key (ps_*) in the x-api-key header. Both number-scoped and tenant-scoped keys work — pricing is global reference data, not tied to a number.

Query parameters

string
Market code: ISO 3166-1 alpha-2 for countries (BR, GB, IN…), NAM for North America, or a region bucket (AFR, APAC, CEEU, LATAM, MDE, WEU, GLO).
string
ISO 4217 currency code (USD, BRL, EUR, GBP, INR…).
string
marketing, utility, authentication, service or authentication_international. Required together with market and currency.
boolean
true / 1 → also return volumeTiers (Meta charges a lower price per message as monthly volume grows).

Modes

Examples

Price (200)
With volume tiers (200)
Metadata (200)

Response fields

string
Market code echoed back.
string
Human-readable market name.
string
ISO 4217 currency echoed back.
string
The requested category.
number
List price per delivered message in the requested currency.⚠️ It answers 0 for Service until 2026-09-30 and stops doing so after that — see the warning below. Read it; do not hard-code which categories are free.
array
Only when tiers=1. Each { from, to, pricePerMessage } — the price drops as monthly volume grows; to is null on the unbounded top tier. Empty for categories without volume tiering (Marketing / Service).

Message categories

Meta only changes prices on the 1st day of each quarter (≈1 month notice), so this rate card is refreshed on a schedule. Treat the values as indicative and confirm against Meta’s official rate cards for exact billing.

⚠️ From 1 October 2026, Service stops being free

Meta changes its billing on that date, and it is the most consequential change on this page: ⛔ The allowance is per NUMBER, not per WABA. Each number has its own 1,000 — putting several customers on one WhatsApp account does not make them share an allowance. 1:1 and group conversations draw on the same per-number allowance. ⚠️ With no payment method on file at Meta, delivery stops past the 1,000. Not silent degradation: the messages stop going out. ⇒ What this means for anyone reading this route: pricePerMessage for service answers 0 today and will stop answering 0. An integration that treats “service is always free” as a constant will start undercounting cost. Read the value instead of assuming it — that is what it is returned for. 📌 For the exact amount billed on one specific message, do not reconstruct it from this card: read metaPricing on GET /v1/messages/{messageId}, or the pricing block on that message’s delivery status in your webhook. pricing.type separates free_customer_service (inside the allowance) from regular (billed), and it is Meta’s own verdict.

There is no validity date in the response — and why

The response carries no effectiveFrom / effectiveTo. There is no field telling you which quarter a price belongs to or when it stops applying, so you cannot tell from this response alone whether you are holding the current table.The reason is upstream: the published rate card we mirror (whatsappbusiness.com) states the prices, not the dates they took effect. Emitting an effectiveFrom would mean inventing one.
Until that is exposed, pin the moment yourself: record the date you read each price alongside the value, and re-read the card early in each quarter (Meta changes prices only on the 1st of a quarter). If you need the exact figure Meta billed for a specific message, do not reconstruct it from this table at all — read pricing.category and pricing.type straight off that message’s delivery status in the Meta native webhook envelope. That is Meta’s own verdict for that message, including whether it was charged.
The response carries the AGE of the price. fetchedAt says when we last pulled the published card, and source says where from. It is not an effective date — and there is none to give, for the reason above — but it answers the practical question: am I using the current quarter’s card?

Common errors

  • 400 MARKET_CURRENCY_CATEGORY_REQUIRED — provide market, currency and category together (or none, for metadata).
  • 400 INVALID_CATEGORY — the category value is not one of the five valid categories.
  • 401 — missing or invalid x-api-key header.
  • 404 PRICE_NOT_FOUND — no published rate for that market + currency + category.