Submit Video Generation
Submit an asynchronous video generation task — returns `202 Accepted` with a `task_id` to poll; generation takes 30 seconds to several minutes depending on the model. The flow: 1. Call this endpoint to submit the task; on success, returns `202 Accepted` with a `task_id`. 2. Use the `task_id` with `GET /v1/videos/generations/{task_id}` to poll the status. 3. When `status` becomes `completed`, read the video `url` from the response. **Recommended**: poll at intervals of at least 3 seconds; do not set an HTTP timeout for the whole generation flow — only set short timeouts (e.g. 30 s) for individual submit/poll requests. **Clip length and resolution are fixed per model** and priced per clip; `duration` / `size` in the request body are ignored. The current lineup is on the [video generation page](https://router.one/veo-api-china). **Reference image**: `image_url` is required by image-to-video models (exactly one image) and rejected by text-to-video models. It accepts an HTTP(S) URL up to 20 MB; after submission Router One downloads and re-hosts it securely, so even short-lived user-uploaded URLs work.
Authenticate with your API Key. Get your API Key in the Router One console; the format is sk-xxx.
In: header
Model ID. Choose a model that supports video generation; check the console model marketplace.
Text prompt for video generation, describing scene content, camera motion, style, etc.
Accepted but ignored by every currently listed video model: each model produces one fixed clip length (see the video generation page). The field is kept for forward compatibility.
Accepted but ignored by every currently listed video model: resolution is fixed per model and priced per clip. Kept for forward compatibility.
Video aspect ratio. 16:9 for landscape, 9:16 for portrait short video, 1:1 for social-style square. Honored by the Vidu and PixVerse models (default 16:9); the MiniMax and Wan models ignore it.
"16:9" | "9:16" | "1:1"Negative prompt — elements to avoid in the output. Optional; currently ignored by every listed video model.
Reference image URL. Required by image-to-video models (exactly one image); text-to-video models reject it with 400 <model> is text-to-video only: image_url is not supported. Must be HTTP(S) reachable; up to 20 MB. Router One downloads and securely re-hosts it.
uriMulti-reference image URLs. No currently listed model accepts more than one reference image — sending several returns 400 <model> accepts exactly one image_url. Kept for forward compatibility; same per-image constraints as image_url.
items <= 3Model-specific reference input identifier. Only used when the selected model explicitly requires it; it is treated as a reference image, so the same model rules as image_url apply.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.router.one/v1/videos/generations" \ -H "Content-Type: application/json" \ -d '{ "model": "viduq3-turbo", "prompt": "Waves lapping at the shore, dusk sunlight glittering on the water, slow motion", "aspect_ratio": "16:9" }'{
"task_id": "v_8f3a92c1d4e74b6ea0b5f1d29c7e8a01",
"status": "pending"
}{
"error": {
"message": "reference image exceeds 20MB",
"type": "invalid_request_error",
"code": "INVALID_REQUEST",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "invalid api key",
"type": "authentication_error",
"code": "AUTH_INVALID_API_KEY",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "insufficient balance: top up at https://router.one/deposit",
"type": "billing_error",
"code": "INSUFFICIENT_BALANCE",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "rate limit exceeded",
"type": "rate_limit_error",
"code": "RATE_LIMIT_EXCEEDED",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "empty response from upstream",
"type": "api_error",
"code": "INTERNAL_ERROR",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "provider is currently unavailable",
"type": "service_unavailable",
"code": "PROVIDER_UNAVAILABLE",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}{
"error": {
"message": "upstream timeout",
"type": "service_unavailable",
"code": "PROVIDER_UNAVAILABLE",
"request_id": "290dd478f91d8aec68f7535e871376eb"
}
}