This request will transcribe a recording to text and optionally generate an AI summary of the call.
The recording is transcribed with multichannel speech to text: the caller is on the left audio channel (speaker caller) and the callee is on the right audio channel (speaker callee), so every transcription segment is reliably attributed to a speaker. The language spoken is detected automatically. The transcription (and summary) is stored on the recording, so subsequent requests return the stored result without transcribing again.
The AI summary is written in the language of the employee who owns the recording (the PBX default language for common recordings) and covers agreements, to-do's, meetings/deadlines, decisions and follow up points, followed by a JSON metadata block with calendar events and a sensitivity classification.
| URL | https://api.telecomx.dk/pbx/recording/RECORDING_ID/transcribe?summary=BOOLEAN | |
|---|---|---|
| Method | GET | |
| Access level | PERSONAL, VIEWER, MANAGER, OWNER, RESELLER or ADMIN if the recording belongs to the user. Users below MANAGER also require the transcribe permission (and the summarize permission when summary is true) from the PBX recording settings. MANAGER and up for common recordings. |
|
| Param | RECORDING_ID | Id of the recording (24 hex-char string) |
| Query | summary | [optional] True to also generate an AI summary of the recording, default false. |
https://api.telecomx.dk/pbx/recording/12345678901234567890AAAA/transcribe https://api.telecomx.dk/pbx/recording/12345678901234567890AAAA/transcribe?summary=true
| JSON object | ||
|---|---|---|
| success | Boolean | True on success |
| language | String | ISO 639-1 code of the detected language |
| transcription | Array | The transcription as interleaved full-sentence segments sorted by start time |
| transcription[].speaker | String | Who is speaking: caller or callee - references the recordings caller/callee objects |
| transcription[].start | Number | Start time of the segment in fractional seconds |
| transcription[].text | String | The sentence spoken |
| ai | Object | AI summary of the recording. Null when no summary has been generated and summary was not true. |
| ai.summary | String | The AI-generated summary of the call as plain text. |
| ai.sensitivityLevel | String | Sensitivity of the recording: NORMAL, CONFIDENTIAL or SENSITIVE. |
| ai.sensitivityReasons | Array | Short texts explaining why the sensitivity level was set. |
| ai.events | Array | Calendar events extracted from the call - see Get. |
{ "success": true, "language": "da", "transcription": [ { "speaker": "caller", "start": 0.12, "text": "Hej, det er Hans fra Northwind." }, { "speaker": "callee", "start": 3.45, "text": "Hej Hans, hvad kan jeg hjælpe med?" } ], "ai": { "summary": "1. Resumé\nHans ringede vedrørende...", "events": [ { "title": "Møde i Roskilde", "start": "2026-08-14T15:00:00.000Z", "end": "2026-08-14T16:00:00.000Z", "location": "Roskilde", "notes": null } ], "sensitivityLevel": "NORMAL", "sensitivityReasons": [] } }
| Error code | Message | Description |
|---|---|---|
| 404 | not_found | Recording not found |
| 403 | common | Minimum manager is required to access common recordings |
| 403 | employee | You may only access your own recordings |
| 403 | recording.transcribe | Transcription of recordings is not permitted |
| 403 | recording.summarize | Summarization of recordings is not permitted |
| 500 | internal_error | <Unspecified> |