Session Analysis API Usage Guide
Understand the full cost and event tree for any Telnyx AI or voice session — from a single inference call to complex multi-product conversations.What is Session Analysis?
Session Analysis gives you a complete view of costs and events for any usage session on the Telnyx platform:- Full event tree — parent events, child events, and their relationships
- Rollup costs — per-event costs plus cumulative totals across the session
- Product linkages — how different Telnyx products interacted in a single session
When to Use It
| Use Case | Why Session Analysis Helps |
|---|---|
| AI session cost breakdown | See the full cost tree for an AI assistant call, broken down by inference turns, STT/TTS, and infrastructure costs |
| Troubleshooting | Trace the complete event chain to debug unexpected call flow or billing issues |
| Usage auditing | Verify which products and services were consumed during a session |
| Cost optimization | Identify which components of an AI session drive the most cost and optimize accordingly |
Core Concepts
Record Types
A record type identifies the category of usage event for a Telnyx product. Each record type maps to a specific product and has defined relationships to other record types. Example:ai-voice-assistant is the record type for AI Voice Assistant sessions, which have inference events as children.
Sessions
A session is a tree of related usage events. The root event is the primary event you’re analyzing. Child events are related usage that occurred as part of that session. Example: An AI Voice Assistant call involves acall-session root with a call-control child, which in turn has an ai-voice-assistant child with inference events underneath — each representing one LLM turn in the conversation.
Relationships
Events are connected via relationships:| Relationship | Direction | Example |
|---|---|---|
child_of | Parent → Child | An ai-voice-assistant event has inference children (one per LLM turn) |
parent_of | Child → Parent | An inference event has a parent ai-voice-assistant session |
local_field matches the parent’s parent_field. For example, inference events link to their ai-voice-assistant parent via the conversation_id field.
Cost Rollup
Each event node includes:event_cost— Cost of this individual eventcumulative_cost— This event’s cost plus all descendant costs
cumulative_cost equals the total session cost. For AI sessions, this means the call-session cumulative cost includes everything — the AI assistant, each inference turn, STT, TTS, call control, and SIP trunking — rolled up into one number.
Endpoints
1. List All Record Types
record_types[]— Array of all record types with their parent/child relationshipsquery_parameters— Valid parameters for session analysis queriesmeta— Total count and last updated timestamp
2. Get Record Type Details
- Valid child and parent relationships
- Example query URLs
- Recommended max depth for traversal
3. Get Session Analysis
| Parameter | Type | Description |
|---|---|---|
record_type | string | The record type identifier (see Record Types Reference below) |
event_id | UUID | The event’s unique identifier |
call-session. This gives you the full picture — AI assistant sessions, inference events, call control, SIP trunking, and all other products in one tree. Use the metadata endpoint to explore other starting points for different products.
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
include_children | boolean | true | Include child events in the response |
max_depth | integer | 2 | Maximum traversal depth (1-5) |
expand | string | record | Only record (include full record data) or none (omit record data) |
date_time | ISO 8601 | — | Timestamp to narrow index selection (improves performance) |
Response Structure
Top-Level Fields
| Field | Description |
|---|---|
session_id | Identifier for the analyzed session |
cost.total | Total session cost (sum of all events) |
cost.currency | ISO 4217 currency code |
root | Root event node (tree structure) |
meta.event_count | Total events in the tree |
meta.products | Unique products involved in the session |
Event Node Structure
Each event in the tree follows this structure:| Field | Description |
|---|---|
id | Event identifier |
product | Internal product identifier |
event_name | Event type name |
relationship | How this event relates to its parent (null for root) |
cost.event_cost | Cost of this individual event |
cost.cumulative_cost | This event + all descendants |
links.self | Link to this analysis node |
links.records | Link to underlying detail records |
record | Full detail record data (varies by record type) |
children | Child event nodes |
Relationship Object
For child events, therelationship field explains the connection:
| Field | Description |
|---|---|
type | Relationship type (child_of or parent_of) |
via.local_field | Field on this record that links to parent |
via.parent_field | Field on the parent record that’s matched |
parent_id | Identifier of the parent event |
via fields vary by relationship. AI-related linkages often use conversation_id, while voice/telephony relationships typically use telnyx_session_id or call_session_id.
Example: AI Voice Assistant Session
A customer makes an inbound call to an AI Voice Assistant using the Telnyx Web Dialer. The assistant handles a multi-turn conversation over ~152 seconds. Query:| Field | Value |
|---|---|
| Total session cost | $0.2128 |
| Event count | 11 |
| Duration | ~152 seconds |
| Products involved | siptrunking-cdrs, recording-cdrs, webrtc-cdrs, callcontrol-cdrs, ai-voice-assistant, inference |
- The call-session root has $0.00 event cost — it’s a container for the session, not a billable event itself.
- ai-voice-assistant is the dominant cost at 0.06/min for 3 billed minutes). Its cumulative cost of $0.1921 includes 5 inference events underneath.
- Each inference event represents a single LLM call during the conversation — one per assistant turn. The cost per turn varies based on the model and token count.
- call-control has a 0.1973 cumulative cost — the difference is the ai-voice-assistant subtree rolling up underneath it.
- recording, webrtc, and sip-trunking are leaf nodes with no children, so their event cost equals their cumulative cost.
Understanding the AI Cost Structure
In an AI-powered call, costs come from multiple layers:| Layer | Record Type | What You’re Billed For |
|---|---|---|
| AI Assistant | ai-voice-assistant | Time-based (per minute of assistant usage) |
| LLM Inference | inference | Per-turn (each LLM call is a separate event) |
| Call Control | call-control | Time-based (per minute of call control usage) |
| Transport | sip-trunking, webrtc | Time-based (per minute for the voice leg) |
| Add-ons | recording, speech-to-text, text-to-speech | Per-use or per-minute depending on the product |
Common Use Cases
Debugging High-Cost AI Sessions
- Query the session with
max_depth=5to get the full tree - Look at
meta.productsto see which products were involved - Compare
event_costacross children — ifai-voice-assistantis the driver, check how many inference turns occurred underneath - Check
recordfields for rate information (rate,rate_measured_in) and duration
Finding Related Events
- Start from any event in the tree
- Use
relationship.viato understand the field linkage - Query the parent or children directly using their
id
Exporting for Analysis
- Use
expand=noneto get just the tree structure without full records - Flatten the tree programmatically for spreadsheet import
- Or keep full records and parse specific fields (e.g.,
rate,duration_sec)
Best Practices
Performance
- Provide
date_timewhen you know it — this narrows the index search and improves response time - Use appropriate
max_depth— start with2, increase only if needed. AI sessions with inference events typically needmax_depth=4or5to reach the leaf level. - Use
expand=noneif you only need cost rollups, not full records
Querying
- Start from the root event — the most complete picture comes from the top-level event
- Check metadata first —
/metadata/{record_type}shows expected children and recommended depth - Use
links.recordsto get the underlying detail records for deeper analysis
Error Handling
| Status Code | Meaning | Action |
|---|---|---|
| 400 | Invalid parameters | Check record_type spelling, event_id format |
| 403 | Forbidden | Verify API key has access to this user’s data |
| 404 | Event not found | Event may not exist, or date_time is incorrect |
| 500 | Internal error | Retry with exponential backoff |
Record Types Reference
AI & Voice Intelligence
| Record Type | Product | Description | Common Children |
|---|---|---|---|
ai-voice-assistant | AI Voice Assistant | AI assistant sessions | inference |
inference | Inference | AI inference events (one per LLM turn) | — |
inference-speech-to-text | Inference | STT-specific inference | — |
inference-text-to-speech | Inference | TTS-specific inference | — |
summarization | Inference | Text summarization | — |
embedding | Inference | Vector embeddings | — |
speech-to-text | Speech-to-Text | STT transcription records | — |
text-to-speech | Text-to-Speech | TTS synthesis records | — |
amd | Answering Machine Detection | AMD invocations | — |
noise-suppression | Noise Suppression | Audio enhancement records | — |
Voice & Telephony
| Record Type | Product | Description | Common Children |
|---|---|---|---|
call-session | N/A | Root-level record for grouping related voice product usage records | call-control, sip-trunking, recording, webrtc, siprec-client, fax-api, conference-participant |
call-control | Call Control (Programmable Voice) | Voice API call records | ai-voice-assistant, amd, media-streaming, speech-to-text, text-to-speech, noise-suppression |
sip-trunking | SIP Trunking | SIP trunking detail records | — |
webrtc | WebRTC | WebRTC call records | — |
Media & Storage
| Record Type | Product | Description | Common Children |
|---|---|---|---|
recording | Call Recording | Call recording CDRs | — |
media_storage | Media Storage | Stored media files | — |
media-streaming | Media Streaming | Real-time audio streams | — |
forking | Media Forking | Forked media records | — |
Conferencing
| Record Type | Product | Description | Common Children |
|---|---|---|---|
conference | Conference | Conference sessions | conference-participant |
conference-participant | Conference | Individual participant records | — |
Messaging
| Record Type | Product | Description | Common Children |
|---|---|---|---|
message | Messaging | SMS/MMS message records | ai-messaging-assistant |
Video
| Record Type | Product | Description | Common Children |
|---|---|---|---|
room-session-event | Programmable Video | Video room sessions | — |
room-session-participant-event | Programmable Video | Video participants | — |
room-session-recording-event | Programmable Video | Video recordings | — |
room-session-composition-event | Programmable Video | Video compositions | — |
Other Products
| Record Type | Product | Description | Common Children |
|---|---|---|---|
verify | Verify (2FA) | Verification attempts | — |
fax-api | Fax API | Fax transmission records | — |
branded-calling | Branded Calling | Caller ID branding | — |
siprec-client | SIPREC | SIPREC recording sessions | — |
sim_card_usage | Wireless | SIM card data usage | — |
customer-service-record | CSR | Customer service records | — |