> ## Documentation Index
> Fetch the complete documentation index at: https://www.plain.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Reporting metrics reference

> Every metric name the Reporting API accepts, what it measures, its unit, and which queries support it.

Every metric name the Reporting API accepts, grouped by what it measures. For how each metric is calculated, follow the link to its page in the [Insights docs](/docs/product/platform/metrics). Metrics whose names start with `agent_` report per user and need the `metricsAgent:read` permission. See [Permissions](/docs/graphql/reporting#permissions).

## Volume

These metrics count threads, once per thread per bucket. All are time series only.

| Metric | What it counts |
| - | - |
| `threads_created_count` | Threads created |
| `threads_status_count__todo` | Threads in Todo at the end of each bucket |
| `threads_status_count__snoozed` | Threads in Snoozed at the end of each bucket |
| `threads_status_count__done` | Threads in Done at the end of each bucket |
| `threads_status_transitions_count__todo` | Threads that moved into Todo from any other status, including Snoozed |
| `threads_status_transitions_count__todo_with_created` | The same, plus threads created in Todo |
| `threads_status_reopened_count` | Threads that moved from Done back to Todo |
| `threads_status_transitions_count__snoozed` | Threads that moved into Snoozed |
| `threads_status_transitions_count__done` | Threads that moved into Done |

See [Support volume](/docs/product/platform/support-volume).

## Durations

Duration metrics are in minutes and accept `percentile`, an integer from 1 to 99. It defaults to 50, the median.

| Metric | What it measures | Time series | Single value |
| - | - | - | - |
| `threads_first_response_time` | [First response time](/docs/product/platform/first-response-time) | Yes | Yes |
| `threads_time_between_follow_up_responses` | [Next response time](/docs/product/platform/next-response-time) | Yes | Yes |
| `threads_time_between_all_responses` | Next response time, including the first response | Yes | No |
| `threads_resolution_time` | [Resolution time](/docs/product/platform/resolution-time) | Yes | Yes |
| `threads_time_customer_waiting` | [Customer waiting time](/docs/product/platform/customer-waiting-time) | Yes | Yes |

## SLA compliance

SLA compliance is a fraction from 0 to 1, where `0.95` means 95% of threads met their target. Single value only. See [SLA compliance](/docs/product/platform/sla-compliance).

| Metric | What it measures |
| - | - |
| `service_level_agreement_compliance_frt` | Share of threads whose first response target was Achieved |
| `service_level_agreement_compliance_nrt` | Share of threads whose first next response target to reach an outcome was Achieved |

## CSAT

CSAT metrics need `filters.surveyResponse.rating`: `1` for Negative, `2` for Neutral, or `3` for Positive. Add `filters.surveyResponse.surveyId` to limit them to one survey. See [CSAT scores](/docs/product/platform/csat-scores).

| Metric | What it measures | Time series | Single value |
| - | - | - | - |
| `threads_csat__count` | Survey responses with that rating | Yes | Yes |
| `threads_csat__percentage` | Responses with that rating as a share of all responses, from 0 to 100 | Yes | Yes |

## All-time count

`threads_all_time_count_done` is the number of threads in Done right now. It's single value only, and it rejects `from` and `to`.

## Heatmaps

| Metric | What each cell counts |
| - | - |
| `threads_created_count_heatmap` | Threads created in that hour of that weekday |
| `agent_messages_sent_count` | Threads a user sent at least one message on in that hour of that weekday. Set `filters.userIds` to limit it to some users |

See [Get a heatmap](/docs/graphql/reporting/heatmap).

## Per-user metrics

Per-user metrics credit each value to a user. In `METRIC` mode they need `groupBy: [{ dimension: ASSIGNEE }]` for one result per user, or `filters.userIds` with another `groupBy` dimension. `ASSIGNEE` on these metrics groups by the user who gets the credit, which isn't always the thread's current assignee.

| Metric | Credits | Time series | Single value |
| - | - | - | - |
| `agent_messages_sent_count` | The user who sent the message. Counts messages | Yes | No |
| `agent_threads_assignment_transitions_count` | The user the thread was assigned to | Yes | No |
| `agent_threads_status_transitions_count__todo` | The user who moved the thread into Todo | Yes | No |
| `agent_threads_status_transitions_count__snoozed` | The user who moved the thread into Snoozed | Yes | No |
| `agent_threads_status_transitions_count__done` | The user who moved the thread into Done | Yes | No |
| `agent_threads_first_response_time` | The user who sent the first reply | Yes | Yes |
| `agent_threads_time_between_follow_up_responses` | The user who sent each reply | Yes | Yes |
| `agent_threads_resolution_time` | Every user ever assigned to the thread | Yes | Yes |
| `agent_threads_time_customer_waiting` | Every user ever assigned to the thread | No | Yes |
| `agent_service_level_agreement_compliance_frt` | Every user ever assigned to the thread | No | Yes |
| `agent_service_level_agreement_compliance_nrt` | Every user ever assigned to the thread | No | Yes |
| `agent_threads_csat__count` | Every user ever assigned to the thread | Yes | No |
| `agent_threads_csat__percentage` | Every user ever assigned to the thread | Yes | No |

Status transitions only credit moves a user or machine user made, so Plain's automatic changes don't count toward anyone. Metrics that credit every user ever assigned count a thread once for each of those users, so per-user values don't add up to the workspace value.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.