Getting started
API Reference
Base URL, authentication, error handling, and the full endpoint index for the RealtimeVoiceKIT API.
The RealtimeVoiceKIT API gives you speech-to-text, realtime streaming transcription, voice agents, and speech intelligence over plain HTTPS and WebSockets. This page covers the conventions every endpoint shares. The pages in the sidebar document each endpoint in full, with request parameters, response fields, and runnable examples.
Uploads
Sign an upload, PUT your file, then confirm it for transcription.
Transcripts
Create, list, read, search, export, and delete transcripts.
Realtime
Token minting and the live transcription WebSocket.
Voice agent
Token minting and the conversational voice agent WebSocket.
Speech intelligence
Ask questions over transcripts and run chat completions.
Account and billing
Models, pricing, credits, usage, and checkout.
Base URL
All REST endpoints live under a single base URL. WebSocket endpoints use the same host over wss://.
https://api.realtimevoicekit.com/v2A machine-readable schema of every endpoint is available at GET /v2/openapi.json. It is the same contract this reference documents, filtered to the public surface.
Authentication
Authenticate with an API key in the Authorization header using the Bearer scheme. Keys start with rtvk_ and are created in your workspace under Settings, API keys. Every endpoint requires a key except GET /v2/models and GET /v2/pricing, which are public.
curl https://api.realtimevoicekit.com/v2/credits \
-H "Authorization: Bearer rtvk_your_api_key"A missing, malformed, or revoked key returns 401 with the error code unauthorized.
Content types
- Request bodies are JSON. Send
Content-Type: application/jsonon POST requests with a body. - Responses are JSON, with two exceptions: subtitle exports return plain text (
application/x-subripfor SRT,text/vttfor VTT), and media files are uploaded with a directPUTto a signed storage URL using the file's own content type. - Timestamps in responses are ISO 8601 strings in UTC. Word and segment timings (
start,end) are integer milliseconds from the start of the audio.
Errors
Errors return a JSON envelope with a human-readable message and a stable machine-readable code. Branch on code, not on the message text.
{
"error": {
"message": "Your free API credit is used up. Add a payment method to continue.",
"code": "v2_billing_required"
}
}| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing, malformed, revoked, or unknown API key. |
| 400 | unknown_model | The model id is not in the model catalog. |
| 400 | bad_model | The model exists but is the wrong family for this endpoint, for example a pre-recorded model sent to /v2/realtime/token. |
| 400 | unsupported_media_type | The upload is not a recognized audio or video file. |
| 400 | invalid_size | size_bytes was provided but is not a positive integer. |
| 400 | upload_incomplete | Upload completion was requested before the file reached storage. Retry the PUT, then complete again. |
| 400 | missing_query | Word search was called without any search terms. |
| 400 | bad_format | Subtitle format must be srt or vtt. |
| 400 | invalid_webhook_url | webhook_url is not a public http(s) URL. Private, loopback, and cloud metadata hosts are rejected. |
| 402 | v2_billing_required | Your free credit is used up, or estimated_duration_sec projects a cost above your remaining credit. Start a subscription via POST /v2/billing/checkout. |
| 404 | not_found | The resource does not exist or does not belong to your account. |
| 409 | not_ready | The transcript has not completed yet. Poll GET /v2/transcripts/{transcript_id} until status is completed. |
| 409 | already_api_subscribed | Checkout was requested but an API subscription is already active. |
| 413 | upload_too_large | The file exceeds the 5 GiB upload limit. |
| 502 | stripe_error | The payment provider did not return a checkout URL. Retry later. |
| 503 | billing_unconfigured | Usage billing is not configured on this deployment. |
Requests whose body fails schema validation (for example a POST /v2/transcripts with neither audio_url nor upload_id) return 422 with the framework's standard validation shape: a detail array describing each failing field. All other errors use the envelope above.
Pagination
List endpoints (GET /v2/transcripts and GET /v2/usage) use offset pagination and return newest records first.
| Query param | Type | Default | Description |
|---|---|---|---|
| limit | integer, 1 to 200 | 50 | Maximum number of rows to return. |
| offset | integer, 0 or more | 0 | Number of rows to skip from the newest record. |
Results are wrapped in a data array. To page, increase offset by limit until fewer than limit rows come back.
Credits and billing
Every account starts with 10 USD of free API credit. Usage is metered per second against the per-hour rate of the model you use and drawn from that credit first. When the credit is exhausted, requests that would incur cost return 402 with code v2_billing_required until you start a pay-as-you-go subscription through POST /v2/billing/checkout.
Check your balance at any time with GET /v2/credits, and inspect per-request charges with GET /v2/usage.
Endpoint index
Uploads
/v2/uploads/signCreate an upload and get a signed PUT URL/v2/uploads/{upload_id}/completeConfirm the file reached storageTranscripts
/v2/transcriptsCreate a transcript from a URL or upload/v2/transcriptsList transcripts/v2/transcripts/{transcript_id}Get a transcript/v2/transcripts/{transcript_id}/sentencesGet transcript sentences/v2/transcripts/{transcript_id}/paragraphsGet transcript paragraphs/v2/transcripts/{transcript_id}/word-searchSearch words in a transcript/v2/transcripts/{transcript_id}/{fmt}Export SRT or VTT subtitles/v2/transcripts/{transcript_id}Delete a transcriptRealtime
/v2/realtime/tokenMint a realtime session token/v2/realtime/wsStream audio, receive live transcriptsVoice agent
/v2/voice-agent/tokenMint a voice agent session token/v2/voice-agent/wsRun a realtime voice agent conversationSpeech intelligence
/v2/speech-understandingAsk a question grounded on one transcript/v2/llm/chat-completionsChat completions, optionally grounded on a transcriptAccount and billing
/v2/modelsList models and rates (public)/v2/pricingAlias of /v2/models (public)/v2/creditsGet your credit balance/v2/usageList usage events/v2/usage/summaryUsage totals grouped by product/v2/billing/checkoutStart a pay-as-you-go subscription