#Analytics & Usage
The Analytics & usage page is the partner Monitor view for call performance and usage trends across an assigned client. It is a selected-client surface: it reports figures at client grain, rechecked server-side against your partner assignments. The figures are client-grain estimates and are distinct from invoice or billing truth.
#Who Can Use It
| Role | Access |
|---|---|
partner_admin | View call performance, caller sentiment, call outcomes, upset caller reason groups, diagnostic driver display labels, diagnostic driver IDs, and the consumption & cost card for a selected client. |
partner_user | View call performance, caller sentiment, call outcomes, and upset caller reason groups. Cost, consumption, driver display labels, and raw driver IDs are not returned for this role. |
Both partner roles use the same selected-client view, but the projection the server returns differs by role. Navigation visibility is not the security boundary: the /analytics route is restricted to partner roles, and any other role receives a generic not-found that does not reveal whether the surface exists.
#Selecting A Client
Analytics is reported at client grain, so the page needs one confirmed client. If exactly one client is assigned to you, it is selected for you; otherwise pick one from the client selector in the sidebar (or the mobile drawer). There is no reviewed cross-client aggregate, so the page does not show portfolio totals or trends.
Until a single client is confirmed — because you are viewing all assigned clients, or have not chosen one yet — the page shows a "Portfolio roll-up not available" empty-state with a picklist of your assigned clients so you can drill into one and reach the working selected-client view.
If you have no assigned clients, the page shows a "Nothing to monitor yet" state with links to Support and Partner team. If the assignment source is degraded and the selected client cannot be confirmed against it, the page withholds that client's detail and offers a Retry. If the selection is stale or no longer assigned to you, the page shows a not-found body with a link back to Overview. In each case the page says what it could not confirm rather than guessing or showing another client's data.
#Filters
In selected-client scope the page offers three filters:
- Project — choose a project that belongs to the selected client, or leave it on the default project. The project list is scoped to the selected client; a project that is not in your authorised set for that client is rejected.
- Period — Last 7 days, Last 14 days, or Last 30 days. The default is Last 14 days.
- Metric view — All metrics, Volume, Consumption, or Outcomes. The default is All metrics. This toggles which sections render; it does not change the underlying scope or the request the page makes.
#What The Page Shows
When the selected client has matching calls for the chosen filters, the page renders the sections enabled by the metric view:
- Volume metrics — Call volume (total calls), Answer rate, Transfer rate, and Caller sentiment (positive share) as stat tiles.
- Consumption & cost — a client-grain estimate card with minutes for the period, estimated cost, and plan headroom. This card is
partner_admin-only (see below). - Call outcomes — the call-outcome breakdown for the selected client and project.
- Why callers sounded upset — negative-call reason groups from the scoped analytics aggregate, with counts for Upset callers, No reason captured, and Reason unclear.
partner_adminalso sees driver display labels and a clearly labelled "Internal driver ID:" line.partner_usersees group trends only.
If the selected client has no projects yet, or no calls match the filters, the page shows a "No analytics match these filters" empty-state instead of metrics. If calls exist but nothing was classified, only the Call outcomes card carries its own empty note — the rest of the page still renders.
Calls with no captured reason are counted separately as "No reason captured". They are not folded into the raw unknown driver. "Reason unclear" counts only analyzed upset calls whose driver is unknown.
#Cost Visibility Differs By Role
Cost, consumption, and plan headroom are billing-grade figures, so they are gated to partner_admin.
- For
partner_admin, the Consumption & cost card shows minutes, an estimated cost, and plan headroom. The card is explicitly labelled a client-grain estimate, and the page repeats that estimated usage is distinct from invoice or billing truth. Per-project cost appears only once a reviewed project-grain aggregate exists. - For
partner_user, cost is never requested and never returned. In place of the figures, the Consumption & cost card is a locked "Not available for your role" note explaining that partner users cannot view costs.
This is a server-side boundary: for partner_user the cost block is omitted from the response and the billing source is never read, so the read-only note is what the surface returns, not a hidden-but-present value.
#Sentiment Diagnostic Visibility
Upset caller diagnostics are selected-client and selected-project analytics. They are fetched from the scoped API aggregate; the browser does not derive them from a paginated call list.
partner_adminreceives thepartner_driverprojection: group labels, driver display labels, and raw driver IDs on a clearly labelled "Internal driver ID:" line.partner_userreceives thepartner_groupprojection: group labels and counts only. Driver arrays and raw IDs are omitted from the wire.- Internal roles are not served by this partner Monitor surface at all — it returns a not-found for them — and read negative drivers through the separate internal projection instead. Internal raw visibility remains separate from partner and client surfaces.
#Estimates, Not Billing Truth
Every figure on this page is a client-grain estimate intended for monitoring and trend review. These figures are distinct from invoice or billing truth. When you need billing-grade numbers, use Billing: partner_admin opens an assigned client from Partner Billing and sees Usage and Invoices for it. partner_user has no billing access.
#When Sources Are Degraded
The page reads several sources to build the view. If some are temporarily unavailable, it shows the metrics it could load plus a "Some analytics sources are temporarily unavailable" notice saying the missing sections will return when the source recovers. If the billing source specifically did not respond, the Consumption & cost card switches to "Consumption temporarily unavailable — billing source did not respond" while the performance metrics still render. If the caller-reason source did not respond, that section says diagnostics are temporarily unavailable and the rest of the page is unaffected. If the call-volume source did not respond, call volume falls back to zero and the metrics area collapses to the "No analytics match these filters" body — the degraded notice stays above it, so that combination means a source is down rather than that the client had no calls. If the analytics request itself fails — including when every core call source is down — the page shows a load-error state with a Retry control.
If the page itself fails to load, a route-level error state replaces it with "Analytics is temporarily unavailable. Try again in a moment." and a Retry control. Raw upstream error text is never shown on this state; when a request ID is available it is displayed instead.
#Safety Boundaries
Analytics is a monitoring view, not a data-export surface. Do not treat client-grain estimates as billing figures, and do not put internal host access, secret-management paths, raw provider credentials, or customer secrets into support requests about this page. When a question needs production work or billing-grade reconciliation, use Escalation Boundaries and provide safe context to AiDial support — the request ID if one was shown, the client and project you had selected, the period, and when you saw the problem.