Browse documentation

Generate Video

Generate video through nRouter with the async /v1/videos flow, from submit to poll to download, using Veo and Sora through the same key as chat.

Generate high-definition video through an asynchronous 3-step lifecycle (submit, poll, download) via /v1/videos using frontier models including Veo and Sora.

Asynchronous Lifecycle

  1. Submit Job: POST /v1/videos returns a queued job handle:
curl -X POST https://api.nrouter.ai/v1/videos \
  -H "Authorization: Bearer $NROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo-2.0", "prompt": "Timelapse of city traffic at night in 4K.", "seconds": 5, "size": "1280x720"}'

Returns { "id": "nrouter_video_01j89azxckm3287", "status": "queued" }. Options: seconds (5–10), size (1280x720, 1920x1080), fps (24/30), seed.

  1. Poll Status: Query GET /v1/videos/{id} every 3–5 seconds until status reads completed (progress: 100):
curl https://api.nrouter.ai/v1/videos/nrouter_video_01j89azxckm3287 -H "Authorization: Bearer $NROUTER_API_KEY"
  1. Download Video: Stream finalized MP4 binary via GET /v1/videos/{id}/content:
curl https://api.nrouter.ai/v1/videos/nrouter_video_01j89azxckm3287/content -H "Authorization: Bearer $NROUTER_API_KEY" --output video.mp4

Spend logs in Logs record settled charges. See Videos API, Generate Images, and Errors & Rate Limits.

Frequently asked questions

Why is video asynchronous when images are not?

Video generation requires extended render times; an asynchronous job queue prevents long-lived HTTP client timeouts.

Which models can I use?

Veo and Sora models are supported; verify current model availability on the live catalog.

How often should I poll?

Poll every 3 to 5 seconds, backing off toward 10 seconds on long-running renders to avoid rate limiting.

What do I poll with, and where is the cost?

Poll and download using the same virtual key that initiated the job; final spend settles in request logs upon completion.

Was this page helpful?