# SMS metrics

The **Metrics** page in the Bird dashboard is where you see how your SMS is doing: how much of it reached the handset, whether your failure rate is drifting toward trouble, how many segments you're sending, and what it's costing you. This guide walks through that page: what each number means and when to act on it.

Metrics are the aggregate view across everything your workspace sends. For the lifecycle of a single message (did _this_ number receive it), see the [SMS log](/docs/guides/sms/sms-log) and [events](/docs/guides/sms/events).

## Read your metrics

The [**Metrics**](https://bird.com/dashboard/w/sms/metrics) page lives at **SMS → Metrics** in the Bird dashboard. Every number respects the range picker in the top right (last 24 hours, 7, 30, or 90 days), and the numbers update as new sends and delivery receipts arrive.

Rates are computed against **event time, not send time**: a delivery receipt that arrives today for a message accepted yesterday lands in today's numbers. `accepted` is the denominator for both rate cards; it's the count of messages Bird admitted in the range, and every rate is measured against it.

![The SMS Metrics page in the Bird dashboard: the delivery-rate (Healthy, 97%), failure-rate (2.58% of a 5% limit), accepted-volume, and segments-and-spend summary tiles above the delivery-over-time chart](/images/docs/dashboard-sms-metrics.png)

### The summary tiles

The row of tiles at the top is your at-a-glance health check:

- **Delivery rate**: delivered messages as a share of accepted. Bird marks it Healthy above **95%**; at or below that, something is failing to reach handsets (bad numbers, blocked content, or routing problems) and the [failure breakdown](#failure-rate-and-its-causes) tells you which. The tile also shows the change versus the previous period.
- **Failure rate**: the share of accepted messages that ended `undelivered`, `failed`, or `expired`. The tile shows your rate against a **5% limit** with a progress bar; reaching it flips the tile to Risk. A sustained high failure rate usually means list-quality or content problems.
- **Accepted**: the raw count of messages accepted in the range, with the number handed on to carriers (`sent`) and the change versus the previous period.
- **Segments**: the total billable [segments](/docs/guides/sms/sending-sms#segments-and-encoding) sent and the spend behind them, with the change versus the previous period. Because a message can be several segments, this is usually higher than your accepted count; a gap that widens means longer messages or a shift to the UCS-2 encoding.

The 95% and 5% thresholds are the guardrails Bird uses to color the tiles. They're deliberately conservative; a tile can read Healthy and still have room to improve.

### Delivery over time

The delivery chart plots **accepted**, **delivered**, and **failed** volume across the range so you can spot trends and one-off spikes: a bad campaign, a number-list import gone wrong, a route that degraded. The `failed` series here rolls up every non-delivery outcome (undelivered, failed, and expired) into one line. The bucket size follows the range (hourly for 24 hours, daily for longer windows).

### Failure rate and its causes

Below the delivery chart, the Metrics page plots the per-bucket failure rate across the range, and an outcome histogram breaks your non-deliveries down by cause, so a rising failure rate points you at the fix:

- **Undelivered**: a non-permanent non-delivery. The handset was off or unreachable.
- **Failed**: a permanent failure; the message will not be delivered.
- **Expired**: the message's validity window elapsed before a delivery receipt arrived.
- **Rejected**: the message was refused (a policy check, a failed charge, or a carrier that turned it away) rather than attempted and lost.

Each bucket shows its count, and all but `rejected` show their share of accepted messages. When reconciling the numbers: the **Failure rate** tile counts `undelivered`, `failed`, and `expired`, while `rejected` is shown in this histogram but sits outside the failure-rate math. A rejected message was refused rather than lost in delivery, so it's tracked separately from delivery failures.

### Delivery latency

The latency table shows how long messages take to move through the pipeline, split into **Processing** (Bird accepting the message and handing it to a carrier), **Delivery** (the carrier delivering to the handset), and **Total** (end to end), each at the p50, p95, and p99 percentiles. Use p95/p99 to catch the slow tail; a healthy median with a slow p99 usually points at one carrier or destination lagging. Latency is a whole-window figure, and a percentile with no data for the range shows a dash.

![The lower half of the SMS Metrics page in the Bird dashboard: the failure outcome histogram (undelivered, failed, expired, and rejected counts) above the delivery-latency table, with p50, p95, and p99 columns for the processing, delivery, and total stages](/images/docs/dashboard-sms-metrics-failures.png)

## Programmatic access

The metrics on this page are a dashboard surface; aggregate SMS statistics are not part of the public API today. To build your own reporting, consume [webhook events](/docs/guides/sms/events) as they happen, or page through [`GET /v1/sms/messages`](/docs/api/reference/list-sms-messages), whose filters (status, category, tag, time window) cover most reconciliation jobs.

## Next steps

- [SMS log](/docs/guides/sms/sms-log): the per-message view behind the aggregate numbers
- [Events](/docs/guides/sms/events): the per-message event stream the metrics are derived from
- [Sending SMS](/docs/guides/sms/sending-sms): categories, tags, and the segment model behind segment and spend counts