Con la tecnología deChatGPTClaudeGoogle Gemini
Compatible conGoogle DriveDropboxOneDrive

Endpoints

Transcripts

Create, list, read, search, export, and delete transcripts. Full request and response schemas.

Transcripts turn pre-recorded audio or video into text with word timings, confidence scores, and optional speaker labels. Create one from a public audio_url or from an upload_id produced by the upload flow, then poll until it completes.

Status lifecycle

StatusMeaning
queuedAccepted and waiting to start.
processingThe audio is being transcribed. This is the usual status right after creation.
completedText, words, utterances, confidence, and duration are populated.
errorProcessing failed; the error field explains why.

Poll GET /v2/transcripts/{transcript_id} until status is completed or error, or register a webhook_url at creation to receive a callback on the terminal status. Derived reads (sentences, paragraphs, word search, subtitles) return 409 not_ready before completion.

The transcript object

FieldTypeDescription
idstringUnique transcript id.
statusstringqueued, processing, completed, or error.
modelstring or nullModel id the transcript was created with.
titlestring or nullDisplay title. Defaults to the upload filename when created from an upload.
language_codestring or nullLanguage you requested, or null when automatic detection was used.
speaker_labelsbooleanWhether speaker diarization was requested.
textstring or nullFull transcript text. null until completed.
wordsarray or nullPer-word objects with text, start, end (milliseconds), confidence (0 to 1), and speaker when diarization is on.
utterancesarray or nullSpeaker turns with speaker, text, start, end, confidence, and their words. Populated when speaker_labels is true.
confidencenumber or nullOverall confidence between 0 and 1.
audio_duration_secinteger or nullDuration of the source audio in seconds. This is the quantity your usage is metered on.
summarystring or nullGenerated summary. Null unless summarization was requested.
chaptersarray or nullAuto-detected chapters with titles and timings. Null unless auto_chapters was requested.
entitiesarray or nullDetected entities such as people, places, and organizations. Null unless entity_detection was requested.
sentiment_resultsarray or nullPer-segment sentiment results. Null unless sentiment_analysis was requested.
content_safetyobject or nullContent safety report. Null unless content_moderation was requested.
webhook_urlstring or nullThe notification URL registered at creation, echoed back. Null when none was set.
errorstring or nullFailure reason when status is error.
created_atstringISO 8601 creation time.
completed_atstring or nullISO 8601 completion time.

Create a transcript

POST/v2/transcriptsSubmit audio for transcription. Returns 201 with the new transcript.

Request body

FieldTypeDefaultDescription
audio_urlstring or nullnullDirect, publicly reachable URL of the audio or video file. Required unless upload_id is set; omitting both fails validation with 422.
upload_idstring or nullnullId of a completed upload. Takes precedence over audio_url when both are sent.
modelstringwhisper-voicekit-bestPre-recorded model id: whisper-voicekit-best or whisper-voicekit-fast. Unknown ids return 400 unknown_model. See Models.
language_codestring or nullnullLanguage of the audio, for example en, es, pt. Leave null to auto-detect the language.
language_codesarray of strings or nullnullExpected languages for mixed-language audio. When set it overrides language_code and disables auto-detection.
speaker_labelsbooleanfalseDetect speakers and label every utterance and word.
auto_chaptersbooleanfalseSegment the audio into chapters. Results are returned in the chapters field of the completed transcript.
entity_detectionbooleanfalseDetect named entities such as people, places, and organizations. Results are returned in entities.
sentiment_analysisbooleanfalseScore sentiment across the speech. Results are returned in sentiment_results.
summarizationbooleanfalseGenerate a summary. Returned in the summary field.
content_moderationbooleanfalseFlag sensitive content. The report is returned in content_safety.
pii_redactionbooleanfalseRedact personally identifiable information from the transcript text.
profanity_filterbooleanfalseMask profanity in the transcript text.
medical_modebooleanfalseUse the medical domain model for clinical vocabulary. Applies when a single explicit language_code that supports it is set (en, es, fr, de).
keyterms_promptarray of strings or nullnullDomain-specific words and phrases to boost recognition accuracy. The first 1000 entries are used.
webhook_urlstring or nullnullPublic http(s) URL (up to 2048 characters) that receives a JSON notification when the transcript reaches a terminal status. Non-http(s) values fail validation with 422; private, loopback, and cloud metadata hosts are rejected with 400 invalid_webhook_url. See Webhook notifications below.
titlestring or nullnullDisplay title. Defaults to the upload filename when created from an upload.
estimated_duration_secinteger or nullnullEstimated audio length in seconds (minimum 1). Used for a pre-flight credit check: if the estimated cost exceeds your remaining free credit, the request fails early with 402 v2_billing_required instead of mid-job.
Analysis flags surface their results on the completed transcript: summarization fills summary, auto_chapters fills chapters, entity_detection fills entities, sentiment_analysis fills sentiment_results, and content_moderation fills content_safety. pii_redaction and profanity_filter change the returned text itself. For ad-hoc question answering over a finished transcript, use Speech intelligence.

Response

Returns 201 with a transcript object. The status is normally processing at this point; poll the get endpoint until it completes, or register a webhook_url to be notified on completion.

Errors

