# Activity and logs

> Inspect individual requests in Logs, analyze spend and performance in Activity, attribute traffic to your apps, and use request IDs.

Source: https://0.0.0.0:3000/docs/account/activity
Documentation index: https://0.0.0.0:3000/docs/llms.txt

The dashboard has two views of your traffic. **Logs** lists individual requests: which endpoint served each one, what was tried and what it cost. **Activity** turns the same records into spend, usage and performance analytics you can filter, compare and export. Both show only the active account, and neither shows prompts, responses or secrets.

## Logs

Open [Logs](/dashboard/logs) to see requests newest first. A request appears once it finishes. Models appear by catalogue name, linked to the model's page; a model no longer in the catalogue shows its model ID.

| Column       | Shows                                                       |
| ------------ | ----------------------------------------------------------- |
| **Model**    | The requested model and how long ago the request arrived    |
| **Provider** | The provider that served it, or **No provider**             |
| **Status**   | **Completed**, **Failed**, **Cancelled** or **In progress** |
| **Input**    | Input tokens                                                |
| **Output**   | Output tokens                                               |
| **Cost**     | The charge in the key's currency                            |

### Request detail

Select a row to open the request. The header shows the model, its status and the generation ID with **Copy generation ID**, followed by:

| Fact          | Meaning                                            |
| ------------- | -------------------------------------------------- |
| **Served by** | The provider whose endpoint delivered the response |
| **Took**      | Time from arrival to the final result              |
| **Attempts**  | How many endpoints were tried                      |
| **Delivery**  | **Streamed** or **Single response**                |
| **Received**  | When the request arrived, in your local time       |

The **Route** panel starts at **Request received** and lists each endpoint tried, in order, with its time, usage and cost. Attempt numbers can have gaps. **No endpoint received this request.** means the request never reached a provider; **Provider handoff could not be confirmed.** means it may not have. Each attempt shows a result:

| Result               | Meaning                                                     |
| -------------------- | ----------------------------------------------------------- |
| **Served**           | Delivered the response                                      |
| **Empty response**   | The provider finished without producing output              |
| **Rate limited**     | The provider rejected the request because of its rate limit |
| **At capacity**      | The endpoint had no free capacity                           |
| **Unavailable**      | The endpoint couldn't be reached                            |
| **Invalid response** | The provider's response didn't pass validation              |
| **Delivery failed**  | The response broke off while it was being delivered         |
| **Usage mismatch**   | The provider's usage report couldn't be verified            |
| **Cancelled**        | The request was cancelled                                   |

