curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow cinematic drone shot over misty mountains at sunrise",
"aspectRatio": "16:9",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo",
"prompt": "A barista pours latte art in a cozy cafe, ambient chatter",
"aspectRatio": "16:9",
"duration": 8,
"sound": true
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-pro",
"prompt": "The character turns and smiles at the camera",
"image": "https://cdn.example.com/start.jpg",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "A golden retriever surfs a small wave at sunset, slow motion",
"duration": 8
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Character walks through neon alley, same outfit as reference",
"aspectRatio": "9:16",
"duration": 10,
"referenceImages": ["https://cdn.example.com/ref.jpg"]
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Smooth transition from day to night over the city skyline",
"aspectRatio": "16:9",
"duration": 5,
"image": "https://cdn.example.com/frame-start.jpg",
"lastImage": "https://cdn.example.com/frame-end.jpg"
}'
{
"success": true,
"generation": {
"id": "<string>",
"status": "<string>"
},
"model": "<string>",
"creditsDeducted": 123,
"creditsRemaining": 123
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}Create video
Queue a video generation job with Sora 2, Veo 3, Kling, and other supported models, then poll until the finished video is ready.
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow cinematic drone shot over misty mountains at sunrise",
"aspectRatio": "16:9",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo",
"prompt": "A barista pours latte art in a cozy cafe, ambient chatter",
"aspectRatio": "16:9",
"duration": 8,
"sound": true
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-pro",
"prompt": "The character turns and smiles at the camera",
"image": "https://cdn.example.com/start.jpg",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "A golden retriever surfs a small wave at sunset, slow motion",
"duration": 8
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Character walks through neon alley, same outfit as reference",
"aspectRatio": "9:16",
"duration": 10,
"referenceImages": ["https://cdn.example.com/ref.jpg"]
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Smooth transition from day to night over the city skyline",
"aspectRatio": "16:9",
"duration": 5,
"image": "https://cdn.example.com/frame-start.jpg",
"lastImage": "https://cdn.example.com/frame-end.jpg"
}'
{
"success": true,
"generation": {
"id": "<string>",
"status": "<string>"
},
"model": "<string>",
"creditsDeducted": 123,
"creditsRemaining": 123
}{
"error": "<string>",
"success": true,
"code": "<string>",
"message": "<string>"
}generation.id until status is COMPLETED or FAILED.
Not sure which video model to use? Start with the comparison, then pick a key below.
Supported models
Pass the model key in themodel body field. Default: seedance-2.0.
| Model key | Name | Duration | Aspect ratios | Sound |
|---|---|---|---|---|
kling-standard | Kling v3.0 Standard | 1–15s | 16:9, 1:1, 9:16 | ✅ sound |
kling-pro | Kling v3.0 Pro | 3–15s | 16:9, 1:1, 9:16 | ✅ sound |
veo | Google Veo 3.1 | 4, 6, or 8s | 16:9, 9:16 | ✅ sound |
veo-fast | Google Veo 3.1 Fast | 4, 6, or 8s | 16:9, 9:16 | ✅ sound |
veo-lite | Google Veo 3.1 Lite | 4, 6, or 8s | 16:9, 9:16 | ✅ sound |
sora-2 | OpenAI Sora 2 | 4, 8, 12, 16, or 20s | 16:9, 9:16 | — |
sora-2-pro | OpenAI Sora 2 Pro | 4, 8, 12, 16, or 20s | 16:9, 9:16 | — |
wan | Alibaba Wan 2.6 | 5–15s | 16:9, 9:16 | — |
seedance-2.0 | Seedance 2.0 (720p) | 4–15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | generateAudio |
seedance-2.0-fast | Seedance 2.0 Fast (720p) | 4–15s | 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | generateAudio |
image / lastImage for start/end frames, referenceImages (plus referenceVideos / referenceAudios on Seedance) for reference-guided generation, negativePrompt, sound / generateAudio, and resolution (Veo / Wan).
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer uns_* API key or Clerk JWT |
Idempotency-Key | No | Max 128 chars. Replays the same response for 24h on API key requests |
Content-Type | Yes | application/json |
Request body
seedance-2.0.5. The valid range depends on the model (see table above).16:9. Valid values depend on the model (see table above).false. Supported by Kling v3 and Veo 3.1 models — increases credit cost.720p or 1080p for Veo 3.1 and Wan 2.6 models. Ignored on Seedance, which is fixed at 720p.false.Credits
| Model | Pricing |
|---|---|
kling-standard | 5s: 20 · 10s: 35 · 15s: 50 — with sound: 25 / 50 / 75 |
kling-pro | 5s: 45 · 10s: 85 · 15s: 125 — with sound: 65 / 125 / 190 |
veo | 9 credits/second — with sound: 18 credits/second |
veo-fast | 4.5 credits/second — with sound: 6.75 credits/second (rounded up) |
veo-lite | 3.6 credits/second (rounded up) |
sora-2 | 4s: 20 · 8s: 35 · 12s: 50 · 16s: 65 · 20s: 80 |
sora-2-pro | 4s: 50 · 8s: 95 · 12s: 145 · 16s: 190 · 20s: 240 |
wan | 720p — 5s: 20 · 10s: 40 · 15s: 60; 1080p — 5s: 30 · 10s: 60 · 15s: 90 |
seedance-2.0 | 5s: 64 · 10s: 127 · 15s: 190 |
seedance-2.0-fast | 5s: 37 · 10s: 74 · 15s: 111 |
Async completion
PollGET /video/status/{id} — see Poll video status. No webhooks.
Response
{
"success": true,
"generation": {
"id": "cm123abc",
"status": "QUEUED"
},
"model": "seedance-2.0",
"creditsDeducted": 40,
"creditsRemaining": 60
}
Examples
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow cinematic drone shot over misty mountains at sunrise",
"aspectRatio": "16:9",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo",
"prompt": "A barista pours latte art in a cozy cafe, ambient chatter",
"aspectRatio": "16:9",
"duration": 8,
"sound": true
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-pro",
"prompt": "The character turns and smiles at the camera",
"image": "https://cdn.example.com/start.jpg",
"duration": 5
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "A golden retriever surfs a small wave at sunset, slow motion",
"duration": 8
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Character walks through neon alley, same outfit as reference",
"aspectRatio": "9:16",
"duration": 10,
"referenceImages": ["https://cdn.example.com/ref.jpg"]
}'
curl -X POST "https://mvp.tryunsora.com/api/v1/videos/create" \
-H "Authorization: Bearer uns_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"prompt": "Smooth transition from day to night over the city skyline",
"aspectRatio": "16:9",
"duration": 5,
"image": "https://cdn.example.com/frame-start.jpg",
"lastImage": "https://cdn.example.com/frame-end.jpg"
}'
Errors
| HTTP | When |
|---|---|
400 | Invalid model, prompt, mode, ratio, duration, or reference files |
401 | Invalid auth |
402 | Insufficient credits |
404 | User not found |
429 | Rate limit exceeded |
500 | Server error |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Any video model key from GET /catalog (e.g. seedance-2.5, veo-3.1-fast, kling-o3-pro). Older names still work: kling-standard, kling-pro, veo, veo-fast, veo-lite, sora-2, sora-2-pro, seedance-2.0(-fast|-mini), gemini-omni-flash; wan maps to Wan 3.0.
Aspect ratio. Valid values depend on the model.
Not supported by Sora models or Seedance.
Output resolution (e.g. 720p, 1080p) for models that offer it; see GET /catalog.
Generate audio, for models that offer it. Omitted: the model's default.
Start image for image-to-video. For Seedance this triggers first/last-frame mode.
End/last image, for models that support start/end frames.
Reference image URLs (Veo 3.1 reference mode; Seedance omni reference, up to 9; Gemini Omni Flash reference-to-video, up to 4).
Seedance omni reference only — up to 3 video URLs.
Seedance omni reference only — up to 3 audio URLs.
Alias of sound.

