Prerequisites
- A DeepL API account with Voice Translate Job API access
- An audio file in a supported source format
curland a shell, or any HTTP client
The four-step workflow
Translating a file is always four steps: create a job, upload the file, poll for completion, and download each result. Each step is described below using the same example: a 15 MB English MP3 (podcast-episode-42.mp3) translated into German plain text and Spanish audio.
1
Create a job
Send a POST request to/v1/jobs/voice/translate with the source file metadata and your list of target outputs.201 response returns three fields you’ll need immediately:upload_url is where you’ll PUT the file in the next step. The signature authorizes that upload. The job_id is how you check status and correlate results.2
Upload the source file
PUT your audio file directly to theupload_url from the previous response. Include the signature as a query parameter and set Content-Type to match the content_type you declared when creating the job.200 response with no body confirms the upload succeeded. Processing begins immediately.3
Poll for status
GET/v1/jobs/voice/translate/{job_id} to check progress. Results for each target are returned in the same order as the targets array in your create request."status": "processing":"status": "complete" and a download_url plus a signature for that result:complete, failed, or downloaded). A reasonable polling interval is 10-30 seconds for short files; longer files may take several minutes. Check the updated_at timestamp to detect whether the job has made progress since your last poll.Each target is processed independently. A failure on one target does not affect the others — download whichever results are complete.4
Download results
For eachcomplete result, GET the download_url with the result’s signature as a query parameter:text/plain → .txt, application/x-subrip → .srt, audio types → the container format you requested).Handling partial failures
Targets fail independently. Always check each result’sstatus before downloading. If a target fails, the error.message field describes the problem. You cannot retry a failed target — create a new job for any targets that need to be re-processed.
Requesting multiple output types
A single job can produce text, subtitles, and audio from the same source file. Add entries to thetargets array:
Next steps
- API Reference: Create Job — full request and response schemas
- API Reference: Get Job Status — status field definitions
- Reference: supported formats, languages, and limits
- For live audio, see the Real-Time Voice Quickstart