Video API Overview
curl --request POST \
--url https://api.mixroute.ai/v1/video/generationsimport requests
url = "https://api.mixroute.ai/v1/video/generations"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.mixroute.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixroute.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixroute.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixroute.ai/v1/video/generations")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixroute.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyVideo Series
Video API Overview
Choose a video model family and its parameter reference, then use the shared asynchronous task workflow.
POST
/
v1
/
video
/
generations
Video API Overview
curl --request POST \
--url https://api.mixroute.ai/v1/video/generationsimport requests
url = "https://api.mixroute.ai/v1/video/generations"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.mixroute.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixroute.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixroute.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixroute.ai/v1/video/generations")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixroute.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyChoose a video family below to see its request schema and examples. MixRoute uses one asynchronous task workflow, while each model keeps its own generation parameters.
Use the exact
Video Families
| Family | Parameter reference | Request structure |
|---|---|---|
| Seedance | Seedance | model, prompt, asset plus metadata for every vendor generation field. |
| Doubao | Doubao | doubao-seedance-* routes; top-level model/prompt/asset, provider fields in metadata. |
| Dreamina | Dreamina | dreamina-seedance-* routes; top-level model/prompt/asset, provider fields in metadata. |
| Google Veo | Veo | Top-level model/prompt; flat metadata.durationSeconds, metadata.aspectRatio, etc. |
| MiniMax H3 | MiniMax H3 | Top-level model/prompt; H3 fields under metadata.content, metadata.resolution, metadata.duration, metadata.ratio. |
| Wan | Wan | Root model; native input and parameters nested inside metadata. |
| OpenAI Sora 2 | Sora 2 | See its dedicated model page and download endpoint. |
| Gemini Omni | Gemini Omni | See its dedicated model page; do not reuse Veo generation fields. |
Endpoints and Authentication
| Action | Method and URL |
|---|---|
| Create task | POST https://api.mixroute.ai/v1/video/generations |
| Query task | GET https://api.mixroute.ai/v1/video/generations/{task_id} |
| Sora download | GET https://api.mixroute.ai/v1/video/generations/download?id={task_id} |
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
model identifier from your account’s Model Marketplace or List Models. A vendor release alone does not imply MixRoute access.
Workflow
- Select a family page and construct that model’s request.
- Submit it and retain the MixRoute
task_id(some routes also returnid). - Use Query Video Task until success or a terminal failure. Submission success does not mean the video has finished.
- Read the result URL returned for your route. Use Download Video for Sora routes that require the separate download endpoint.
Submission Response
Illustrative gateway response:{
"task_id": "TASK_ID",
"id": "TASK_ID",
"object": "video",
"model": "dreamina-seedance-2-0-260128",
"status": "queued"
}
Keep the submitted task ID rather than substituting an upstream operation name or file ID. A timeout after submission is not proof that no task was created; check the console before resubmitting to avoid duplicate paid tasks.