curl -X GET "https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight" \
-H "Authorization: Bearer talq_your_environment_token_here"
const response = await fetch(
'https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight',
{ headers: { Authorization: 'Bearer talq_your_environment_token_here' } }
);
const { data } = await response.json();
if (data.analysis_status === 'pending') {
// The analysis runs after the call ends. Query again later.
}
{
"success": true,
"data": {
"call_id": "01a0c5a5-390e-710a-a3aa-cab502215d09",
"analysis_status": "completed",
"duration": 64,
"human_detected": true,
"objective_achieved": false,
"call_result": "partial_contact",
"collected_data": {
"intent": null,
"agreed_amount": null,
"agreed_date": null,
"whatsapp_confirmed": null
},
"campaign_id": "019ea766-4f99-731a-ad31-d99ac48d4812",
"summary": "The agent tried to start a conversation with Mark, but the call was interrupted twice. Mark confirmed his identity; no agreement was reached.",
"transcript": [
{
"role": "assistant",
"content": "Hi, am I speaking with Mark?",
"timestamp": "2026-09-21T20:25:46.000000Z"
},
{
"role": "user",
"content": "Hello?",
"timestamp": "2026-09-21T20:26:13.000000Z"
},
{
"role": "assistant",
"content": "Hello Mark, this is Ana from the partner office handling your financing.",
"timestamp": "2026-09-21T20:26:13.000000Z"
}
]
}
}
Calls & Campaigns
Get call insight
Return the conversation result of one call: analysis status, collected data, summary and transcript
GET
/
api
/
v1
/
calls
/
{call_id}
/
insight
curl -X GET "https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight" \
-H "Authorization: Bearer talq_your_environment_token_here"
const response = await fetch(
'https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight',
{ headers: { Authorization: 'Bearer talq_your_environment_token_here' } }
);
const { data } = await response.json();
if (data.analysis_status === 'pending') {
// The analysis runs after the call ends. Query again later.
}
{
"success": true,
"data": {
"call_id": "01a0c5a5-390e-710a-a3aa-cab502215d09",
"analysis_status": "completed",
"duration": 64,
"human_detected": true,
"objective_achieved": false,
"call_result": "partial_contact",
"collected_data": {
"intent": null,
"agreed_amount": null,
"agreed_date": null,
"whatsapp_confirmed": null
},
"campaign_id": "019ea766-4f99-731a-ad31-d99ac48d4812",
"summary": "The agent tried to start a conversation with Mark, but the call was interrupted twice. Mark confirmed his identity; no agreement was reached.",
"transcript": [
{
"role": "assistant",
"content": "Hi, am I speaking with Mark?",
"timestamp": "2026-09-21T20:25:46.000000Z"
},
{
"role": "user",
"content": "Hello?",
"timestamp": "2026-09-21T20:26:13.000000Z"
},
{
"role": "assistant",
"content": "Hello Mark, this is Ana from the partner office handling your financing.",
"timestamp": "2026-09-21T20:26:13.000000Z"
}
]
}
}
Get call insight
Returns what the agent captured in one conversation: whether a person answered, the result, the data the agent was configured to collect, a summary and the full transcript. This is the same information theevent_call_report webhook delivers, available on demand. Use it to reconcile a call without depending on the webhook, or to read the summary and transcript, which are not included in List calls because of their size.
Endpoint
GET /api/v1/calls/{call_id}/insight
Path parameters
string
required
The call’s
id, as returned by List calls or Make a call.Request headers
string
required
Bearer token. Format:
Bearer talq_your_environment_token_hereExample request
curl -X GET "https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight" \
-H "Authorization: Bearer talq_your_environment_token_here"
const response = await fetch(
'https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight',
{ headers: { Authorization: 'Bearer talq_your_environment_token_here' } }
);
const { data } = await response.json();
if (data.analysis_status === 'pending') {
// The analysis runs after the call ends. Query again later.
}
Response
Success response (200 OK)
{
"success": true,
"data": {
"call_id": "01a0c5a5-390e-710a-a3aa-cab502215d09",
"analysis_status": "completed",
"duration": 64,
"human_detected": true,
"objective_achieved": false,
"call_result": "partial_contact",
"collected_data": {
"intent": null,
"agreed_amount": null,
"agreed_date": null,
"whatsapp_confirmed": null
},
"campaign_id": "019ea766-4f99-731a-ad31-d99ac48d4812",
"summary": "The agent tried to start a conversation with Mark, but the call was interrupted twice. Mark confirmed his identity; no agreement was reached.",
"transcript": [
{
"role": "assistant",
"content": "Hi, am I speaking with Mark?",
"timestamp": "2026-09-21T20:25:46.000000Z"
},
{
"role": "user",
"content": "Hello?",
"timestamp": "2026-09-21T20:26:13.000000Z"
},
{
"role": "assistant",
"content": "Hello Mark, this is Ana from the partner office handling your financing.",
"timestamp": "2026-09-21T20:26:13.000000Z"
}
]
}
}
Response fields
boolean
required
Whether the request succeeded.
object
required
Show Insight object
Show Insight object
string
required
The call’s
id.string
required
State of the post-call analysis. Options:
completed, pending, unavailable. See Reading analysis_status.integer | null
required
Call duration in seconds. Comes from the call itself, not from the analysis, so it is present in every state.
null when no talk time was measured (see notes).boolean | null
required
A person answered the call.
boolean | null
required
The objective configured on the agent was reached.
string | null
required
Options:
success, partial_contact, unsuccessful.object | null
required
The fields the agent is configured to collect (“fields to collect”), with the values extracted from the conversation. The keys are the ones defined on your agent.
{} when nothing was collected.string | null
required
Campaign that originated the dial.
null for calls outside a campaign. Each retry is its own call, and all of them point to the same campaign.string | null
required
Summary of the conversation produced by the analysis.
array
required
Turns of the conversation in chronological order. Empty when there was no conversation. May already be filled while
analysis_status is pending: the transcript is stored before the analysis runs.human_detected, objective_achieved, call_result, collected_data and summary are null whenever analysis_status is not completed. A false in those fields is a real result of the analysis, never its absence.
Reading analysis_status
The analysis runs after the call ends, usually within a minute. A call queried right after it ends has no result yet.
| Value | Meaning | What to do |
|---|---|---|
completed | The analysis finished. The fields are reliable. | Use them. |
pending | The call is still in progress, or ended less than 30 minutes ago and the analysis may still arrive. | Query again later. This is not a result. |
unavailable | There is no analysis and there will be none: nobody answered (no-answer, busy, failed, canceled), the conversation was empty, or the analysis did not complete within the window. | Treat as “no result”. |
unavailable back to completed. Once you see unavailable, stop querying.
voicemail calls follow the normal flow (pending, then completed or unavailable), because the agent may have talked before the voicemail was detected.
Error responses
404 Not found
The call does not exist or belongs to another environment.{
"success": false,
"message": "Not found",
"error": "Not found"
}
401 Unauthorized
{
"message": "Unauthenticated."
}
Notes
duration: null on voicemail, no-answer, failed and busy calls means no talk time was measured. It is not zero.Batch reconciliation. To reconcile a day, use List calls with
include=insight, at least 30 minutes after the last call ended. pending disappears and you get one request per page instead of one per call.Deliberately excluded. The provider’s call SID, internal routing flags and the remaining analysis fields (sentiment, objections, script completion) are not part of this response.
Related endpoints
- List calls:
GET /api/v1/calls?include=insight— the same block, withoutsummaryandtranscript, for a whole page of calls. - Get agent calls:
GET /api/v1/agents/{agent_id}/calls?include=insight - Get recording URL:
GET /api/v1/calls/{call_id}/recording-url
Was this page helpful?