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

# Observe & Receipts

> Post-call analytics, full transcripts, and an event-by-event receipt for every conversation.

Once an agent is live, **Observe** is where you see what actually happened — how many calls were
answered, what callers asked about, where the agent fell short, and exactly what it did on any one
conversation. Every call (voice **or** chat) produces a summary, a transcript, and a **receipt**.

## The answer-first analytics card

`GET /agents/{agentId}/analytics` returns the money card first: total calls, answered vs. missed,
containment rate, transfer rate, and `recoveredRevenueUsd` (captured calls × your own average
ticket). Pass `?avgTicketCents=` or `?avgTicketUsd=` so the dollar figure is yours, and filter by
`from`, `to`, and `channel`. For org-wide rollups across every agent, use `/analytics/overview`,
`/analytics/by-agent`, and `/analytics/timeseries`.

## Conversations, transcripts, and receipts

The **history list** (`GET /conversations`) is newest-first and full-text searchable over the
transcript and the one-line summary — filter by `q`, `agentId`, `from`, `to`, `channel`, and
`outcome`. Each row already carries the deterministic outcome, summary, primary topic, and
sentiment.

Drill into one conversation for its summary, transcript, signed recording URL (voice only), and the
**receipt** — the ordered list of audit events that reconstructs the call turn by turn:
`user_utterance`, `agent_message`, `tool_call`, `kb_retrieval`, `guardrail`, `verification`,
`handoff`, and more. The receipt is the same event stream you watched live in
[Test & Simulate](/concepts/testing).

## Sentiment, topics, and knowledge gaps

* **Sentiment** is a per-call label — `positive`, `neutral`, `negative`, or `frustrated` — computed
  deterministically (no LLM). It's triage: the rollup surfaces the worst calls to review first.
* **Topics** are zero-config clusters of what callers actually say. `GET /agents/{agentId}/topics`
  ranks them by volume; drill any cluster into its conversations.
* **Knowledge gaps** are deduped questions the agent couldn't answer. List them, then `PATCH` a gap
  to dismiss it or mark it in progress — close the loop by adding [knowledge](/concepts/knowledge).

## In the API

| Action                               | Endpoint                                                                   | Scope                                |
| ------------------------------------ | -------------------------------------------------------------------------- | ------------------------------------ |
| Agent analytics card                 | `GET /agents/{agentId}/analytics`                                          | `analytics:read`                     |
| Per-agent / org timeseries           | `GET /agents/{agentId}/analytics/timeseries` · `GET /analytics/timeseries` | `analytics:read`                     |
| Org overview / per-agent leaderboard | `GET /analytics/overview` · `GET /analytics/by-agent`                      | `analytics:read`                     |
| Topics (and drill-down)              | `GET /agents/{agentId}/topics` · `…/topics/{clusterId}/conversations`      | `analytics:read`                     |
| Knowledge gaps (list / curate)       | `GET /agents/{agentId}/knowledge-gaps` · `PATCH …/{gapId}`                 | `analytics:read` · `analytics:write` |
| Call summaries                       | `GET /agents/{agentId}/calls`                                              | `calls:read`                         |
| Conversation history (searchable)    | `GET /conversations`                                                       | `analytics:read`                     |
| One conversation summary             | `GET /conversations/{id}`                                                  | `calls:read`                         |
| Receipt (ordered audit events)       | `GET /conversations/{id}/receipt`                                          | `calls:read`                         |
| Transcript                           | `GET /conversations/{id}/transcript`                                       | `calls:read`                         |
| Signed recording URL (voice)         | `GET /conversations/{id}/audio`                                            | `calls:read`                         |

```bash theme={null}
# Pull the receipt — the full event trail for one conversation
curl https://builder.flowyte.com/api/v1/conversations/CONV_ID/receipt \
  -H "Authorization: Bearer flowyte_sk_…"
```

<Tip>
  Analytics and history are reporting endpoints — give read-only keys `analytics:read` and
  `calls:read` and nothing more. Sentiment, topics, and gaps populate only once an agent crosses a
  small volume floor; below it they report `dataState: collecting`.
</Tip>
