What you need
- An account or workspace API key:
Authorization: Bearer {id}.{secret} - Voice File Jobs enabled for that workspace by a Tiro administrator
- transcriptLocaleHints: up to 1 (optional)
- If not provided, language will be automatically detected
- translationLocales: up to 5 (optional)
End-to-end checklist
- Create job → receive
{ id, uploadUri } - Upload audio to
uploadUri - Call
PUT /v1/external/voice-file/jobs/{jobId}/upload-complete - Poll job status until completion
- Fetch transcript and (optionally) translations
- Get paragraph summaries for better content understanding
How do you receive updates and delete a job?
Subscribe tovoice_file_job.created, voice_file_job.completed, voice_file_job.failed, or voice_file_job.deleted to receive lifecycle updates without polling. Webhook payloads contain job metadata, not transcript text. Fetch transcript content with GET /v1/external/voice-file/jobs/{jobId}/transcript.
Call DELETE /v1/external/voice-file/jobs/{jobId} to remove a job in any status. Tiro removes the audio and generated results, and ignores processing callbacks that arrive after deletion.
How does Tiro store and protect voice file data?
Tiro stores uploaded audio in Tiro-managed object storage and stores transcripts and translations in the Tiro service database. The API does not provide a configurable automatic retention period. CallDELETE /v1/external/voice-file/jobs/{jobId} when your application no longer needs the data.
An account API key can access only the jobs it created; a workspace API key can access every job in the same workspace. Deleting a job also removes its audio, transcript, and translations, and the job can no longer be retrieved.
Polling strategy (recommended)
- Poll
GET /v1/external/voice-file/jobs/{jobId}with exponential backoff- Start at 1–2s interval, then 4s, 8s, up to 30s cap
- Stop conditions:
- Success:
status=COMPLETED - Failure:
status=FAILED
- Success:
- After success:
- Always fetch transcript:
GET /v1/external/voice-file/jobs/{jobId}/transcript - If you requested translations:
GET /v1/external/voice-file/jobs/{jobId}/translationsor per-locale endpoint - Get paragraph summaries:
- For transcript:
GET /v1/external/voice-file/jobs/{jobId}/transcript/paragraph-summary - For translations:
GET /v1/external/voice-file/jobs/{jobId}/translations/{locale}/paragraph-summary
- For transcript:
- Always fetch transcript:
The final status for successful processing is
COMPLETED. This means all processing is complete including transcript, translation (if requested), and paragraph summaries for both.File Limits & Requirements
Supported Audio Formats
The supported file formats are as follows. Audio Formats:
Video Formats (audio extraction):