Sessions and transcripts
A session is one conversation. Every one is kept, and it is the record you go back to when something went wrong.
What a session holds
| Transcript | Every turn, in order, with timing and the step it happened on. |
| Config snapshot | The prompt, model, voice and transcriber that were live at the time. |
| Cost | What it cost, split by component. |
| Latency | Where the time went. |
| Routing | Every intent decision and why. |
| Variables | What was passed in and what was captured. |
| Analysis | A post-call summary, when enabled. |
| Recording | The audio, when recording is on. |
The config snapshot is what makes an old session readable. An agent you have since edited five times still shows exactly what it was when that call happened, so you are never debugging a conversation against a configuration that no longer exists.
Debugging a bad conversation
- Read the transcript - is what the agent heard what the caller said? A wrong transcription is a transcriber language problem, not a prompt problem.
- Check Routing if it went to the wrong step.
- Check the config snapshot - the agent may not have been what you think.
- Check tool calls - what was called and what came back.
Getting sessions out
Sessions are readable over the API, and each finished session
is pushed to your backend on the session.completed
webhook with the end-of-call report.
Recording
Recording is off by default and enabled per agent. Whether you may record, and whether you must announce it, depends on your jurisdiction. See Privacy and compliance.
The audio is served by the Glytos API, not by object storage. A session carries a
recording_url pointing at this API, and that address is minted for you when you
read the session: it is scoped to that one call and expires within the hour.
Fetch it and play or download it straight away. Do not store a recording_url, and
do not treat it as a permanent address for the file - a saved one stops working, while
the recording itself stays exactly where it was. Read the session again whenever you
need the audio and you will get a fresh address.
The same applies to what we send you: the call.recording.ready
webhook and the event timeline carry the session uuid
and no address at all, precisely so a stored payload never becomes a working link to a
customer conversation.
Range requests are honoured, so a player can seek without refetching the file.