Get Translation Status
Retrieve the current status of a translation project. Use this endpoint to poll for progress and get the translated video URL when processing is complete.
Request
Path Parameters
The unique identifier of the translation project returned from the Start Translation endpoint.
Response
The response structure varies based on the translation status.
Common Fields
The unique identifier of the project
URL to the original uploaded video/audio file
The detected or specified original language
The target language for translation
Duration of the content in seconds
Unix timestamp when the project was created
Current project step. During creation/transcription this reflects those steps (e.g. downloading_content, content_validation, transcription_processing). Once dubbing starts, it may switch to the active dubbing step (e.g. smart_sync, audio_assembling) so status: processing does not pair with actualProgressStep: done.
translationAndTranscriptionProgress
Approximate progress percentage for project creation/transcription (0-100)
Current dubbing step for the target language (e.g. smart_sync, audio_enhancement, video_upload)
Approximate progress percentage for dubbing (0-100)
Current status of the translation: processing, success, or failed
Lip Sync Fields
When lip-sync was requested, the response includes an additional lipSync object:
Lip-sync status and output details (only present when lip-sync was requested) Lip-sync status: PENDING, PROCESSING, COMPLETED, FAILED, REJECTED, or CANCELED
URL of the lip-synced video (available once completed)
Error details if lip-sync failed
Lip-sync mode: standard or pro
When lip-sync is requested, the translation stays in processing until lipSync.status is COMPLETED.
If lip-sync fails, the status becomes failed and the error.code is LIPSYNC_FAILED.
Success Response Fields
When status is success, the following additional fields are included:
URL to download the translated video file
URL to download the translated audio file separately
Failed Response Fields
When status is failed, the following additional field is included:
Error details Machine-readable error code
Human-readable error description
Examples
cURL
TypeScript
JavaScript
Python
PHP
curl -X GET "https://api.voicecheap.ai/v1/translate/abc123-def456-ghi789/status" \
-H "x-api-key: vc_your-api-key"
Response Examples
Processing Status
{
"projectId" : "abc123-def456-ghi789" ,
"projectName" : "My Spanish Translation" ,
"originalVideoUrl" : "https://storage.voicecheap.ai/..." ,
"originalLanguage" : "en" ,
"targetLanguage" : "spanish" ,
"duration" : 125.5 ,
"createdAt" : 1702234567890 ,
"actualProgressStep" : "downloading_content" ,
"translationAndTranscriptionProgress" : 11 ,
"dubbingStep" : "smart_sync" ,
"dubbingProgress" : 30 ,
"status" : "processing"
}
Processing Status (Lip Sync Requested)
{
"projectId" : "abc123-def456-ghi789" ,
"projectName" : "My Spanish Translation" ,
"originalVideoUrl" : "https://storage.voicecheap.ai/..." ,
"originalLanguage" : "en" ,
"targetLanguage" : "spanish" ,
"duration" : 125.5 ,
"createdAt" : 1702234567890 ,
"actualProgressStep" : "finalizing" ,
"translationAndTranscriptionProgress" : 95 ,
"dubbingStep" : "video_upload" ,
"dubbingProgress" : 95 ,
"status" : "processing" ,
"lipSync" : {
"jobId" : "syncjob_123" ,
"status" : "PROCESSING" ,
"videoUrl" : "" ,
"errorMessage" : null ,
"type" : "standard"
}
}
Success Status
{
"projectId" : "abc123-def456-ghi789" ,
"projectName" : "My Spanish Translation" ,
"originalVideoUrl" : "https://storage.voicecheap.ai/..." ,
"originalLanguage" : "en" ,
"targetLanguage" : "spanish" ,
"duration" : 125.5 ,
"createdAt" : 1702234567890 ,
"status" : "success" ,
"translatedVideoUrl" : "https://storage.voicecheap.ai/translated/..." ,
"translatedAudioUrl" : "https://storage.voicecheap.ai/audio/..."
}
Failed Status
{
"projectId" : "abc123-def456-ghi789" ,
"projectName" : "My Spanish Translation" ,
"originalVideoUrl" : "https://storage.voicecheap.ai/..." ,
"originalLanguage" : "en" ,
"targetLanguage" : "spanish" ,
"duration" : 125.5 ,
"createdAt" : 1702234567890 ,
"status" : "failed" ,
"error" : {
"code" : "TRANSCRIPTION_FAILED" ,
"message" : "Could not transcribe the audio. Please ensure the audio quality is sufficient."
}
}
Polling Best Practices
Recommended polling interval: 10-30 secondsTranslation time varies based on video length and complexity. For a typical 2-minute video, expect 2-5 minutes of processing time.
Rate Limit: 30 requests per minuteAvoid polling more frequently than once every 2 seconds to stay within rate limits.
Errors
Status Code Description 401 INVALID_API_KEYThe provided API key is invalid 403 FORBIDDENYou don’t have access to this project 404 PROJECT_NOT_FOUNDThe specified project does not exist 429 RATE_LIMIT_EXCEEDEDToo many requests (limit: 30 requests per minute)