---
title: "Usage analytics"
description: "The Activity page of the pirouter console totals a workspace's tokens, spend, requests and duration by UTC time, model and API key, usually within minutes; requests are counted per attempt, so fallbacks raise the failed share."
canonical: "https://pirouter.ai/docs/guides/usage"
last-updated: "2026-10-17"
lang: "en"
source: "content/docs/en/guides/usage.mdx"
---

# Usage analytics

The Activity page of the pirouter console totals a workspace's tokens, spend, requests and duration by UTC time, model and API key, usually within minutes; requests are counted per attempt, so fallbacks raise the failed share.

To see which model or API key the money went to, open **Activity** in the console; to look at one request in detail, open [Request logs](https://pirouter.ai/docs/guides/logs.md).

## Open the Activity page

Click **Activity** in the sidebar of the [console](https://app.pirouter.ai). All times on the page are UTC.

Every member of the workspace can view the Activity page; there are no finer-grained roles. Each workspace sees only its own data.

![The Activity page for the last 7 days: token heatmap, the Tokens, Spend, Requests and Duration cards, and the trend stacked by model](/docs/shots/usage-overview.en.webp)

## Choose a time range

Pick a preset under **Time range** in the toolbar: **Today**, **24h**, **7d**, **30d** or **90d**. The default is **Today**. You can also pick a **Custom range** of up to 90 days that ends no later than today (UTC).

| Time range                                 | Chart buckets                                   |
| ------------------------------------------ | ----------------------------------------------- |
| **Today**                                  | UTC hours, from 00:00 today to the current hour |
| **24h**                                    | UTC hours, the last 24 tops of the hour         |
| **7d**, **30d**, **90d**, **Custom range** | UTC days                                        |

On an hourly chart the last bar is the current hour. It is still filling and is drawn hatched.

### How fresh the numbers are

**Data through HH:MM UTC** at the top right of the page is the moment the data actually covers.

Today's numbers refresh every 5 minutes, so a request usually shows up on the Activity page within a few minutes. **Data through** tells you exactly how far the data goes. Before the first refresh of the day, the page says "Today's usage is still syncing". That does not mean there were no requests.

While a period is not fully tallied yet, the page says "Your activity is still being tallied" and shows no figures at all, rather than a partial sum.

## Read the four cards

| Card         | Headline figure                                                       | Below it                                                                                                |
| ------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **Tokens**   | Input plus output tokens; cached input is counted once                | **In**, **Out**, **Cached**, and the **Hit** rate: cached input over all input                          |
| **Spend**    | What requests in the range cost, at the price in effect when each ran | Average spend **Per 1M tokens** and **Per request**                                                     |
| **Requests** | The number of requests                                                | **Succeeded** and **Failed**, and the failed share. Failed includes every request that did not complete |
| **Duration** | Time to first token plus generation time                              | **Avg first token** and **Avg generation**. The averages include failed requests                        |

Spend is in US dollars, shown with `$`. Amounts of $0.01 or more have two decimals; smaller amounts have 4 or 6.

> **Warning:** **Requests** counts attempts, not requests. When a request fails before the first byte and pirouter retries it on another deployment or model, each attempt is counted: the attempt that the next one replaced counts as one failure, at a cost of 0. So after failovers or fallbacks, the failed share is higher than a per-request failure rate would be. See [Model fallbacks](https://pirouter.ai/docs/guides/fallbacks.md#billing).

Requests the gateway refused before forwarding them (an invalid key or an insufficient balance, for example) are not counted and not charged; see [Requests that fail](https://pirouter.ai/docs/guides/billing.md#requests-that-fail).

## Read the trend and the rankings

- The **Trend** chart is stacked by model: your top 5 models each get a layer and the rest are grouped as **Other**. You can switch it between Tokens and Cost.
- The **Models** ranking lists the models this workspace called in the range, ranked by Tokens or Cost. It shows 10 rows by default and expands to at most 20.

* The **Tools** ranking lists the apps and clients that sent your requests, up to 20 rows. With **24h** selected, tools cover whole UTC days, and the page states which ones.

- Apps and clients that are recognized appear by name (for example OpenAI Python SDK or curl). The rest are grouped as **Unrecognized apps**, **Other clients** or **Direct API**.

![Models and Tools rankings sorted by tokens, with Direct API as the last Tools row](/docs/shots/usage-rankings.en.webp)

## Filter by model and API key

**Model** in the toolbar takes several models, up to 50; **API key** takes one key at a time. The filters apply to the heatmap, the four cards, the trend and both rankings.

The time range and the filters live in the address bar (`range`, or `from` and `to`, plus `model` and `key`). Send the link to a teammate and they see the same view.

## Jump from a day to its logs

Each cell of the **Token activity** heatmap is the number of requests on one UTC day, over the last 12 months. Click a day to open that day's [request logs](https://pirouter.ai/docs/guides/logs.md), with the current model and key filters carried over.

## Not available today

- **Export.** The Activity page has no export or CSV download.
- **An API for usage.** The public API has inference and model catalog endpoints only; there is no endpoint for usage or logs.

* **Finer hourly views.** Only **Today** and **24h** are charted by hour; a custom range is picked in whole days.

## Next steps

- [Request logs](https://pirouter.ai/docs/guides/logs.md): Look up requests one by one and find a call by its trace ID.
- [Model fallbacks](https://pirouter.ai/docs/guides/fallbacks.md): Switch to another model when the one you asked for is unavailable.
