---
title: "WhatsApp spend"
method: GET
path: "/api/v1/channels/{id}/whatsapp-spend"
tags: ["channels"]
---

# WhatsApp spend

`GET /api/v1/channels/{id}/whatsapp-spend`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/channels/{id}/whatsapp-spend`
- Auth: HTTP bearer

What Meta billed the business for WhatsApp on one channel, by category and country, in Meta's currency.

Meta bills the business directly for WhatsApp; Blueticked never resells or meters it. This is Meta's own pricing analytics for the channel's WhatsApp Business Account, so `currency` is the currency Meta bills in, and the figures are approximate until Meta's billing settles.

`days` is a whole number from 1 to 90 (default 30); the window ends now. Anything else is 400 validation_failed.

`cost` is what Meta charged: 0 for free messages (a customer-service reply, for one), and null only where Meta reports messages without a cost. Lines are ordered by cost, highest first.

An id that is not a UUID is 400 validation_failed. A channel that is not WhatsApp is 400 validation_failed with `details.reason` "not_whatsapp_channel"; one with no Meta connection, or whose token Meta refuses, is 503 channel_unavailable ("whatsapp_token_missing": reconnect it, retrying will not help). When Meta fails or cannot be reached the answer is 502 provider_error or 503 service_unavailable ("meta_unavailable"), never an empty spend.

Each channel can be read 30 times a minute, whichever key asks; a key confined to other businesses gets 404 not_found, as for another workspace's channel.

## Path parameters

- `id` string, required

## Query parameters

- `days` integer

## Response `200`

Success

- object
  - `channel_id` string, uuid, required
  - `window` object, required
    - `days` number, required
    - `start` string, required
    - `end` string, required
  - `currency` string, nullable, required
  - `totals` object, required
    - `messages` number, required
    - `cost` number, nullable, required
  - `by_category` object[], required
    - `category` string, required
    - `messages` number, required
    - `cost` number, nullable, required
  - `by_country` object[], required
    - `country` string, required
    - `messages` number, required
    - `cost` number, nullable, required
  - `source` 'meta_pricing_analytics', required
  - `approximate` true, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
