In short
- One public endpoint, no authentication:
GET /v1/pricing. - Returns plans, per-channel prices, the official WhatsApp software fee, and the table by country and category.
- Includes
updatedAt, the date the prices took effect.
Request
NoAuthorization, no workspace, no special header.
Response (200)
Abbreviated example with illustrative values. In the real response,plans, skus, and rates come complete (the country table has over a thousand rows).
Fields
credits is what comes out of the plan; paygCents is what comes out of the BRL balance. To convert credits to BRL, multiply by creditValueCents and divide by 100.rates is still useful on the default path for one thing: knowing whether the destination accepts the category. Availability applies in both models.A row with
available: false is a destination Meta does not accept in that category. The reason comes in unavailableReason, and the send is refused with 400 DESTINATION_NOT_AVAILABLE. See Official WhatsApp by country.Cache and usage limit
The response is the same for everyone and changes at most once a day, so it’s worth caching:Cache-Control: public, max-age=300, stale-while-revalidate=3600- Content-based
ETag, and 304 when you send the same value back inIf-None-Match Access-Control-Allow-Origin: *, so you can call it straight from the browser
Next steps
- Official WhatsApp by country: software fee, country, and category
- Billing: credits, plans, and pay-as-you-go
- Error responses: HTTP codes and
code