StatusCodeWhen
400unknown_modelmodel is not a catalog id.
400invalid_webhook_urlwebhook_url is not a public http(s) URL: private, loopback, and cloud metadata hosts are rejected.
402v2_billing_requiredFree credit exhausted, or the estimated_duration_sec estimate exceeds the remaining balance.
404not_foundupload_id does not exist or belongs to another account.
422(validation)Neither audio_url nor upload_id was provided, webhook_url is not an http(s) URL, or another field failed validation.
bash
curl -X POST https://api.realtimevoicekit.com/v2/transcripts \
  -H "Authorization: Bearer rtvk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_url": "https://example.com/podcast-episode.mp3",
    "model": "whisper-voicekit-best",
    "speaker_labels": true,
    "language_code": "en"
  }'
Example 201 response
{
  "id": "tr_5c8e2f91d0",
  "status": "processing",
  "model": "whisper-voicekit-best",
  "title": null,
  "language_code": "en",
  "speaker_labels": true,
  "text": null,
  "words": null,
  "utterances": null,
  "confidence": null,
  "audio_duration_sec": null,
  "summary": null,
  "chapters": null,
  "entities": null,
  "sentiment_results": null,
  "content_safety": null,
  "webhook_url": null,
  "error": null,
  "created_at": "2026-07-22T14:03:11Z",
  "completed_at": null
}

Webhook notifications

When a webhook_url is registered at creation, the API sends an HTTP POST to that URL once the transcript reaches a terminal status. The payload is intentionally minimal; fetch the full transcript with GET /v2/transcripts/{transcript_id} when the notification arrives. Polling remains fully supported, with or without a webhook.

Callback payload
{
  "event": "transcript.completed",
  "transcript_id": "tr_5c8e2f91d0",
  "status": "completed"
}
FieldTypeDescription
eventstringtranscript.completed on success, transcript.error on failure.
transcript_idstringThe transcript that reached a terminal status.
statusstringcompleted or error, matching the event.

Delivery behavior

  • Requests time out after 10 seconds and redirects are not followed. Respond quickly with a 2xx status and do any heavy work asynchronously.
  • A 5xx response or a network failure is retried with backoff. A 4xx response is treated as a permanent failure and is not retried.
  • Retries reuse the same notification for the same transcript and status, so make your handler idempotent on transcript_id plus event.
  • The URL must be publicly reachable over http or https. Private, loopback, and cloud metadata addresses are rejected at creation with 400 invalid_webhook_url.

List transcripts

GET/v2/transcriptsList your API-created transcripts, newest first
Query paramTypeDefaultDescription
limitinteger, 1 to 20050Rows per page.
offsetinteger, 0 or more0Rows to skip.

Returns { "data": [ …transcript objects… ] }. Only transcripts created through the API are listed; transcripts created in the web workspace are separate.

List the 10 most recent transcripts
curl "https://api.realtimevoicekit.com/v2/transcripts?limit=10&offset=0" \
  -H "Authorization: Bearer rtvk_your_api_key"

Get a transcript

GET/v2/transcripts/{transcript_id}Fetch one transcript, including text and words once completed
Path parameterTypeDescription
transcript_idstringThe transcript id returned at creation.

Returns the full transcript object. 404 not_found when the id does not exist or is not yours.

Get a transcript
curl https://api.realtimevoicekit.com/v2/transcripts/tr_5c8e2f91d0 \
  -H "Authorization: Bearer rtvk_your_api_key"

Get sentences

GET/v2/transcripts/{transcript_id}/sentencesThe transcript split into sentences with timings

Splits the completed transcript into sentence segments. Requires status to be completed, otherwise 409 not_ready.

Segment fieldTypeDescription
indexintegerZero-based position of the segment.
textstringSentence text.
startinteger or nullStart of the first word in milliseconds.
endinteger or nullEnd of the last word in milliseconds.
confidencenumber or nullAverage word confidence for the segment.
wordsarray or nullThe word objects that make up the segment.
Get sentences
curl https://api.realtimevoicekit.com/v2/transcripts/tr_5c8e2f91d0/sentences \
  -H "Authorization: Bearer rtvk_your_api_key"

Get paragraphs

GET/v2/transcripts/{transcript_id}/paragraphsThe transcript grouped into readable paragraphs

Groups sentences into paragraphs and returns the same segment shape as the sentences endpoint, wrapped in data. Requires a completed transcript (409 not_ready otherwise).

Get paragraphs
curl https://api.realtimevoicekit.com/v2/transcripts/tr_5c8e2f91d0/paragraphs \
  -H "Authorization: Bearer rtvk_your_api_key"

Export subtitles

GET/v2/transcripts/{transcript_id}/{fmt}Download the transcript as SRT or VTT subtitles
Path parameterTypeDescription
transcript_idstringThe transcript id.
fmtstringsrt or vtt (case-insensitive). Anything else returns 400 bad_format.

Returns the subtitle file as plain text: application/x-subrip for SRT, text/vtt for VTT. Requires a completed transcript (409 not_ready).

Download SRT subtitles
curl -o captions.srt https://api.realtimevoicekit.com/v2/transcripts/tr_5c8e2f91d0/srt \
  -H "Authorization: Bearer rtvk_your_api_key"

Delete a transcript

DELETE/v2/transcripts/{transcript_id}Permanently delete a transcript. Returns 204.

Deletes the transcript and its processed data permanently. Returns 204 No Content on success and 404 not_found when the id does not exist or is not yours. This cannot be undone.

Delete a transcript
curl -X DELETE https://api.realtimevoicekit.com/v2/transcripts/tr_5c8e2f91d0 \
  -H "Authorization: Bearer rtvk_your_api_key"
4.2de 21 opiniones