> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lazyapp.in/llms.txt
> Use this file to discover all available pages before exploring further.

# WhatsApp message rates

> The categories Meta prices, where to find Meta's rates, volume tiers, and the pricing API.

Meta sets the price of every WhatsApp message and bills it to your WhatsApp Business Account. LazyApp adds 0%, so the rate on this page is the rate you pay. See [Meta message billing](https://docs.lazyapp.in/billing/meta-message-billing.md) for how Meta bills you.

## Categories

Meta prices each delivered message by its **category** and the contact's country:

| Category | Typical use | Who usually starts it |
| - | - | - |
| **Service** | Free-form replies inside the 24-hour [customer service window](https://docs.lazyapp.in/concepts/glossary.md#customer-service-window) | Contact (then you reply) |
| **Utility** | Order updates, reminders, account notices (approved templates) | Business |
| **Authentication** | OTPs and login codes (approved templates) | Business |
| **Marketing** | Offers, promotions, broadcasts (approved templates) | Business |

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](https://docs.lazyapp.in/billing/meta-message-billing.md#service-messages-from-1-october-2026).

## Meta's rates

Meta publishes its full rate card, by category and country, at [WhatsApp pricing](https://developers.facebook.com/docs/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:

| Category | Meta's rate per message, India |
| - | - |
| Marketing | \$0.0113 |
| Utility | \$0.0016 |
| Authentication | \$0.0013 |
| Service (after the free 1,000) | \$0.0031 |

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

```bash theme={null}
curl "https://lazyapp.in/v1/pricing/rates?category=marketing&region=INDIA" \
  -H "Authorization: Bearer $LAZYAPP_API_KEY"
```

**Scope:** `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 a `pricing` object: whether the message is billable, and the `category` Meta charged. LazyApp records the category Meta reports, so your usage matches Meta's invoice:

| Meta's `pricing.category` | What LazyApp records |
| - | - |
| Same as the send | The send as it was |
| Another category, e.g. a template Meta re-categorised from utility to marketing | Meta's category and rate. The usage row keeps both categories |
| `authentication_international` | The authentication-international rate, once that rate is loaded |
| `marketing_lite` | Marketing (Marketing Messages API) |
| `referral_conversion` | Free |
| `general_purpose_ai` | The AI-provider rate, once that rate is loaded |

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.

```bash theme={null}
curl "https://lazyapp.in/v1/pricing/tiers?category=utility&region=IN" \
  -H "Authorization: Bearer $LAZYAPP_API_KEY"
```

**Scope:** `billing:read`

```json theme={null}
{
  "billing_currency": "INR",
  "data": [
    { "category": "utility", "region": "IN", "currency": "USD", "tier": "1:100000", "meta_rate": "0.001100" }
  ]
}
```

`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 does `GET /v1/pricing/account`.

## Pricing facts for your account

```bash theme={null}
curl "https://lazyapp.in/v1/pricing/account?phone_number_id=106540352242922&refresh=true" \
  -H "Authorization: Bearer $LAZYAPP_API_KEY"
```

**Scope:** `billing:read`. Without `refresh=true`, LazyApp answers from what Meta last sent it, without calling Meta.

```json theme={null}
{
  "currency": "INR",
  "primary_business_location": "IN",
  "auth_international": {
    "kind": "auth_international",
    "country": "IN",
    "starts_at": "2026-11-01T00:00:00+00:00"
  },
  "volume_tiers": [
    { "kind": "volume_tier", "pricing_category": "utility", "region": "IN", "tier": "100001:1000000", "effective_month": "2026-10" }
  ],
  "waba_id": "102290129340398"
}
```

`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:

| Call | Scope | Does |
| - | - | - |
| `POST /v1/connections/{connection}/currency-migration` | `billing:write` | Starts the change. Pass `currency` (e.g. `USD`, `INR`, `EUR`) and, on a Meta credit line, `extended_credit_id`. Answers `202` |
| `GET /v1/connections/{connection}/currency-migration` | `billing:read` | The current `status`, from Meta |
| `POST /v1/connections/{connection}/currency-migration/complete` | `billing:write` | Finishes once the status is `READY_TO_COMPLETE`. LazyApp then moves the numbers to the new account |

```json theme={null}
{
  "migration": {
    "migration_id": "1234567890",
    "status": "READY_TO_COMPLETE",
    "currency": "USD",
    "destination_waba": { "id": "109876543210", "currency": "USD" }
  }
}
```

This changes only what Meta bills you in. Your LazyApp plan is always billed in INR.

## Regions

LazyApp infers the contact's country from the E.164 dialling prefix, longest match first, for example `91` 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:

```bash theme={null}
curl "https://lazyapp.in/v1/analytics/messaging?days=7" \
  -H "Authorization: Bearer $LAZYAPP_API_KEY"
```

**Scope:** `messages:read`

## Calls

WhatsApp Calling is a [capability](https://docs.lazyapp.in/concepts/capabilities.md) 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 with [`GET /v1/capabilities`](https://docs.lazyapp.in/concepts/capabilities) before you build around it.

## Conversation-based pricing

Before July 2025, Meta charged per 24-hour conversation, not per message. That model has ended. Meta now charges per message.

## Related

* [Pricing](https://docs.lazyapp.in/billing/overview.md)
* [Meta message billing](https://docs.lazyapp.in/billing/meta-message-billing.md)
* [Templates](https://docs.lazyapp.in/sending/templates.md)
* [WhatsApp analytics](https://docs.lazyapp.in/guides/whatsapp-analytics.md)
* [Platform usage](https://docs.lazyapp.in/platform/usage.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.