Endpoints
Speech intelligence
Ask questions grounded on a transcript and run chat completions over your voice data.
Two endpoints turn finished transcripts into answers. POST /v2/speech-understanding answers a single prompt strictly from one transcript. POST /v2/llm/chat-completions runs a multi-turn chat, optionally grounded on a transcript. Both require the referenced transcript to be completed (409 not_ready otherwise).
Speech understanding
POST
/v2/speech-understandingAnswer one prompt strictly from a transcriptThe model is instructed to answer only from the transcript text. When the transcript does not contain the answer, the response says so instead of guessing.
Request body
| Field | Type | Default | Description |
|---|---|---|---|
| transcript_id | string | required | Id of a completed transcript created through the API. |
| prompt | string, 1 to 8000 chars | required | The question or instruction, for example Summarize the action items. |
| model | string or null | null | Optional reasoning model override. Leave unset to use the service default. |
| response_format | string | text | text for prose, json to have the model answer with a JSON object. |
Response
| Field | Type | Description |
|---|---|---|
| id | string | Id of this speech understanding result. |
| transcript_id | string | The transcript the answer is grounded on. |
| model | string | The model that produced the answer. |
| response | string | The answer. With response_format set to json, this string contains a JSON object to parse. |
| created_at | string | ISO 8601 creation time. |
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | The transcript does not exist or is not yours. |
| 409 | not_ready | The transcript is not completed or has no text yet. |
curl -X POST https://api.realtimevoicekit.com/v2/speech-understanding \
-H "Authorization: Bearer rtvk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"transcript_id": "tr_5c8e2f91d0",
"prompt": "List the action items with owners.",
"response_format": "text"
}'Chat completions
POST
/v2/llm/chat-completionsMulti-turn chat, optionally grounded on a transcriptRequest body
| Field | Type | Default | Description |
|---|---|---|---|
| messages | array, 1 to 32 items | required | Conversation messages in order. Each message has role (system, user, or assistant) and content (1 to 24000 characters). |
| model | string or null | null | Optional reasoning model override. |
| transcript_id | string or null | null | When set, the transcript's text (first 60000 characters) is injected as source context so the chat can reference the recording. |
| response_format | string | text | text or json. With json, the assistant answers with a JSON object. |
Response
| Field | Type | Description |
|---|---|---|
| id | string | Id of this completion. |
| object | string | Always chat.completion. |
| created_at | string | ISO 8601 creation time. |
| model | string | The model that produced the completion. |
| choices | array | One choice: index, message with role (assistant) and content, and finish_reason (stop). |
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | transcript_id was set but does not exist or is not yours. |
| 409 | not_ready | transcript_id was set but the transcript is not completed. |
| 422 | (validation) | Empty messages, a bad role, or content out of bounds. |
curl -X POST https://api.realtimevoicekit.com/v2/llm/chat-completions \
-H "Authorization: Bearer rtvk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"transcript_id": "tr_5c8e2f91d0",
"messages": [
{"role": "user", "content": "What pricing objections came up in this call?"}
]
}'{
"id": "chat_1f6b09c2aa",
"object": "chat.completion",
"created_at": "2026-07-22T14:21:37Z",
"model": "voicekit-chat",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Two objections came up: annual pricing felt high, and the team asked about volume discounts."
},
"finish_reason": "stop"
}
]
}