Get a call transcript
curl --request GET \
--url https://api.kallabot.com/v1/calls/{call_id}/transcript \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kallabot.com/v1/calls/{call_id}/transcript', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kallabot.com/v1/calls/{call_id}/transcript"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"call_id": "<string>",
"turns": [
{
"turn_index": 123,
"speaker": "user",
"speaker_label": "<string>",
"start_offset_ms": 123,
"end_offset_ms": 123,
"duration_ms": 123,
"language": "<string>",
"confidence": "<string>",
"interrupted": false,
"silence_before_ms": 123,
"stt_latency_ms": 123,
"llm_ttft_ms": 123,
"tts_ttfb_ms": 123,
"end_to_end_ms": 123,
"stt_model": "<string>",
"llm_model": "<string>",
"tts_voice": "<string>",
"text_preview": "<string>",
"transcript": "<string>",
"generated_content": "<unknown>",
"speech_evidence": "<unknown>"
}
]
}{
"type": "https://docs.kallabot.com/errors/unsupported_api_version",
"title": "Kallabot-Version names a version this API doesn't have",
"status": 400,
"code": "unsupported_api_version",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/unauthenticated",
"title": "Missing or invalid API key",
"status": 401,
"code": "unauthenticated",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/insufficient_scope",
"title": "The key lacks a required scope",
"status": 403,
"code": "insufficient_scope",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/not_found",
"title": "Not found (or not visible to this key)",
"status": 404,
"code": "not_found",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/invalid_request",
"title": "One or more fields are not valid",
"status": 422,
"code": "invalid_request",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/sdk_version_unsupported",
"title": "This SDK release is switched off: upgrade the SDK",
"status": 426,
"code": "sdk_version_unsupported",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"retryable": true
}{
"type": "https://docs.kallabot.com/errors/internal_error",
"title": "Something went wrong on our side",
"status": 500,
"code": "internal_error",
"retryable": true
}Calls
Get a call transcript
Returns the transcript turn by turn, with who spoke and per-turn timing. Needs call:content; every read is recorded in the workspace’s audit log.
Scopes: call:read, call:content
GET
/
v1
/
calls
/
{call_id}
/
transcript
Get a call transcript
curl --request GET \
--url https://api.kallabot.com/v1/calls/{call_id}/transcript \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.kallabot.com/v1/calls/{call_id}/transcript', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kallabot.com/v1/calls/{call_id}/transcript"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"call_id": "<string>",
"turns": [
{
"turn_index": 123,
"speaker": "user",
"speaker_label": "<string>",
"start_offset_ms": 123,
"end_offset_ms": 123,
"duration_ms": 123,
"language": "<string>",
"confidence": "<string>",
"interrupted": false,
"silence_before_ms": 123,
"stt_latency_ms": 123,
"llm_ttft_ms": 123,
"tts_ttfb_ms": 123,
"end_to_end_ms": 123,
"stt_model": "<string>",
"llm_model": "<string>",
"tts_voice": "<string>",
"text_preview": "<string>",
"transcript": "<string>",
"generated_content": "<unknown>",
"speech_evidence": "<unknown>"
}
]
}{
"type": "https://docs.kallabot.com/errors/unsupported_api_version",
"title": "Kallabot-Version names a version this API doesn't have",
"status": 400,
"code": "unsupported_api_version",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/unauthenticated",
"title": "Missing or invalid API key",
"status": 401,
"code": "unauthenticated",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/insufficient_scope",
"title": "The key lacks a required scope",
"status": 403,
"code": "insufficient_scope",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/not_found",
"title": "Not found (or not visible to this key)",
"status": 404,
"code": "not_found",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/invalid_request",
"title": "One or more fields are not valid",
"status": 422,
"code": "invalid_request",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/sdk_version_unsupported",
"title": "This SDK release is switched off: upgrade the SDK",
"status": 426,
"code": "sdk_version_unsupported",
"retryable": false
}{
"type": "https://docs.kallabot.com/errors/rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"retryable": true
}{
"type": "https://docs.kallabot.com/errors/internal_error",
"title": "Something went wrong on our side",
"status": 500,
"code": "internal_error",
"retryable": true
}Authorizations
An API key from Settings → API keys, sent as Authorization: Bearer kb_live_…. A workspace key starts kb_; a personal key starts kbp_ and acts as its owner.
Headers
The API version to answer as, a date (YYYY-MM-DD). Leave it out for the current version (2026-11-07). An unknown version is refused with 400 unsupported_api_version.
Available options:
2026-11-07 Example:
"2026-11-07"