Skip to main content
GET
https://console.mixroute.io
/
v1
/
video
/
generations
/
{task_id}
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"
}

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

task_id
string
required
Video generation task ID, returned by the submit task endpoint

Task Status

StatusDescriptionRecommended Action
queuedTask is queued, waiting to be processedContinue polling
in_progressTask is being processedContinue polling
succeededTask completed successfullyDownload video or get video URL
failedTask failedCheck 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

FieldTypeDescription
task_idstringTask ID
statusstringTask status
formatstringVideo format
urlstringVideo download URL (for models other than Sora 2)
errorobjectError information (returned on failure)

Model Differences

ModelReturns URLNotes
Sora 2Requires download endpoint
VeoReturns video URL directly
Alibaba WanxiangReturns video URL directly
Doubao SeedanceReturns 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 --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"
}