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

# Measure your resolution rate in Fini

> Read your agent's AI resolution rate in Analytics or through the API, break it down by channel, intent rule, and escalation reason, and compare it before and after a change.

In Fini (usefini.com), your agent's **AI resolution rate** is the share of conversations with status **Resolved by AI** in the selected window, and you read it in [Analytics](/en/analytics) from the **Conversation Status** doughnut and the **Resolution rate** trend, or from `aiResolutionRate` in the [Get agent analytics](/en/api-reference/get-agent-analytics) API. This guide walks through both, then shows how to break the number down and compare it fairly before and after a change.

If you want the definitions first, read [Resolution vs deflection](/en/performance/resolution-vs-deflection). The short version: **Deflection rate** is `100% - Human escalation rate` and counts **Waiting for Customer** conversations as deflected, so it is always at least as high as AI resolution rate.

## Before you start

* At least one agent deployed and handling real conversations. Analytics reads from live conversations, so a new agent needs a few days of traffic before the numbers mean much.
* Access to **Analytics** in the dashboard.
* For the API option: a workspace [API key](/en/deploy/api-keys) with `read` scope.

## Read it in Analytics

<Steps>
  <Step title="Pick the agent">
    Open **Analytics** and use the agent picker beside the page title. Every chart and table on the page scopes to that agent. In a multi-agent workspace, measure each agent separately.
  </Step>

  <Step title="Set the date range">
    The range defaults to the last 7 days. For a reporting number, use a full week or a full month so weekday and weekend traffic are both represented. The range applies to every KPI card, chart, and table below the header.
  </Step>

  <Step title="Set your filters">
    Decide what slice you are reporting on before you read any number. The pinned filters are **Knowledge**, **Conversation status**, **Tags**, **Intent rule**, **Source**, **CSAT**, and **AI CSAT** (when available). **Channel**, **Sentiment**, and **Escalation reason** live under **+ Filter**.

    For an overall resolution rate, leave **Conversation status** unfiltered. Filtering it to one status makes that status 100% of the slice.

    Save a setup you will reuse with **Views**. A view stores filters only and keeps the current date range, so you can apply the same slice to any reporting window.
  </Step>

  <Step title="Read the KPI cards">
    The five cards show **Conversation volume**, **Deflection rate**, **Human escalation rate**, **Average response time**, and **Average CSAT**, each with a pill comparing the selected window to the preceding window of the same length.

    Note **Conversation volume** first. A rate built on a handful of conversations moves a lot from week to week.
  </Step>

  <Step title="Read the Conversation Status doughnut">
    Scroll to **Distribution**. The **Conversation Status** doughnut splits volume into **Resolved by AI**, **Escalated to Human Team**, and **Waiting for Customer**. The **Resolved by AI** share is your AI resolution rate for the window and filters you set.

    Check your reading: **Deflection rate** on the KPI card should equal the **Resolved by AI** share plus the **Waiting for Customer** share.
  </Step>

  <Step title="Check the trend">
    In the first trend chart, switch the toggle to **Resolution rate**. It plots the daily resolution rate alongside the **Waiting for Customer** share. Look for step changes and line them up with dates you changed prompts, knowledge, rules, or routing.
  </Step>

  <Step title="Find out why conversations escalated">
    In **Escalations**, the doughnut shows every conversation in the period, with **Not escalated** as the largest slice and escalated conversations split by reason (Knowledge, Action, User, and Policy families). Apply the **Escalation reason** filter to drill into one reason. The [escalation reasons table](/en/analytics#escalation-reasons) says what to fix for each.
  </Step>

  <Step title="Break it down by intent rule and knowledge">
    Under **Breakdowns**, **Intent rule breakdown** shows **AI Resolve Rate**, **Escalated Rate**, and **Volume** for each [Rulebook](/en/automations/rulebook) intent rule. **Knowledge performance** shows the same rates per folder, article, or source group, plus **CSAT**.

    Sort by volume and look for high-volume rows with a low **AI Resolve Rate**. Fix those first: they move the overall rate the most. The arrow on a row opens the conversations behind it in [Inbox](/en/testing/inbox).
  </Step>

  <Step title="Spot-check the conversations">
    Open ten conversations behind any number you plan to report. Confirm the statuses look right in the conversation header and in **Output Tag Selection** inside **AI Steps**. A rate is only as good as the classifications behind it.
  </Step>
</Steps>

### Useful slices

| Question | Filters to apply |
| - | - |
| What is the resolution rate on email vs chat? | **+ Filter** → **Channel**, one channel at a time. Or read the **Channel breakdown** table under the doughnuts. |
| How does Zendesk traffic compare to the widget? | **Source**, one integration at a time. |
| How is one workflow performing? | **Intent rule**, set to that rule. Or read its row in **Intent rule breakdown**. |
| Where in the day does resolution drop? | Keep the range at 31 days or less and read **Hourly breakdown** (volume by hour and resolution rate by hour). |
| Are resolved conversations also satisfied? | **CSAT** or **AI CSAT**, then compare against the unfiltered rate. |

## Read it through the API

Use the API when you want resolution rate in a BI tool, a weekly report, or an alerting job. [Get agent analytics](/en/api-reference/get-agent-analytics) returns the full summary for one agent and window; [Get agent analytics section](/en/api-reference/get-agent-analytics-section) returns one section such as `summary`.

<Steps>
  <Step title="Find the agent ID">
    Call [List agents](/en/api-reference/list-agents) and copy the `botId` of the agent you want. API paths use **bot** for what the dashboard calls an agent.
  </Step>

  <Step title="Request the window">
    Pass `startEpoch` and `endEpoch` as Unix epoch timestamps (the reference examples use milliseconds). Add the same filters you use in the dashboard: `source`, `channel`, `ruleIds`, `tagIds`, `escalationReasonTagIds`, and so on.

    ```bash theme={null}
    curl --request GET \
      --url 'https://api-prod.usefini.com/v2/bots/YOUR_BOT_ID/hc-analytics/public?startEpoch=1784073600000&endEpoch=1784678400000&source=all' \
      --header 'Authorization: Bearer fini_your_api_key'
    ```
  </Step>

  <Step title="Read the summary">
    `summary` holds the current window and `comparisonSummary` the comparison window. The fields you need:

    | Field | Meaning |
    | - | - |
    | `totalConversations` | Total conversations in the window. |
    | `resolvedConversations` | Conversations resolved by AI. |
    | `escalatedConversations` | Conversations escalated to a human. |
    | `waitingForCustomerConversations` | Conversations waiting for the customer. |
    | `aiResolutionRate` | AI resolution rate for the window. |
    | `humanEscalationRate` | Human escalation rate for the window. |

    Deflection rate is `1 - humanEscalationRate`. For daily series, read `resolutionRateChartData` (daily totals, resolved counts, and AI resolution rate) and `conversationVolumeChartData` (daily resolved, escalated, and waiting counts). For per-rule numbers, read `ruleAnalytics`.
  </Step>
</Steps>

<Tip>
  Store the raw counts, not just the rates. With `resolvedConversations` and `totalConversations` you can recompute the rate for any combination of weeks, and you can tell a real improvement from a drop in volume.
</Tip>

## Compare before and after a change

A before-and-after comparison is only fair if the two windows differ in the change you made and nothing else.

<Steps>
  <Step title="Write down the change and its time">
    Record exactly what you published (a prompt edit, new articles, a new intent rule, a routing change) and when. If you rolled out by brand or channel, note which ones.
  </Step>

  <Step title="Pick equal windows on either side">
    Use windows of the same length and, ideally, the same weekdays, for example the 14 days before and the 14 days after. The KPI change pills compare against the immediately preceding window of the same length, so setting the range to the "after" window gives you the comparison automatically.
  </Step>

  <Step title="Hold the slice constant">
    Apply the same saved **View** to both windows. If the change only affects one intent rule or one channel, filter to that slice so unrelated traffic doesn't dilute the result.
  </Step>

  <Step title="Let waiting conversations settle">
    Conversations from the last day or two of the "after" window may still be **Waiting for Customer**. Give the window a few days after it closes before you read the final number, and treat early readings as provisional.
  </Step>

  <Step title="Compare resolution, escalation, and quality together">
    Compare AI resolution rate, Human escalation rate, the **Waiting for Customer** share, **Average response time**, and **Average CSAT**. A resolution gain that comes with a CSAT drop or a growing waiting share is not a clean win. Check the escalation reasons that shrank to confirm the change did what you intended.
  </Step>

  <Step title="Confirm with conversations and tests">
    Open a sample of conversations from the "after" window in [Inbox](/en/testing/inbox) and run the relevant [Test Suite](/en/testing/test-suite) collection. Analytics tells you the rate moved; Inbox and Test Suite tell you why.
  </Step>
</Steps>

<Note>
  Watch for changes in traffic mix. A product launch, an incident, or a marketing campaign can shift which intents customers bring, and resolution rate moves with the mix. Compare the **Intent rule breakdown** and **Knowledge performance** volumes across both windows before crediting a change.
</Note>

### If the rate drops

Work through the same signals in order, from the cheapest check to the deepest:

```mermaid theme={null}
---
title: Diagnosing a drop in AI resolution rate
---
flowchart TD
    DROP(("Resolution rate dropped"))
    VOL{"Volume or traffic<br/>mix changed?"}
    MIX["Compare Intent rule and<br/>Knowledge performance volumes"]
    WAIT{"Waiting for Customer<br/>share grew?"}
    SETTLE["Let the window settle, then<br/>read waiting conversations in Inbox"]
    ESC{"An escalation reason grew?"}
    REASON["Fix what that reason points to<br/>knowledge, Action, or policy"]
    ROWS["Find high-volume rows with<br/>a low AI Resolve Rate"]
    CONFIRM["Confirm in Inbox<br/>and Test Suite"]

    DROP --> VOL
    VOL -->|"yes"| MIX
    VOL -->|"no"| WAIT
    WAIT -->|"yes"| SETTLE
    WAIT -->|"no"| ESC
    ESC -->|"yes"| REASON
    ESC -->|"no"| ROWS
    MIX --> CONFIRM
    SETTLE --> CONFIRM
    REASON --> CONFIRM
    ROWS --> CONFIRM

    classDef source fill:#F7F7F7,color:#131415,stroke:#E8E8E8
    classDef agent fill:#131415,color:#FFFFFF,stroke:#131415,stroke-width:3px
    classDef surface fill:#FFFFFF,color:#131415,stroke:#131415
    classDef human fill:#C3EE5E,color:#131415,stroke:#131415,stroke-width:2px

    class DROP agent
    class VOL,WAIT,ESC surface
    class MIX,SETTLE,REASON,ROWS source
    class CONFIRM human
```

The [escalation reasons table](/en/analytics#escalation-reasons) lists what to fix for each reason, and [Resolution vs deflection](/en/performance/resolution-vs-deflection#reading-the-gap-over-time) explains what a growing waiting share usually means.

## Related

<CardGroup cols={2}>
  <Card title="Resolution vs deflection" icon="scale-balanced" href="/en/performance/resolution-vs-deflection">
    The exact definitions and a worked example.
  </Card>

  <Card title="How accuracy is measured" icon="bullseye" href="/en/performance/how-accuracy-is-measured">
    Pair resolution with accuracy signals you control.
  </Card>

  <Card title="Analytics" icon="chart-bar" href="/en/analytics">
    Full reference for every control, chart, and table.
  </Card>

  <Card title="Get agent analytics" icon="code" href="/en/api-reference/get-agent-analytics">
    Request parameters and response fields.
  </Card>
</CardGroup>


## Related topics

- [Changelog](/en/changelog.md)
- [How accuracy and resolution rate are measured](/en/performance/how-accuracy-is-measured.md)
- [Migrate from Zendesk bots to Fini](/en/how-to/migrate-from-zendesk-bots.md)


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