Introduction
The query video task endpoint is used to check the status and results of a video generation task by task ID. After submitting a task, you need to periodically poll this endpoint to check the task status until the task is completed or failed.
We recommend polling the task status every 3-5 seconds until the status becomes succeeded or failed.
Authentication
Bearer Token, e.g., Bearer sk-xxxxxxxxxx
Path Parameters
Video generation task ID, returned by the submit task endpoint
Task Status
Status Description Recommended Action queuedTask is queued, waiting to be processed Continue polling in_progressTask is being processed Continue polling succeededTask completed successfully Download video or get video URL failedTask failed Check error details
cURL Example
curl -X GET "https://console.mixroute.io/v1/video/generations/video_69095b4ce0048190893a01510c0c98b0" \
-H "Authorization: Bearer sk-xxxxxxxxxx"
Polling Examples
Python Example
import requests
import time
def poll_task_status ( task_id , api_key , max_wait_time = 300 ):
"""Poll task status until completion"""
url = f "https://console.mixroute.io/v1/video/generations/ { task_id } "
headers = { "Authorization" : f "Bearer { api_key } " }
start_time = time.time()
while True :
response = requests.get(url, headers = headers)
data = response.json()
status = data.get( "status" )
print ( f "Current status: { status } " )
if status == "succeeded" :
video_url = data.get( "url" )
print ( f "✅ Task completed! Video URL: { video_url } " )
return video_url
elif status == "failed" :
error_msg = data.get( "error" , {}).get( "message" , "Unknown error" )
print ( f "❌ Task failed: { error_msg } " )
return None
# Check timeout
if time.time() - start_time > max_wait_time:
print ( "⏰ Timeout" )
return None
# Wait 5 seconds before next query
time.sleep( 5 )
JavaScript Example
async function pollTaskStatus ( taskId , apiKey , maxWaitTime = 300000 ) {
const url = `https://console.mixroute.io/v1/video/generations/ ${ taskId } ` ;
const headers = { 'Authorization' : `Bearer ${ apiKey } ` };
const startTime = Date . now ();
while ( true ) {
const response = await fetch ( url , { headers });
const data = await response . json ();
const status = data . status ;
console . log ( `Current status: ${ status } ` );
if ( status === 'succeeded' ) {
const videoUrl = data . url ;
console . log ( `✅ Task completed! Video URL: ${ videoUrl } ` );
return videoUrl ;
} else if ( status === 'failed' ) {
const errorMsg = data . error ?. message || 'Unknown error' ;
console . error ( `❌ Task failed: ${ errorMsg } ` );
throw new Error ( errorMsg );
}
// Check timeout
if ( Date . now () - startTime > maxWaitTime ) {
throw new Error ( 'Timeout' );
}
// Wait 5 seconds before next query
await new Promise ( resolve => setTimeout ( resolve , 5000 ));
}
}
Response Examples
Task Queued
{
"task_id" : "video_69095b4ce0048190893a01510c0c98b0" ,
"status" : "queued" ,
"format" : "mp4"
}
Task In Progress
{
"task_id" : "video_69095b4ce0048190893a01510c0c98b0" ,
"status" : "in_progress" ,
"format" : "mp4"
}
Task Succeeded (Veo/Alibaba Wanxiang/Doubao Seedance)
{
"task_id" : "video_69095b4ce0048190893a01510c0c98b0" ,
"status" : "succeeded" ,
"format" : "mp4" ,
"url" : "https://nebula-ads.oss-cn-guangzhou.aliyuncs.com/2025/11/18/abc123/video.mp4"
}
Veo and Alibaba Wanxiang include the video URL directly in the response when the task succeeds.
Task Succeeded (Sora 2)
{
"task_id" : "video_69095b4ce0048190893a01510c0c98b0" ,
"status" : "succeeded" ,
"format" : "mp4"
}
Sora 2 model does not return a video URL directly. You need to call the download video endpoint to retrieve the video data.
Task Failed
{
"task_id" : "video_69095b4ce0048190893a01510c0c98b0" ,
"status" : "failed" ,
"format" : "mp4" ,
"error" : {
"code" : 400 ,
"message" : "Prompt contains inappropriate content"
}
}
Response Fields
Field Type Description task_idstring Task ID statusstring Task status formatstring Video format urlstring Video download URL (for models other than Sora 2) errorobject Error information (returned on failure)
Model Differences
Model Returns URL Notes Sora 2 ❌ Requires download endpoint Veo ✅ Returns video URL directly Alibaba Wanxiang ✅ Returns video URL directly Doubao Seedance ✅ Returns video URL directly
Notes
Response fields may vary slightly between different models
Implement exponential backoff strategy to avoid excessive requests
Video generation typically takes 30 seconds to several minutes, please be patient
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request GET \
--url https://console.mixroute.io/v1/video/generations/video_xxx \
--header 'Authorization: Bearer sk-xxxxxxxxxx'
{
"task_id" : "video_xxx" ,
"status" : "succeeded" ,
"format" : "mp4" ,
"url" : "https://example.com/video.mp4"
}