Skip to content
Calls

GEThttps://core-api.heysadie.ai/calls/insights

ids success data insights id 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 missing reason metadata timestamp version path code message details field

Get insights for several calls

Retrieve session insights for up to 25 calls in one request. 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. Pass `ids` as a comma-separated list of the same call ids GET /calls/:id takes, with no duplicates, for example `?ids=<uuid>,<uuid>`. `insights` comes back in the order the ids were sent, minus the ones that produced nothing. `missing` names each of those with a reason. `call_not_found` means this tenant has no such call. `metrics_not_found` means the call exists but has no metrics yet. A request where every id is missing is still a 200.

Try it in the API Explorer

Example request

Terminal
curl "https://core-api.heysadie.ai/calls/insights?ids=string" \
  -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.

Authorizationstringrequired

API 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)optional

Required when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.

Request

Query parameters

idsstringrequired

Comma-separated call ids to fetch insights for, for example `?ids=<uuid>,<uuid>`. Same ids as GET /calls/:id. Must be unique, at least 1 and at most 25.

Responses

200
successbooleanrequired

true on every 2xx

dataobjectoptional

The result

Show 2 child properties
insightsobject[]required
Show 9 item properties
idstringrequired
startedAtstring (date-time) | string (date) | number | nullrequired
endedAtstring (date-time) | string (date) | number | nullrequired
callDurationnumber | nullrequired
hasRecordingbooleanrequired

Whether a recording exists for this call. Fetch it from GET /calls/{id}; this endpoint does not return the URL.

pipelineobjectrequired

Per-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
eouobjectrequired
Show 2 child properties
modelstring | nullrequired

End-of-utterance (turn detection) model that decided when the caller stopped speaking.

avgMsnumber | nullrequired

Mean endOfUtteranceDelayMs across the turns that reported one.

llmobjectrequired
Show 2 child properties
modelstring | nullrequired
avgMsnumber | nullrequired

Mean llmTtftMs (time to first token) across the turns that reported one.

ttsobjectrequired
Show 2 child properties
modelstring | nullrequired
avgMsnumber | nullrequired

Mean ttsTtfbMs (time to first byte of audio) across the turns that reported one.

summaryobjectrequired
Show 10 child properties
totalTurnsnumberrequired
userTurnsnumberrequired
agentTurnsnumberrequired

Turns the agent actually processed, counted from the performance metrics rather than the transcript.

toolCallsnumberrequired
toolFailuresnumberrequired
interruptionsnumberrequired
avgLatencyMsnumber | nullrequired
avgTranscriptionDelayMsnumber | nullrequired
avgEndOfUtteranceDelayMsnumber | nullrequired
agentProcessingMsnumber | nullrequired

Total time the agent spent producing its turns, avgLatencyMs multiplied by agentTurns. Null when no turn reported an end-to-end latency.

performanceobject[]required
Show 15 item properties
turnIndexnumberrequired
roleenumrequired
Allowed values:"assistant"
e2eLatencyMsnumber | nullrequired
llmTtftMsnumber | nullrequired
llmTtftTotalMsnumber | nulloptional
ttsTtfbMsnumber | nullrequired
transcriptionDelayMsnumber | nullrequired
endOfUtteranceDelayMsnumber | nulloptional
interruptedbooleanrequired
llmCacheStatusstring | nullrequired
llmPromptTokensnumber | nullrequired
llmCompletionTokensnumber | nullrequired
llmTokensPerSecondnumber | nullrequired
ttsAudioDurationMsnumber | nullrequired
ttsCharacterCountnumber | nullrequired
timelineobject[]required
Show 18 item properties
typeenumrequired
Allowed values:"user_speech"
transcriptstringrequired
offsetMsnumberrequired
typeenumrequired
Allowed values:"agent_response"
contentstringrequired
interruptedbooleanrequired
latencyMsnumber | nullrequired
offsetMsnumberrequired
typeenumrequired
Allowed values:"tool_call"
namestringrequired
argumentsmap<string, any>required
offsetMsnumberrequired
typeenumrequired
Allowed values:"tool_result"
namestringrequired
successbooleanrequired
resultstring | nullrequired
errorstring | nullrequired
offsetMsnumberrequired
missingobject[]required
Show 2 item properties
idstringrequired
reasonenumrequired
Allowed values:"call_not_found""metrics_not_found"
metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

400The request is invalid. `details` lists each field that failed
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 3 child properties
codeenumrequired

A parameter or body field broke a rule

Allowed values:"VALIDATION_ERROR"
messagestringrequired

Human-readable explanation. Do not parse it; branch on `code`

detailsobject[]optional

One entry per field that failed

Show 2 item properties
fieldstringrequired

The offending field

messagestringrequired

The rule it broke

metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

401Missing or invalid credentials
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired

No valid credentials

Allowed values:"UNAUTHORIZED"
messagestringrequired

Human-readable explanation. Do not parse it; branch on `code`

metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

403The credentials are valid but may not use this route
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired

The credentials may not use this route

Allowed values:"FORBIDDEN"
messagestringrequired

Human-readable explanation. Do not parse it; branch on `code`

metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

404Not found, or outside the caller's scope
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired

An id names nothing the caller can see

Allowed values:"RESOURCE_NOT_FOUND"
messagestringrequired

Human-readable explanation. Do not parse it; branch on `code`

metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

500An unexpected server error
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired

An unexpected server failure

Allowed values:"INTERNAL_SERVER_ERROR"
messagestringrequired

Human-readable explanation. Do not parse it; branch on `code`

metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

502
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired
Allowed values:"PERFORMANCE_SERVICE_ERROR"
messagestringrequired
metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested

503
successbooleanrequired

false on every error

errorobjectoptional

What went wrong: a stable `code` to branch on and a human-readable `message`

Show 2 child properties
codeenumrequired
Allowed values:"PERFORMANCE_SERVICE_UNREACHABLE""PERFORMANCE_SERVICE_NOT_CONFIGURED"
messagestringrequired
metadataobjectoptional

Request metadata

Show 3 child properties
timestampstringrequired

When the server answered, ISO 8601 UTC

versionstringrequired

API version

pathstringoptional

The URL that was requested