---
title: "Calling usage and cost"
method: GET
path: "/v1/usage/calls"
tags: ["Usage"]
---

# Calling usage and cost

`GET /v1/usage/calls`

Aggregated calling usage across your numbers, both channels
(WhatsApp Business Calling + regular phone/PSTN): call counts,
answered counts, minutes, and cost. Use it for cost visibility or to
rebill your own customers per number.

Costs come from each call's billing snapshot, so this endpoint always
agrees with the invoice: `billableUSD` is what Zernio bills;
`metaUSD` is the WhatsApp per-minute charge Meta bills directly to
your WABA (display only, never billed by Zernio).

Optional `groupBy` returns a breakdown by UTC day, by your number, or
by channel. Defaults to the last 30 days.

## Query parameters

- `since` string, date-time
- `until` string, date-time
- `channel` 'whatsapp' | 'pstn'
- `number` string
- `groupBy` 'day' | 'number' | 'channel'

## Response `200`

Usage totals (+ breakdown when groupBy is set).

- object
  - `since` string, date-time
  - `until` string, date-time
  - `groupBy` 'day' | 'number' | 'channel' | 'null', nullable
  - `totals` object
    - `calls` integer
    - `answered` integer
    - `minutes` number
    - `billableUSD` number — What Zernio bills for these calls.
    - `metaUSD` number — WhatsApp only: Meta's per-minute charge, billed by Meta directly to your WABA. Display only.
  - `groups` object[] — Present (possibly empty) when `groupBy` is set.
    - `key` string — The group key: a `YYYY-MM-DD` UTC day, one of your numbers, or a channel.
    - `calls` integer
    - `answered` integer
    - `minutes` number
    - `billableUSD` number
    - `metaUSD` number

## Other responses

- `400` — since must be before until
- `401` — Unauthorized

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/versions/f81ca70ea6b9/schema)
