# Action response tokens

Measure the token size of the responses your actions return to the agent — the tool-result payload that lands back in the conversation context — and break it down by action and agent.

**Path:** Analytics → Event Explorer

When the agent calls an action, the action returns a response, and that response is fed back into the conversation as context — the same way a tool result is handed back to a model. Those returned tokens are billed on the next model turn, so a chatty action that returns a large payload inflates cost and latency even when the action itself is cheap to run.

**Action response tokens** measures exactly that: the token size of the response an action hands back to the agent. Track it to find the actions whose responses are bloating your context, then trim what they return.

:::note
This report is currently in beta.
:::

## What you're measuring

This metric aggregates a numeric property on the **Action Response Received** event — the event that fires when the agent receives the response from an action call (as opposed to **Action Called**, which fires when the agent *invokes* the action).

| Piece | Value |
| :--- | :--- |
| **Event** | Action Response Received |
| **Property** | Action response tokens — tokens in the returned payload |
| **Counting** | Aggregate: **Average** (typical per response) or **Sum** (total returned over the range) |
| **Breakdown** | **Action key** (per action) or **Agent Name** (per agent) |

Average answers "how heavy is a typical response from this action?" Sum answers "how many response tokens did this action push into context over the range?" — the driver of downstream model cost.

## Build the report

1. In **Events or Metrics**, select the event **Action Response Received**.

2. Under the event name, open the counting dropdown and choose **Aggregate Property**, then pick **Action response tokens**. Select **Average** (per response) or **Sum** (total). The metric label reads, for example, `Average of Action response tokens`.

3. In **Breakdown**, select **Action key** to get one series per action. Add **Agent Name** to also split by agent — useful when several agents share the same actions.

4. Set the **time range** to Last 30 days and the interval to **Daily**. Use the **Line** chart to watch trends over time, or switch to the **Table** view to rank actions by their **Average** and **Total** columns.

## Read it

- **Line chart** — each line is one action (or agent). A tall spike on a given day means that action returned unusually large responses then — often an unbounded list or a full record dump.
- **Data table** — below the chart: **Average** (typical response size per call) and **Total** (all response tokens over the range), plus the daily values. Sort by **Total** to find the biggest context contributors; sort by **Average** to find the actions that are heavy *per call* regardless of volume.

An action can top the **Total** column either because it runs constantly (many small responses) or because each response is huge. Compare **Average** against [Actions](/user-guides/analytics/actions/) volume to tell the two apart.

:::tip
If one action (say `query_driver_assignments`) dominates response tokens, shrink what it returns: paginate or cap list results, drop fields the agent never uses, and return IDs or summaries instead of full records. Re-run the report to confirm the average drops.
:::

## Related

- [Cost & tokens](/user-guides/analytics/cost-tokens/): aggregate cost and token consumption on the **Action Called** event (input, output, cached, instructions).
- [Actions](/user-guides/analytics/actions/): how often each action runs — the volume behind the response-token total.
- [Events & metrics](/user-guides/analytics/events-metrics/) and [Properties & filters](/user-guides/analytics/properties-filters/): the events and numeric properties behind these metrics.
