How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.
To measure an AI support agent’s effectiveness accurately, track resolution rate (conversations fully solved with no human involvement) rather than deflection, and read it alongside escalation reasons, CSAT and a manual check of real conversations. In Fini, you read the AI resolution rate in Analytics or through the API, then break it down by channel, intent rule and escalation reason.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 from the Conversation Status doughnut and the Resolution rate trend, or from aiResolutionRate in the 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. 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.
How do we measure AI support agent effectiveness accurately?
Accuracy starts with the definition. Deflection counts any conversation that didn’t reach a person, including ones where the customer gave up, so it overstates what the agent solved. Resolution counts only conversations the agent fully solved. For billing, Fini counts a resolution only when Fini fully solves the issue, no human ever touches the conversation, and the customer doesn’t reply for 72 hours.Then make the number trustworthy:
Measure each agent and channel separately, over full weeks.
Read resolution next to human escalation rate, escalation reasons and CSAT, so a gain that hurts quality shows up.
Compare equal windows before and after a change, and let waiting conversations settle.
Open a sample of the conversations behind any number you report.
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 with read scope.
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.
2
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.
3
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.
4
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.
5
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.
6
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.
7
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 says what to fix for each.
8
Break it down by intent rule and knowledge
Under Breakdowns, Intent rule breakdown shows AI Resolve Rate, Escalated Rate, and Volume for each 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.
9
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.
Use the API when you want resolution rate in a BI tool, a weekly report, or an alerting job. Get agent analytics returns the full summary for one agent and window; Get agent analytics section returns one section such as summary.
1
Find the agent ID
Call List agents and copy the botId of the agent you want. API paths use bot for what the dashboard calls an agent.
2
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.
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.
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.
A before-and-after comparison is only fair if the two windows differ in the change you made and nothing else.
1
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.
2
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.
3
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.
4
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.
5
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.
6
Confirm with conversations and tests
Open a sample of conversations from the “after” window in Inbox and run the relevant Test Suite collection. Analytics tells you the rate moved; Inbox and Test Suite tell you why.
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.
Work through the same signals in order, from the cheapest check to the deepest:The escalation reasons table lists what to fix for each reason, and Resolution vs deflection explains what a growing waiting share usually means.
Pair resolution with accuracy signals you control.
Analytics
Full reference for every control, chart, and table.
Get agent analytics
Request parameters and response fields.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Fini","description":"Documentation for Fini AI (usefini.com): build, deploy and run autonomous AI support agents. Fini is made by Fini Technologies Inc. and is not affiliated with fini.ai.","colors":{"primary":"#C3EE5E","light":"#C3EE5E","dark":"#A8D43E"},"logo":{"light":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-light.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=a460ff8bb507876712db2f0fb12c21e4","dark":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=8a2bf1d8a0e5c590ebb976eadccf26a9"},"favicon":"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=8a2bf1d8a0e5c590ebb976eadccf26a9","footer":{"socials":{"x":"https://x.com/finichatAI","linkedin":"https://www.linkedin.com/company/usefini","youtube":"https://www.youtube.com/@finiai","instagram":"https://www.instagram.com/usefini.official","github":"https://github.com/ask-fini"}},"seo":{"metatags":{"msvalidate.01":"9A9FD7AB87AE2DEA257FE41F07C61E70"}},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","default":true,"href":"en/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fini","hasAudioNarration":false,"actualSubdomain":"fini","customDomains":["docs.usefini.com"],"gitSource":{"type":"github","owner":"ask-fini","repo":"fini-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae1aebf9e6542c02e67ac46","collectionId":"418c9966-a318-4b74-a1b6-fefe4bbe0599","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae1aebf9e6542c02e67ac46"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae1aebf9e6542c02e67ac46","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"en","tag":"API reference","count":197},{"language":"en","tag":"Documentation","count":52},{"language":"en","tag":"Knowledge","count":40},{"language":"en","tag":"Test Suite","count":31},{"language":"en","tag":"Use cases","count":29},{"language":"en","tag":"Intent Rules","count":17},{"language":"en","tag":"Deploy","count":17},{"language":"en","tag":"Conversations","count":13},{"language":"en","tag":"Agent Configuration","count":13},{"language":"en","tag":"Trust \u0026 pricing","count":13}]},"assistantConfig":{"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/how-to/measure-resolution-rate","slug":"/en/how-to/measure-resolution-rate","pageMetadata":{"title":"Measure your resolution rate in Fini","description":"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.","icon":"chart-line","href":"/en/how-to/measure-resolution-rate"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Mermaid,Note,Step,Steps,Table,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`To measure an AI support agent’s effectiveness accurately, track resolution rate (conversations fully solved with no human involvement) rather than deflection, and read it alongside escalation reasons, CSAT and a manual check of real conversations. In Fini, you read the AI resolution rate in Analytics or through the API, then break it down by channel, intent rule and escalation reason.`}),`\n`,_jsxs(_components.p,{children:[`In Fini (usefini.com), your agent’s `,_jsx(_components.strong,{children:`AI resolution rate`}),` is the share of conversations with status `,_jsx(_components.strong,{children:`Resolved by AI`}),` in the selected window, and you read it in `,_jsx(_components.a,{href:`/en/analytics`,children:`Analytics`}),` from the `,_jsx(_components.strong,{children:`Conversation Status`}),` doughnut and the `,_jsx(_components.strong,{children:`Resolution rate`}),` trend, or from `,_jsx(_components.code,{children:`aiResolutionRate`}),` in the `,_jsx(_components.a,{href:`/en/api-reference/get-agent-analytics`,children:`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.`]}),`\n`,_jsxs(_components.p,{children:[`If you want the definitions first, read `,_jsx(_components.a,{href:`/en/performance/resolution-vs-deflection`,children:`Resolution vs deflection`}),`. The short version: `,_jsx(_components.strong,{children:`Deflection rate`}),` is `,_jsx(_components.code,{children:`100% - Human escalation rate`}),` and counts `,_jsx(_components.strong,{children:`Waiting for Customer`}),` conversations as deflected, so it is always at least as high as AI resolution rate.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-do-we-measure-ai-support-agent-effectiveness-accurately`,children:`How do we measure AI support agent effectiveness accurately?`}),`\n`,_jsx(_components.p,{children:`Accuracy starts with the definition. Deflection counts any conversation that didn’t reach a person, including ones where the customer gave up, so it overstates what the agent solved. Resolution counts only conversations the agent fully solved. For billing, Fini counts a resolution only when Fini fully solves the issue, no human ever touches the conversation, and the customer doesn’t reply for 72 hours.`}),`\n`,_jsx(_components.p,{children:`Then make the number trustworthy:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Measure each agent and channel separately, over full weeks.`}),`\n`,_jsx(_components.li,{children:`Read resolution next to human escalation rate, escalation reasons and CSAT, so a gain that hurts quality shows up.`}),`\n`,_jsx(_components.li,{children:`Compare equal windows before and after a change, and let waiting conversations settle.`}),`\n`,_jsx(_components.li,{children:`Open a sample of the conversations behind any number you report.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/en/performance/resolution-vs-deflection`,children:`Resolution vs deflection`}),` for the full definitions.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`,_jsxs(_components.li,{children:[`Access to `,_jsx(_components.strong,{children:`Analytics`}),` in the dashboard.`]}),`\n`,_jsxs(_components.li,{children:[`For the API option: a workspace `,_jsx(_components.a,{href:`/en/deploy/api-keys`,children:`API key`}),` with `,_jsx(_components.code,{children:`read`}),` scope.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`read-it-in-analytics`,children:`Read it in Analytics`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Pick the agent`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Step,{title:`Set the date range`,children:_jsx(_components.p,{children:`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.`})}),_jsxs(Step,{title:`Set your filters`,children:[_jsxs(_components.p,{children:[`Decide what slice you are reporting on before you read any number. The pinned filters are `,_jsx(_components.strong,{children:`Knowledge`}),`, `,_jsx(_components.strong,{children:`Conversation status`}),`, `,_jsx(_components.strong,{children:`Tags`}),`, `,_jsx(_components.strong,{children:`Intent rule`}),`, `,_jsx(_components.strong,{children:`Source`}),`, `,_jsx(_components.strong,{children:`CSAT`}),`, and `,_jsx(_components.strong,{children:`AI CSAT`}),` (when available). `,_jsx(_components.strong,{children:`Channel`}),`, `,_jsx(_components.strong,{children:`Sentiment`}),`, and `,_jsx(_components.strong,{children:`Escalation reason`}),` live under `,_jsx(_components.strong,{children:`+ Filter`}),`.`]}),_jsxs(_components.p,{children:[`For an overall resolution rate, leave `,_jsx(_components.strong,{children:`Conversation status`}),` unfiltered. Filtering it to one status makes that status 100% of the slice.`]}),_jsxs(_components.p,{children:[`Save a setup you will reuse with `,_jsx(_components.strong,{children:`Views`}),`. A view stores filters only and keeps the current date range, so you can apply the same slice to any reporting window.`]})]}),_jsxs(Step,{title:`Read the KPI cards`,children:[_jsxs(_components.p,{children:[`The five cards show `,_jsx(_components.strong,{children:`Conversation volume`}),`, `,_jsx(_components.strong,{children:`Deflection rate`}),`, `,_jsx(_components.strong,{children:`Human escalation rate`}),`, `,_jsx(_components.strong,{children:`Average response time`}),`, and `,_jsx(_components.strong,{children:`Average CSAT`}),`, each with a pill comparing the selected window to the preceding window of the same length.`]}),_jsxs(_components.p,{children:[`Note `,_jsx(_components.strong,{children:`Conversation volume`}),` first. A rate built on a handful of conversations moves a lot from week to week.`]})]}),_jsxs(Step,{title:`Read the Conversation Status doughnut`,children:[_jsxs(_components.p,{children:[`Scroll to `,_jsx(_components.strong,{children:`Distribution`}),`. The `,_jsx(_components.strong,{children:`Conversation Status`}),` doughnut splits volume into `,_jsx(_components.strong,{children:`Resolved by AI`}),`, `,_jsx(_components.strong,{children:`Escalated to Human Team`}),`, and `,_jsx(_components.strong,{children:`Waiting for Customer`}),`. The `,_jsx(_components.strong,{children:`Resolved by AI`}),` share is your AI resolution rate for the window and filters you set.`]}),_jsxs(_components.p,{children:[`Check your reading: `,_jsx(_components.strong,{children:`Deflection rate`}),` on the KPI card should equal the `,_jsx(_components.strong,{children:`Resolved by AI`}),` share plus the `,_jsx(_components.strong,{children:`Waiting for Customer`}),` share.`]})]}),_jsx(Step,{title:`Check the trend`,children:_jsxs(_components.p,{children:[`In the first trend chart, switch the toggle to `,_jsx(_components.strong,{children:`Resolution rate`}),`. It plots the daily resolution rate alongside the `,_jsx(_components.strong,{children:`Waiting for Customer`}),` share. Look for step changes and line them up with dates you changed prompts, knowledge, rules, or routing.`]})}),_jsx(Step,{title:`Find out why conversations escalated`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Escalations`}),`, the doughnut shows every conversation in the period, with `,_jsx(_components.strong,{children:`Not escalated`}),` as the largest slice and escalated conversations split by reason (Knowledge, Action, User, and Policy families). Apply the `,_jsx(_components.strong,{children:`Escalation reason`}),` filter to drill into one reason. The `,_jsx(_components.a,{href:`/en/analytics#escalation-reasons`,children:`escalation reasons table`}),` says what to fix for each.`]})}),_jsxs(Step,{title:`Break it down by intent rule and knowledge`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Breakdowns`}),`, `,_jsx(_components.strong,{children:`Intent rule breakdown`}),` shows `,_jsx(_components.strong,{children:`AI Resolve Rate`}),`, `,_jsx(_components.strong,{children:`Escalated Rate`}),`, and `,_jsx(_components.strong,{children:`Volume`}),` for each `,_jsx(_components.a,{href:`/en/automations/rulebook`,children:`Rulebook`}),` intent rule. `,_jsx(_components.strong,{children:`Knowledge performance`}),` shows the same rates per folder, article, or source group, plus `,_jsx(_components.strong,{children:`CSAT`}),`.`]}),_jsxs(_components.p,{children:[`Sort by volume and look for high-volume rows with a low `,_jsx(_components.strong,{children:`AI Resolve Rate`}),`. Fix those first: they move the overall rate the most. The arrow on a row opens the conversations behind it in `,_jsx(_components.a,{href:`/en/testing/inbox`,children:`Inbox`}),`.`]})]}),_jsx(Step,{title:`Spot-check the conversations`,children:_jsxs(_components.p,{children:[`Open ten conversations behind any number you plan to report. Confirm the statuses look right in the conversation header and in `,_jsx(_components.strong,{children:`Output Tag Selection`}),` inside `,_jsx(_components.strong,{children:`AI Steps`}),`. A rate is only as good as the classifications behind it.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`useful-slices`,children:`Useful slices`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Question`}),_jsx(_components.th,{children:`Filters to apply`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`What is the resolution rate on email vs chat?`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`+ Filter`}),` → `,_jsx(_components.strong,{children:`Channel`}),`, one channel at a time. Or read the `,_jsx(_components.strong,{children:`Channel breakdown`}),` table under the doughnuts.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`How does Zendesk traffic compare to the widget?`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Source`}),`, one integration at a time.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`How is one workflow performing?`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Intent rule`}),`, set to that rule. Or read its row in `,_jsx(_components.strong,{children:`Intent rule breakdown`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Where in the day does resolution drop?`}),_jsxs(_components.td,{children:[`Keep the range at 31 days or less and read `,_jsx(_components.strong,{children:`Hourly breakdown`}),` (volume by hour and resolution rate by hour).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Are resolved conversations also satisfied?`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`CSAT`}),` or `,_jsx(_components.strong,{children:`AI CSAT`}),`, then compare against the unfiltered rate.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`read-it-through-the-api`,children:`Read it through the API`}),`\n`,_jsxs(_components.p,{children:[`Use the API when you want resolution rate in a BI tool, a weekly report, or an alerting job. `,_jsx(_components.a,{href:`/en/api-reference/get-agent-analytics`,children:`Get agent analytics`}),` returns the full summary for one agent and window; `,_jsx(_components.a,{href:`/en/api-reference/get-agent-analytics-section`,children:`Get agent analytics section`}),` returns one section such as `,_jsx(_components.code,{children:`summary`}),`.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Find the agent ID`,children:_jsxs(_components.p,{children:[`Call `,_jsx(_components.a,{href:`/en/api-reference/list-agents`,children:`List agents`}),` and copy the `,_jsx(_components.code,{children:`botId`}),` of the agent you want. API paths use `,_jsx(_components.strong,{children:`bot`}),` for what the dashboard calls an agent.`]})}),_jsxs(Step,{title:`Request the window`,children:[_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`startEpoch`}),` and `,_jsx(_components.code,{children:`endEpoch`}),` as Unix epoch timestamps (the reference examples use milliseconds). Add the same filters you use in the dashboard: `,_jsx(_components.code,{children:`source`}),`, `,_jsx(_components.code,{children:`channel`}),`, `,_jsx(_components.code,{children:`ruleIds`}),`, `,_jsx(_components.code,{children:`tagIds`}),`, `,_jsx(_components.code,{children:`escalationReasonTagIds`}),`, and so on.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` GET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api-prod.usefini.com/v2/bots/YOUR_BOT_ID/hc-analytics/public?startEpoch=1784073600000\u0026endEpoch=1784678400000\u0026source=all'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Authorization: Bearer fini_your_api_key'`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Read the summary`,children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`summary`}),` holds the current window and `,_jsx(_components.code,{children:`comparisonSummary`}),` the comparison window. The fields you need:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`totalConversations`})}),_jsx(_components.td,{children:`Total conversations in the window.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resolvedConversations`})}),_jsx(_components.td,{children:`Conversations resolved by AI.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`escalatedConversations`})}),_jsx(_components.td,{children:`Conversations escalated to a human.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`waitingForCustomerConversations`})}),_jsx(_components.td,{children:`Conversations waiting for the customer.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`aiResolutionRate`})}),_jsx(_components.td,{children:`AI resolution rate for the window.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`humanEscalationRate`})}),_jsx(_components.td,{children:`Human escalation rate for the window.`})]})]})]}),_jsxs(_components.p,{children:[`Deflection rate is `,_jsx(_components.code,{children:`1 - humanEscalationRate`}),`. For daily series, read `,_jsx(_components.code,{children:`resolutionRateChartData`}),` (daily totals, resolved counts, and AI resolution rate) and `,_jsx(_components.code,{children:`conversationVolumeChartData`}),` (daily resolved, escalated, and waiting counts). For per-rule numbers, read `,_jsx(_components.code,{children:`ruleAnalytics`}),`.`]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Store the raw counts, not just the rates. With `,_jsx(_components.code,{children:`resolvedConversations`}),` and `,_jsx(_components.code,{children:`totalConversations`}),` you can recompute the rate for any combination of weeks, and you can tell a real improvement from a drop in volume.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`compare-before-and-after-a-change`,children:`Compare before and after a change`}),`\n`,_jsx(_components.p,{children:`A before-and-after comparison is only fair if the two windows differ in the change you made and nothing else.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Write down the change and its time`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Step,{title:`Pick equal windows on either side`,children:_jsx(_components.p,{children:`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.`})}),_jsx(Step,{title:`Hold the slice constant`,children:_jsxs(_components.p,{children:[`Apply the same saved `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Step,{title:`Let waiting conversations settle`,children:_jsxs(_components.p,{children:[`Conversations from the last day or two of the “after” window may still be `,_jsx(_components.strong,{children:`Waiting for Customer`}),`. Give the window a few days after it closes before you read the final number, and treat early readings as provisional.`]})}),_jsx(Step,{title:`Compare resolution, escalation, and quality together`,children:_jsxs(_components.p,{children:[`Compare AI resolution rate, Human escalation rate, the `,_jsx(_components.strong,{children:`Waiting for Customer`}),` share, `,_jsx(_components.strong,{children:`Average response time`}),`, and `,_jsx(_components.strong,{children:`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.`]})}),_jsx(Step,{title:`Confirm with conversations and tests`,children:_jsxs(_components.p,{children:[`Open a sample of conversations from the “after” window in `,_jsx(_components.a,{href:`/en/testing/inbox`,children:`Inbox`}),` and run the relevant `,_jsx(_components.a,{href:`/en/testing/test-suite`,children:`Test Suite`}),` collection. Analytics tells you the rate moved; Inbox and Test Suite tell you why.`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`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 `,_jsx(_components.strong,{children:`Intent rule breakdown`}),` and `,_jsx(_components.strong,{children:`Knowledge performance`}),` volumes across both windows before crediting a change.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`if-the-rate-drops`,children:`If the rate drops`}),`\n`,_jsx(_components.p,{children:`Work through the same signals in order, from the cheapest check to the deepest:`}),`\n`,_jsx(Mermaid,{chart:`---\ntitle: Diagnosing a drop in AI resolution rate\n---\nflowchart TD\n DROP((\"Resolution rate dropped\"))\n VOL{\"Volume or traffic\u003cbr/>mix changed?\"}\n MIX[\"Compare Intent rule and\u003cbr/>Knowledge performance volumes\"]\n WAIT{\"Waiting for Customer\u003cbr/>share grew?\"}\n SETTLE[\"Let the window settle, then\u003cbr/>read waiting conversations in Inbox\"]\n ESC{\"An escalation reason grew?\"}\n REASON[\"Fix what that reason points to\u003cbr/>knowledge, Action, or policy\"]\n ROWS[\"Find high-volume rows with\u003cbr/>a low AI Resolve Rate\"]\n CONFIRM[\"Confirm in Inbox\u003cbr/>and Test Suite\"]\n\n DROP --> VOL\n VOL -->|\"yes\"| MIX\n VOL -->|\"no\"| WAIT\n WAIT -->|\"yes\"| SETTLE\n WAIT -->|\"no\"| ESC\n ESC -->|\"yes\"| REASON\n ESC -->|\"no\"| ROWS\n MIX --> CONFIRM\n SETTLE --> CONFIRM\n REASON --> CONFIRM\n ROWS --> CONFIRM\n\n classDef source fill:#F7F7F7,color:#131415,stroke:#E8E8E8\n classDef agent fill:#131415,color:#FFFFFF,stroke:#131415,stroke-width:3px\n classDef surface fill:#FFFFFF,color:#131415,stroke:#131415\n classDef human fill:#C3EE5E,color:#131415,stroke:#131415,stroke-width:2px\n\n class DROP agent\n class VOL,WAIT,ESC surface\n class MIX,SETTLE,REASON,ROWS source\n class CONFIRM human`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/en/analytics#escalation-reasons`,children:`escalation reasons table`}),` lists what to fix for each reason, and `,_jsx(_components.a,{href:`/en/performance/resolution-vs-deflection#reading-the-gap-over-time`,children:`Resolution vs deflection`}),` explains what a growing waiting share usually means.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Resolution vs deflection`,icon:`scale-balanced`,href:`/en/performance/resolution-vs-deflection`,children:_jsx(_components.p,{children:`The exact definitions and a worked example.`})}),_jsx(Card,{title:`How accuracy is measured`,icon:`bullseye`,href:`/en/performance/how-accuracy-is-measured`,children:_jsx(_components.p,{children:`Pair resolution with accuracy signals you control.`})}),_jsx(Card,{title:`Analytics`,icon:`chart-bar`,href:`/en/analytics`,children:_jsx(_components.p,{children:`Full reference for every control, chart, and table.`})}),_jsx(Card,{title:`Get agent analytics`,icon:`code`,href:`/en/api-reference/get-agent-analytics`,children:_jsx(_components.p,{children:`Request parameters and response fields.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Measure your resolution rate in Fini","description":"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.","icon":"chart-line","href":"/en/how-to/measure-resolution-rate"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How do we measure AI support agent effectiveness accurately?","slug":"how-do-we-measure-ai-support-agent-effectiveness-accurately","depth":2,"children":[]},{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Read it in Analytics","slug":"read-it-in-analytics","depth":2,"children":[{"title":"Useful slices","slug":"useful-slices","depth":3,"children":[]}]},{"title":"Read it through the API","slug":"read-it-through-the-api","depth":2,"children":[]},{"title":"Compare before and after a change","slug":"compare-before-and-after-a-change","depth":2,"children":[{"title":"If the rate drops","slug":"if-the-rate-drops","depth":3,"children":[]}]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"fini","siteName":"Fini","title":"Measure your resolution rate in Fini - Fini","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/how-to/measure-resolution-rate","matchLevel":0}}},"lastModified":"2026-10-13T11:14:54.910Z","originalFileLocation":"en/how-to/measure-resolution-rate.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Fini\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/png\" href=\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-dark.png?fit=max\u0026amp;auto=format\u0026amp;n=fep-JMymNphpe1DQ\u0026amp;q=85\u0026amp;s=8a2bf1d8a0e5c590ebb976eadccf26a9\">\u003cmeta data-mint-head property=\"og:title\" content=\"Measure your resolution rate in Fini - Fini\">\u003cmeta data-mint-head property=\"og:description\" content=\"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Fini\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.usefini.com/en/how-to/measure-resolution-rate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fini.mintlify.app/_mintlify/api/og/v2?division=How-tos\u0026amp;title=Measure+your+resolution+rate+in+Fini\u0026amp;description=How+to+measure+AI+support+agent+effectiveness+accurately+in+Fini%3A+read+AI+resolution+rate+in+Analytics+or+the+API%2C+break+it+down%2C+compare+before+and+after.\u0026amp;theme=f0910fa1b0920527ac15e186\u0026amp;signature=36cc6d96ed041192a0d37afa784e6af35ef4f88a6943d620c967cf44602421fa\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Measure your resolution rate in Fini - Fini\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fini.mintlify.app/_mintlify/api/og/v2?division=How-tos\u0026amp;title=Measure+your+resolution+rate+in+Fini\u0026amp;description=How+to+measure+AI+support+agent+effectiveness+accurately+in+Fini%3A+read+AI+resolution+rate+in+Analytics+or+the+API%2C+break+it+down%2C+compare+before+and+after.\u0026amp;theme=f0910fa1b0920527ac15e186\u0026amp;signature=36cc6d96ed041192a0d37afa784e6af35ef4f88a6943d620c967cf44602421fa\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/fini/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Fini\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#C3EE5E\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"9A9FD7AB87AE2DEA257FE41F07C61E70\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.usefini.com/en/how-to/measure-resolution-rate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/how-to/measure-resolution-rate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.usefini.com/#organization\",\"name\":\"Fini\",\"url\":\"https://docs.usefini.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fini/fep-JMymNphpe1DQ/images/shared/logos/fini-light.png?fit=max\u0026auto=format\u0026n=fep-JMymNphpe1DQ\u0026q=85\u0026s=a460ff8bb507876712db2f0fb12c21e4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.usefini.com#website\",\"name\":\"Fini\",\"url\":\"https://docs.usefini.com\",\"publisher\":{\"@id\":\"https://docs.usefini.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate#webpage\",\"url\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate\",\"name\":\"Measure your resolution rate in Fini\",\"description\":\"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\",\"dateModified\":\"2026-10-13T11:14:54.910Z\",\"isPartOf\":{\"@id\":\"https://docs.usefini.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"How-tos\",\"item\":\"https://docs.usefini.com/en/how-to/migrate-from-zendesk-bots\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Measure your resolution rate in Fini\",\"item\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate#article\",\"headline\":\"Measure your resolution rate in Fini\",\"name\":\"Measure your resolution rate in Fini\",\"description\":\"How to measure AI support agent effectiveness accurately in Fini: read AI resolution rate in Analytics or the API, break it down, compare before and after.\",\"url\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.usefini.com/en/how-to/measure-resolution-rate#webpage\"},\"dateModified\":\"2026-10-13T11:14:54.910Z\",\"publisher\":{\"@id\":\"https://docs.usefini.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.usefini.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Fini\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Fini","nav":{"global":null,"languages":[{"language":"en","default":true,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/en/introduction"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/en/api-reference/overview"}]},{"tab":"Use cases","groups":[{"group":"Use cases","icon":"layer-group","pages":[{"title":"Fini for refunds and returns","sidebarTitle":"Refunds and returns","icon":"money-bill-transfer","href":"/en/use-cases/refunds"},{"title":"Fini for disputes and chargebacks","sidebarTitle":"Disputes and chargebacks","icon":"scale-balanced","href":"/en/use-cases/disputes"},{"title":"Fini for escalation and human handoff","sidebarTitle":"Escalation and handoff","icon":"headset","href":"/en/use-cases/escalation-and-handoff"},{"title":"Fini for cancellations and subscriptions","sidebarTitle":"Cancellations and subscriptions","icon":"calendar-xmark","href":"/en/use-cases/cancellations"},{"title":"Fini for KYC, onboarding and account changes","sidebarTitle":"KYC and account changes","icon":"id-card","href":"/en/use-cases/kyc-and-account-changes"},{"title":"Fini for billing and invoices","sidebarTitle":"Billing and invoices","icon":"file-invoice-dollar","href":"/en/use-cases/billing-and-invoices"},{"title":"Fini for password reset and account access","sidebarTitle":"Password reset","icon":"unlock-keyhole","href":"/en/use-cases/password-reset"}]},{"group":"Walkthroughs","icon":"route","pages":[{"title":"End-to-end: cancellation flow","icon":"route","href":"/en/walkthroughs/cancellation-flow"},{"title":"End-to-end: card replacement","icon":"credit-card","href":"/en/walkthroughs/card-replacement"},{"title":"End-to-end: order status and changes","icon":"boxes-packing","href":"/en/walkthroughs/order-status-and-changes"}]},{"group":"Industry setup","icon":"building-columns","pages":[{"title":"Setting up Fini for fintech and banking","sidebarTitle":"Fintech and banking","icon":"building-columns","href":"/en/industry-setup/fintech"},{"title":"Setting up Fini for healthcare","sidebarTitle":"Healthcare","icon":"stethoscope","href":"/en/industry-setup/healthcare"}]},{"group":"How-tos","icon":"list-check","pages":[{"title":"Migrate from Zendesk bots to Fini","description":"Move from Zendesk's native bots and flows to a Fini agent running inside Zendesk: inventory your flows, map them to knowledge and intent rules, run in shadow mode, and cut over brand by brand.","icon":"right-left","href":"/en/how-to/migrate-from-zendesk-bots"},{"title":"Measure your resolution rate in Fini","icon":"chart-line","href":"/en/how-to/measure-resolution-rate"},{"title":"Handle customers' personal AI agents","sidebarTitle":"Personal AI agents","description":"How support teams can handle requests from customers' personal AI agents, and how Fini's Agent Handshake gives the same answer however a request is worded.","icon":"handshake","href":"/en/how-to/handle-personal-ai-agents"}]},{"group":"Playbooks","icon":"book-open","pages":[{"title":"Designing an escalation policy for AI support","sidebarTitle":"Escalation policy","icon":"signs-post","href":"/en/playbooks/escalation-policy"},{"title":"Preparing your APIs for an AI agent","sidebarTitle":"Preparing your APIs","icon":"plug","href":"/en/playbooks/preparing-apis"},{"title":"Testing an AI support agent before launch","sidebarTitle":"Testing before launch","icon":"flask-vial","href":"/en/playbooks/testing-before-launch"},{"title":"How to run an AI support pilot","sidebarTitle":"Running a pilot","icon":"flag-checkered","href":"/en/playbooks/running-a-pilot"},{"title":"Preparing your knowledge base for an AI agent","sidebarTitle":"Knowledge base prep","icon":"broom","href":"/en/playbooks/knowledge-base-prep"},{"title":"Running multilingual AI support well","sidebarTitle":"Multilingual support","icon":"language","href":"/en/playbooks/multilingual-support"},{"title":"Migrating from a legacy chatbot or IVR to an AI agent","sidebarTitle":"Legacy bot migration","icon":"right-left","href":"/en/playbooks/legacy-bot-migration"}]}]},{"tab":"Trust \u0026 pricing","pages":[{"title":"Trust \u0026 pricing","href":"/en/security/overview"}]}]}]},"title":"Measure your resolution rate in Fini - Fini","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}