An attempt that ended without charge reads **Not charged**. **Pending** means the charge isn't final yet; it doesn't mean zero. **Billing details** expands to the price revision and rates applied, including **Locked · USD-indexed** for [USD-indexed Bitcoin prices](/docs/account/bitcoin#usd-indexed-bitcoin-prices).

The **Usage and cost** panel shows **Input** (split into **Uncached**, **Read from cache** and **Written to cache**), **Output**, **Total tokens**, **Charged**, **Saved by cache** when caching saved money, and the currency charged. When the provider didn't report cache use, all input was charged at the uncached rate. A request that delivered nothing reads **Nothing was charged.**

The same record is available from the API with [`GET /generation`](/docs/account/usage-accounting#look-up-a-generation).

## Activity

Open [Activity](/dashboard/activity) for analytics. The header states your scope: **Personal activity**, **All organization keys** for owners and administrators, or **Your keys only** for other organization members.

### Query controls

| Control      | Options                                                                                                                                                                                  |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Range**    | **24h**, **7d** (the default) and **30d**; under **More**, shorter and longer ranges, calendar periods such as **Today**, **Last week** or **This year**, and **Custom**, up to one year |
| **Timezone** | The zone used for periods and calendar ranges; defaults to your browser's zone                                                                                                           |
| **Currency** | **USD** or **BTC**. Each view shows one currency; they're never combined                                                                                                                 |
| **Filters**  | **Include** or **Exclude** values of a dimension, up to 20 filters with up to 30 values each                                                                                             |

Completed reports support **Model**, **API key**, **Key creator**, **Provider**, **App**, **Task** and **Outcome**. Other dimensions remain visible in saved query definitions but return an unavailable view; they do not scan individual request history. App grouping and filters are also unavailable for estimated percentiles.

### Overview and Explore

**Overview** shows what the range cost, what used it and whether it worked:

- **Figures:** **Spend** with its change against the previous period, **Requests** with the share that succeeded, **Tokens** with the share of input read from cache, and **Cost per 1M tokens**.
- **One chart and its table:** choose the **Metric** (**Spend**, **Requests** or **Tokens**) and what to **Group by** (**Model**, **API key**, **App** or **Provider**). The chart shows the five largest and **Other**; the table lists every entry. Select up to five names to chart only those.
- **Results:** requests over time as **Succeeded**, **Cancelled** and **Failed**.
- **Time to first token:** the estimated median over time, with the p90 and median output speed for the range.

**Explore** builds any query: choose a **Metric**, a **Dimension**, an optional **Subgroup**, a **Rollup**, a **Ranking** and what to **Rank by**, then view the result as a chart and a table.

The chosen view, metric and grouping are part of the page address, so a link reopens the same view.

### Metrics

| Group           | Metrics                                                                                                         |
| --------------- | --------------------------------------------------------------------------------------------------------------- |
| Money           | Spend, provider cost, cache savings, cost per million tokens                                                    |
| Volume          | Requests; total, input, output, reasoning and visible output tokens                                             |
| Cache           | Uncached, cache read and cache write tokens; share of input read from or written to cache                       |
| Media and tools | Input and output images, input and output audio, input characters, output files, embeddings, other billed items |
| Outcomes        | Successful, failed, cancelled and delivered requests, fallbacks, and their rates                                |
| Latency         | Time to first token and end-to-end latency: average, p50, p90, p95, p99                                         |
| Throughput      | Output tokens per second: average, p10, p50, p90, p99                                                           |

Money metrics are exact decimals in the selected currency. Token metrics count only what providers reported; missing data shows as missing, not zero. Time to first token and output speed percentiles are estimates and are marked as such.

### Range limits

Overview loads its figures, breakdown and charts together from the same completed intervals. Short ranges use hourly buckets; long ranges use daily or weekly buckets so every panel includes the same retained history. Selecting breakdown rows changes the chart using that loaded result.

Reports show **Complete through** a time, **Partial results**, or an unavailable state. A range that ends now is complete through the end of the latest processed activity; requests from the last few minutes appear once they're processed. Partial results include only the displayed completed intervals; an uncovered period does not count as zero activity. **Last updated** is the last aggregate update, which can stay unchanged while no new evidence arrives. Corrections appear after processing.

The change against the previous period compares two equally long completed periods: the completed part of your range, trimmed to whole hours or days where older history is only kept at that detail, and a period of the same length before your range, moved back to the nearest stored hour or day where older history is only kept at that detail, so a short gap can separate the two. It's shown whenever the earlier period is fully covered, also when your range is partial, and reads **Comparison unavailable** otherwise.

Activity is kept in five-minute detail for 7 days, hourly detail for 90 days and daily detail for one year, aligned to UTC. Totals, rankings and tables always include every completed period in the range. A chart period only includes stored detail that lies entirely inside it, so older history can be left out of the chart while still counting in the totals: hourly charts in time zones with a half- or quarter-hour offset (such as India or Nepal) beyond 7 days, the hour around local midnight on daily charts in those zones beyond 7 days, hourly charts in any zone beyond 90 days, and daily charts in any zone other than UTC beyond 90 days. The coverage line then says **Totals include periods the chart leaves out**. A range that starts between stored edges starts its completed results at the next edge: in a half- or quarter-hour zone, a range starting at local midnight more than 7 days back starts at the next whole UTC hour, and in any zone other than UTC, one starting more than 90 days back starts at the next UTC midnight.

Minute rollups, end-to-end latency percentiles and unsupported dimensions or filters return an unavailable view. Open periods, processing backlog and expired detail never trigger a scan of individual history. Relative ranges such as **24h** or **30d** start on the next edge of stored detail (five minutes, an hour or a UTC day), so they can be complete; they're never longer than their name.

Ranges of 24 hours or less refresh every minute while the page is open. Analytics never delay billing or balances.

### Export, print and saved views

- **Download CSV** exports the filtered rows of the current query, up to 100,000 rows, with coverage status, refresh time and included intervals. A result without value rows contains one metadata-only row.
- **Print / PDF** opens a print layout of the same query, including its requested range, covered intervals, last update, timezone and filters.
- **Save view** stores the current query under a name. Saved views are private to you and never grant access to more data than your role allows.

To jump from a key to its traffic, open the key's menu in [Keys](/dashboard/keys) and choose **Activity**.

## Attribute traffic to your apps

Send an `HTTP-Referer` header with your app's public URL to group traffic by **App** in Activity:

```bash
curl https://api.numes.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NUMES_API_KEY" \
  -H "Content-Type: application/json" \
  -H "HTTP-Referer: https://app.example-store.io/checkout" \
  -d '{"model": "openai/gpt-6-luna", "messages": [{"role": "user", "content": "Hello"}]}'
```

Only the public origin is kept, here `https://app.example-store.io`. Values that aren't public app origins, such as IP addresses and local hostnames, are ignored.

`X-Title` is accepted for compatibility and ignored. Neither header is forwarded to providers. With the OpenAI SDK, set the header in the client's default headers; see [OpenAI SDK](/docs/integrations/openai-sdk).

## Request IDs and generation IDs

Every response, including errors, carries an `X-Request-Id` header. Responses that started delivering also carry `X-Generation-Id`, which equals the chat completion `id` and identifies the request in [`GET /generation`](/docs/account/usage-accounting#look-up-a-generation) and Logs.

You may send your own `X-Request-Id` of 1–128 characters from `A–Z`, `a–z`, `0–9`, `.`, `_` and `-`; other values are replaced with a random ID. Request IDs must be unique per account, including for requests that were rejected: reusing one returns `400` `invalid_request`. It's a correlation ID, not an idempotency key, so generate a fresh value for every request, including retries.

When you contact support, quote the `X-Request-Id` and, where you have it, the generation ID. Never send your API key or the prompt.

## What is never shown

Logs, Activity, exports and the generation API contain metadata only. They never include:

- prompt or response content, including media and tool arguments;
- key secrets; keys appear by name and masked label;
- session IDs, prompt-cache keys or the request's `user` field;
- your client's IP address, `X-Title` or the full `HTTP-Referer` URL.

A shared key identifies the person who created it, not who sent a particular request. To tell users or services apart, give each its own key.

## Next steps

:::cards

- {receipt} [Usage accounting](/docs/account/usage-accounting) What each usage and cost figure means.
- {key} [API keys](/docs/account/api-keys) Separate keys per app for clean attribution.
- {database} [Data retention and logging](/docs/privacy/data-retention) What is stored and for how long.
- {alert} [Errors](/docs/api-reference/errors) Error envelopes and what to retry.
  :::
