Call Analysis
Retrieves the AI-generated summary and speaker-separated transcript for a specific call. The response includes the transcription and summary status, when the transcription record was created, the full summary, and each utterance in the conversation.
https://admin.zvmstelecom.net/api/v1/domains/{DOMAIN_UUID}/cdrs/{XML_CDR_UUID}/analysisPermissions. Authenticate as described in Authentication. Your API user must have access to the requested domain and the xml_cdr_view permission.
Path Parameters
Your domain's UUID, provided with your API credentials.
The ID of the call you want analysis for, taken from the xml_cdr_uuid field of a List Call History result.
This endpoint takes no query parameters or request body.
Example Request
XML_CDR_UUID="YOUR_XML_CDR_UUID" curl -s "https://admin.zvmstelecom.net/api/v1/domains/${DOMAIN_UUID}/cdrs/${XML_CDR_UUID}/analysis" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Accept: application/json" | python3 -m json.tool
Response
A 200 response returns the newest transcription record for the call. If a call has more than one transcription record, you get the most recently created one, even if it is still processing.
| Field | Type | Description |
|---|---|---|
xml_cdr_uuid | string (UUID) | Unique ID of the call. |
status | string | Transcription processing status. |
summary_status | string or null | Summary processing status. |
created_at | string or null | When the transcription record was created. This is not the call's start time. |
summary_payload | object or null | The full stored summary, including any analysis fields produced by the configured summarization process. |
utterances | array or null | Speaker-separated transcript segments. Other transcription result fields are left out. |
created_at is returned as stored, typically in YYYY-MM-DD HH:MM:SS format with no time zone offset. Confirm the time zone with us before converting it.
The structure of summary_payload depends on the configured analysis format. Build your integration to tolerate added or missing summary properties.
Utterance fields
In the current transcription format, each utterance contains:
| Field | Type | Description |
|---|---|---|
start | number | Segment start time, in milliseconds from the beginning of the recording. |
end | number | Segment end time, in milliseconds from the beginning of the recording. |
text | string | Transcribed speech for the segment. |
speaker | string | Speaker label within the recording, such as A, B, or C. |
confidence | number | Transcription confidence reported by the provider, generally between 0 and 1. |
Speaker labels are not identities. Labels tell voices apart within one recording. They don't identify an employee, customer, extension, or named person. Utterances are returned as stored, so their fields may vary by transcription provider.
Example response
This example is illustrative. Status values and summary properties depend on your processing configuration and stored data.
{
"xml_cdr_uuid": "c0ec8113-aa15-40ac-8437-47185dd9dcf4",
"status": "completed",
"summary_status": "completed",
"created_at": "2026-10-19 20:15:30",
"summary_payload": {
"summary": "The caller asked about vehicle body repairs and was referred to a collision repair center.",
"sentiment": "neutral",
"action_items": [
"Contact the recommended collision repair center."
]
},
"utterances": [
{
"end": 110830,
"text": "Sorry, you said Sterling Collision Center?",
"start": 107710,
"speaker": "B",
"confidence": 0.8814426
},
{
"end": 112990,
"text": "Correct.",
"start": 112350,
"speaker": "C",
"confidence": 0.9996745
}
]
}
Processing Behavior
Transcription and summarization run separately. A successful response means a transcription record was found, not that both stages have finished.
summary_payloadmay benullwhile the summary is unavailable.utterancesmay benullwhile the conversation segments are unavailable.- An empty
utterancesarray means the stored transcript has no segments. - Check both
statusandsummary_statusto tell whether processing has finished.
Polling. If you're waiting on processing, retry with a reasonable delay and backoff. Avoid rapid continuous polling, and stop retrying once processing reports a terminal failure.
Errors
| HTTP status | Meaning |
|---|---|
400 | An identifier failed UUID validation (after authorization checks). |
401 | Authentication is missing or invalid. |
403 | The API user lacks access to the domain or the required permission. |
404 | The call wasn't found in the requested domain, or it has no transcription record. |
429 | The API rate limit was exceeded. |
500 | An unexpected server error occurred. |
A call with no transcription record returns the error code transcription_not_found. That doesn't necessarily mean processing failed: the record may not have been created yet, or transcription may not have been requested for the call.
Authorization checks run before identifier validation, so a request for a domain you can't access may return 403 before its UUIDs are checked.
Integration notes
- Use the
xml_cdr_uuidfrom List Call History to match analysis to the right call in your application. - This endpoint only retrieves existing analysis. It doesn't start transcription, regenerate summaries, or return audio. For audio, use Recording URL.
Treat transcripts as private customer data. Responses include Cache-Control: private, no-store. Restrict access to transcripts and summaries within your application, and never expose your API token in public website code.