GEThttps://core-api.heysadie.ai/calls/{id}/insights
id success data startedAt endedAt callDuration hasRecording pipeline eou model avgMs llm tts summary totalTurns userTurns agentTurns toolCalls toolFailures interruptions avgLatencyMs avgTranscriptionDelayMs avgEndOfUtteranceDelayMs agentProcessingMs performance turnIndex role e2eLatencyMs llmTtftMs llmTtftTotalMs ttsTtfbMs transcriptionDelayMs endOfUtteranceDelayMs interrupted llmCacheStatus llmPromptTokens llmCompletionTokens llmTokensPerSecond ttsAudioDurationMs ttsCharacterCount timeline type transcript offsetMs content latencyMs name arguments result error metadata timestamp version path code message details fieldGet call insights
Retrieve the session insights for one call. Session insights describe how one call actually ran. They carry the models that served it, the per-turn performance the voice pipeline recorded (end-to-end latency, LLM time to first token, TTS time to first byte, transcription delay, end-of-utterance delay), a rolled-up summary, and a timeline of what the caller said, what the assistant answered, and every tool call and its result. Metrics are ingested asynchronously, so a call that has just ended carries no insights for a short while after it hangs up. `id` is the same call id GET /calls/:id takes. A call with no metrics yet answers 404 with "Call insights not found".
Try it in the API ExplorerExample request
curl "https://core-api.heysadie.ai/calls/CALL_ID/insights" \
-H "Authorization: ApiKey YOUR_API_KEY"Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme. See Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
idstringrequiredThe resource's UUID.
Responses
successbooleanrequiredtrue on every 2xx
dataobjectoptionalThe result
Show 9 child properties
idstringrequiredstartedAtstring (date-time) | string (date) | number | nullrequiredendedAtstring (date-time) | string (date) | number | nullrequiredcallDurationnumber | nullrequiredhasRecordingbooleanrequiredWhether a recording exists for this call. Fetch it from GET /calls/{id}; this endpoint does not return the URL.
pipelineobjectrequiredPer-stage view of the voice pipeline. Each stage names the model that ran and the average milliseconds it added to a turn. An average is null when no turn reported that metric.
Show 3 child properties
eouobjectrequiredShow 2 child properties
modelstring | nullrequiredEnd-of-utterance (turn detection) model that decided when the caller stopped speaking.
avgMsnumber | nullrequiredMean endOfUtteranceDelayMs across the turns that reported one.
llmobjectrequiredShow 2 child properties
modelstring | nullrequiredavgMsnumber | nullrequiredMean llmTtftMs (time to first token) across the turns that reported one.
ttsobjectrequiredShow 2 child properties
modelstring | nullrequiredavgMsnumber | nullrequiredMean ttsTtfbMs (time to first byte of audio) across the turns that reported one.
summaryobjectrequiredShow 10 child properties
totalTurnsnumberrequireduserTurnsnumberrequiredagentTurnsnumberrequiredTurns the agent actually processed, counted from the performance metrics rather than the transcript.
toolCallsnumberrequiredtoolFailuresnumberrequiredinterruptionsnumberrequiredavgLatencyMsnumber | nullrequiredavgTranscriptionDelayMsnumber | nullrequiredavgEndOfUtteranceDelayMsnumber | nullrequiredagentProcessingMsnumber | nullrequiredTotal time the agent spent producing its turns, avgLatencyMs multiplied by agentTurns. Null when no turn reported an end-to-end latency.
performanceobject[]requiredShow 15 item properties
turnIndexnumberrequiredroleenumrequired"assistant"e2eLatencyMsnumber | nullrequiredllmTtftMsnumber | nullrequiredllmTtftTotalMsnumber | nulloptionalttsTtfbMsnumber | nullrequiredtranscriptionDelayMsnumber | nullrequiredendOfUtteranceDelayMsnumber | nulloptionalinterruptedbooleanrequiredllmCacheStatusstring | nullrequiredllmPromptTokensnumber | nullrequiredllmCompletionTokensnumber | nullrequiredllmTokensPerSecondnumber | nullrequiredttsAudioDurationMsnumber | nullrequiredttsCharacterCountnumber | nullrequiredtimelineobject[]requiredShow 18 item properties
typeenumrequired"user_speech"transcriptstringrequiredoffsetMsnumberrequiredtypeenumrequired"agent_response"contentstringrequiredinterruptedbooleanrequiredlatencyMsnumber | nullrequiredoffsetMsnumberrequiredtypeenumrequired"tool_call"namestringrequiredargumentsmap<string, any>requiredoffsetMsnumberrequiredtypeenumrequired"tool_result"namestringrequiredsuccessbooleanrequiredresultstring | nullrequirederrorstring | nullrequiredoffsetMsnumberrequiredmetadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
400The request is invalid. `details` lists each field that failed
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 3 child properties
codeenumrequiredA parameter or body field broke a rule
"VALIDATION_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
detailsobject[]optionalOne entry per field that failed
Show 2 item properties
fieldstringrequiredThe offending field
messagestringrequiredThe rule it broke
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
401Missing or invalid credentials
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredNo valid credentials
"UNAUTHORIZED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
403The credentials are valid but may not use this route
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredThe credentials may not use this route
"FORBIDDEN"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
404Not found, or outside the caller's scope
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn id names nothing the caller can see
"RESOURCE_NOT_FOUND"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
500An unexpected server error
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn unexpected server failure
"INTERNAL_SERVER_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
502
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequired"PERFORMANCE_SERVICE_ERROR"messagestringrequiredmetadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
503
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequired"PERFORMANCE_SERVICE_UNREACHABLE""PERFORMANCE_SERVICE_NOT_CONFIGURED"messagestringrequiredmetadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested