Categories
Meta prices each delivered message by its category and the contact’s country:
Free-form messages (
type: text, media, interactive and so on) are service. A template uses the category on the template.
Inbound messages are free. Since 1 October 2026, each number gets 1,000 free service messages a month, and Meta charges for replies after that. See Service messages from 1 October 2026.
Meta’s rates
Meta publishes its full rate card, by category and country, at WhatsApp pricing. That page is the authority. Meta revises its rates, and it bills you in your WhatsApp Business Account’s currency. For a sense of scale, these are Meta’s India rates in US dollars as LazyApp loads them:
Check Meta’s page, or the rate table API below, before you quote a price to anyone. Usage in the console shows the rates LazyApp has on file and what each number sent.
Rate table API
billing:read. Filter with category, region and currency. Cursor-paginated.
Each row carries Meta’s rate as meta_rate. lazyapp_charge is the same figure, because LazyApp adds nothing. Without currency, each market comes back in billing_currency where Meta publishes a rate in it, and in USD otherwise.
When Meta bills a different category
Every status update from Meta carries apricing object: whether the message is billable, and the category Meta charged. LazyApp records the category Meta reports, so your usage matches Meta’s invoice:
When LazyApp has no rate for Meta’s category, it keeps the original row and logs it.
Volume tiers
Meta makes utility and authentication messages cheaper as you send more in a month. Meta counts per market and category, and only charged messages count. Message number N pays the rate of the tier that contains N, so once you cross a tier, every later message that month pays the lower rate. Marketing and service messages have no tiers. The tier is on each usage row (volume_tier), and Usage in the console tells you when you reach a new tier.
billing:read
tier is the first and last message of the tier for the month (MAX for the top tier). meta_rate is Meta’s rate in that tier.
Authentication-international rates
Businesses in some countries, India among them, pay a higher authentication rate for one-time passcodes sent to contacts in other countries. Meta tells LazyApp when your WhatsApp account becomes eligible and from when. Usage shows it, and so doesGET /v1/pricing/account.
Pricing facts for your account
billing:read. Without refresh=true, LazyApp answers from what Meta last sent it, without calling Meta.
volume_tiers lists the tiers Meta reported for this month.
Changing your WhatsApp billing currency
Meta bills your WhatsApp Business Account in its own currency. To change it, Meta copies your WhatsApp account into a new one in the new currency. Templates are copied, then the numbers move. In the console, open Phone numbers → your number → Advanced → Billing currency. Over the API:Regions
LazyApp infers the contact’s country from the E.164 dialling prefix, longest match first, for example91 for India and 1 for North America. A prefix LazyApp does not know falls back to a default region.
Messaging analytics
Workspace counts by status, category and direction for the last N days, up to 90:messages:read
Calls
WhatsApp Calling is a capability on the connection. Business-initiated calls are subject to Meta’s calling policies and Meta’s per-minute fees by destination country. Meta blocks business-initiated calls in some countries while inbound calls may still work. LazyApp does not publish its own calling rate card. Use Meta’s calling documentation for destination fees, and confirm calling is enabled withGET /v1/capabilities before you build around it.