Media capabilities
Generate video
Video generation follows the same durable contract as Byta images. Submission returns immediately with HTTP 202, work continues in a background worker, and clients poll the job until a private video file is ready.
Quick 202 · durable background job
Catalog last synchronized: October 3, 2026 (UTC)
Asynchronous by design
Video creation can take longer than a proxy or browser request should remain open. Byta never performs generation or media download in the foreground API request.
1
Reserve and submit
Credits are reserved and a durable job is created.
2
Process in background
The worker generates, downloads, and stores the output.
3
Poll and download
The final file appears in videos[] when completed.
Safe retries
Reuse the same
Idempotency-Key after a timeout or transport failure. Byta returns the original job instead of starting or charging for a duplicate generation.Video models and options
Duration and resolution combinations are model-specific. Query GET /v1/models before presenting options in a dynamic client.
| Model | Best for | Durations | Resolutions | References | Runtime |
|---|---|---|---|---|---|
byta-video-1-5 | Our signature default model for reliable everyday video generation. Safety check is applied. | 6s, 10s, 15s | 480p, 720p, 1080p | Up to 7 | ~45s |
bytis-video-1-4 | Fast and stable video generation model, no content moderation. | 5s, 10s | 480p, 720p | Up to 1 | ~20s |
bytis-video-1-5 | Fast video generation model with strong prompt understanding and cinematic output. No content moderation. | 5s, 8s, 12s | 480p, 720p | Up to 1 | ~150s |
bytis-video-1-5b | Powerful video model fine-tuned for high-resolution output. No moderation. | 5s, 8s, 12s | 480p, 720p, 1080p | Up to 1 | ~120s |
seedance-2-0-mini | Fast, economical video generation with native audio and optional first-to-last-frame animation. Safety check is applied. | 6s, 10s, 15s | 480p, 720p | Up to 2 | ~90s |
minimax-h3 | Open-weights video generation with native stereo audio and optional first-to-last-frame animation. Safety check is applied. | 6s, 10s, 15s | 480p, 768p | Up to 2 | ~150s |
minimax-h3-spicy | MiniMax H3 text-to-video with Spicy image-to-video and optional first-to-last-frame animation. The image route has no upstream safety check; the text route is standard H3. | 6s, 10s, 15s | 480p, 768p | Up to 2 | ~150s |
minimax-h3-turbo | Turbo MiniMax H3 generation optimized for faster inference with optional first-to-last-frame animation. Safety check is applied. | 6s, 10s, 15s | 480p, 768p | Up to 2 | ~90s |
Which model should I use?
| Need | Choose | Why |
|---|---|---|
| Current default | byta-video-1-5 | Our signature default model for reliable everyday video generation. Safety check is applied. |
| Alternative active model | bytis-video-1-4 | Fast and stable video generation model, no content moderation. |
| Alternative active model | bytis-video-1-5 | Fast video generation model with strong prompt understanding and cinematic output. No content moderation. |
| Alternative active model | bytis-video-1-5b | Powerful video model fine-tuned for high-resolution output. No moderation. |
| Alternative active model | seedance-2-0-mini | Fast, economical video generation with native audio and optional first-to-last-frame animation. Safety check is applied. |
| Alternative active model | minimax-h3 | Open-weights video generation with native stereo audio and optional first-to-last-frame animation. Safety check is applied. |
| Alternative active model | minimax-h3-spicy | MiniMax H3 text-to-video with Spicy image-to-video and optional first-to-last-frame animation. The image route has no upstream safety check; the text route is standard H3. |
| Alternative active model | minimax-h3-turbo | Turbo MiniMax H3 generation optimized for faster inference with optional first-to-last-frame animation. Safety check is applied. |
Pricing
Credits are reserved when the job is accepted. The exact row is returned by GET /v1/models as videoOptions.
| Model | Duration | Resolution | Modes | Credits |
|---|---|---|---|---|
byta-video-1-5 | 6 seconds | 480p | T2V · I2V | 45 |
byta-video-1-5 | 6 seconds | 720p | T2V · I2V | 90 |
byta-video-1-5 | 10 seconds | 480p | T2V · I2V | 68 |
byta-video-1-5 | 10 seconds | 720p | T2V · I2V | 135 |
byta-video-1-5 | 15 seconds | 480p | T2V | 113 |
byta-video-1-5 | 15 seconds | 720p | T2V | 225 |
byta-video-1-5 | 15 seconds | 480p | I2V | 113 |
byta-video-1-5 | 15 seconds | 720p | I2V | 225 |
byta-video-1-5 | 6 seconds | 1080p | T2V · I2V | 180 |
byta-video-1-5 | 10 seconds | 1080p | T2V · I2V | 270 |
byta-video-1-5 | 15 seconds | 1080p | T2V · I2V | 450 |
bytis-video-1-4 | 5 seconds | 480p | T2V · I2V | 120 |
bytis-video-1-4 | 5 seconds | 720p | T2V · I2V | 225 |
bytis-video-1-4 | 10 seconds | 480p | T2V · I2V | 225 |
bytis-video-1-4 | 10 seconds | 720p | T2V · I2V | 450 |
bytis-video-1-5 | 5 seconds | 480p | T2V | 125 |
bytis-video-1-5 | 5 seconds | 720p | T2V · I2V | 250 |
bytis-video-1-5 | 8 seconds | 480p | T2V | 200 |
bytis-video-1-5 | 8 seconds | 720p | T2V · I2V | 400 |
bytis-video-1-5 | 12 seconds | 720p | I2V | 550 |
bytis-video-1-5b | 5 seconds | 480p | T2V | 300 |
bytis-video-1-5b | 5 seconds | 480p | I2V | 250 |
bytis-video-1-5b | 5 seconds | 720p | T2V | 225 |
bytis-video-1-5b | 8 seconds | 480p | I2V | 400 |
bytis-video-1-5b | 5 seconds | 720p | I2V | 500 |
bytis-video-1-5b | 8 seconds | 480p | T2V | 400 |
bytis-video-1-5b | 8 seconds | 720p | T2V | 360 |
bytis-video-1-5b | 8 seconds | 720p | I2V | 800 |
bytis-video-1-5b | 5 seconds | 1080p | I2V | 750 |
bytis-video-1-5b | 8 seconds | 1080p | I2V | 1200 |
bytis-video-1-5b | 12 seconds | 720p | T2V | 540 |
seedance-2-0-mini | 6 seconds | 480p | T2V · I2V | 165 |
seedance-2-0-mini | 6 seconds | 720p | T2V · I2V | 165 |
seedance-2-0-mini | 10 seconds | 480p | T2V · I2V | 275 |
seedance-2-0-mini | 10 seconds | 720p | T2V · I2V | 275 |
seedance-2-0-mini | 15 seconds | 480p | T2V · I2V | 413 |
seedance-2-0-mini | 15 seconds | 720p | T2V · I2V | 413 |
minimax-h3 | 6 seconds | 480p | T2V · I2V | 300 |
minimax-h3 | 6 seconds | 768p | T2V · I2V | 600 |
minimax-h3 | 10 seconds | 480p | T2V · I2V | 500 |
minimax-h3 | 10 seconds | 768p | T2V · I2V | 1000 |
minimax-h3 | 15 seconds | 480p | T2V · I2V | 750 |
minimax-h3 | 15 seconds | 768p | T2V · I2V | 1500 |
minimax-h3-spicy | 6 seconds | 480p | T2V · I2V | 300 |
minimax-h3-spicy | 6 seconds | 768p | T2V · I2V | 600 |
minimax-h3-spicy | 10 seconds | 480p | T2V · I2V | 500 |
minimax-h3-spicy | 10 seconds | 768p | T2V · I2V | 1000 |
minimax-h3-spicy | 15 seconds | 480p | T2V · I2V | 750 |
minimax-h3-spicy | 15 seconds | 768p | T2V · I2V | 1500 |
minimax-h3-turbo | 6 seconds | 480p | T2V · I2V | 360 |
minimax-h3-turbo | 6 seconds | 768p | T2V · I2V | 360 |
minimax-h3-turbo | 10 seconds | 480p | T2V · I2V | 600 |
minimax-h3-turbo | 10 seconds | 768p | T2V · I2V | 600 |
minimax-h3-turbo | 15 seconds | 480p | T2V · I2V | 900 |
minimax-h3-turbo | 15 seconds | 768p | T2V · I2V | 900 |
Configuration
Generation mode, duration, resolution, and aspect ratio are validated against the selected model before credits are reserved.
Aspect ratios
These are the complete active aspect-ratio choices returned for each model.
| Model | Accepted values | Meaning |
|---|---|---|
byta-video-1-5 | auto · 16:9 · 9:16 · 3:2 · 2:3 · 1:1 | Use a value returned for this model. |
bytis-video-1-4 | auto · 16:9 · 9:16 · 1:1 | Use a value returned for this model. |
bytis-video-1-5 | auto · 16:9 · 9:16 | Use a value returned for this model. |
bytis-video-1-5b | auto · 21:9 · 16:9 · 4:3 · 1:1 · 3:4 · 9:16 | Use a value returned for this model. |
seedance-2-0-mini | auto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | Use a value returned for this model. |
minimax-h3 | auto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | Use a value returned for this model. |
minimax-h3-spicy | auto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | Use a value returned for this model. |
minimax-h3-turbo | auto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 | Use a value returned for this model. |
OpenAI-style sizes and resolutions
size sets both resolution and the closest model-supported aspect ratio. You can instead send resolution and aspectRatio separately.
| size | Resolution | Shape |
|---|---|---|
854x480 | 480p | Landscape / 16:9 |
480x854 | 480p | Portrait / 9:16 |
480x480 | 480p | Square / 1:1 |
1280x720 | 720p | Landscape / 16:9 |
720x1280 | 720p | Portrait / 9:16 |
720x720 | 720p | Square / 1:1 |
Duration defaults
When public API duration or resolution is omitted, Byta uses the first active
videoOptions row that supports the request mode. The t2vEnabled andi2vEnabled fields describe mode availability. Explicit values are clearer and recommended for reproducible billing.Create a video job
Send JSON using the same Bearer API key and idempotency pattern as image generation.
POST
/v1/videos/generationsReturns 202 Accepted
Text-to-video
import os
import requests
response = requests.post(
"https://api.byta-ai.com/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['BYTA_API_KEY']}",
"Idempotency-Key": "launch-film-001",
},
json={
"model": "byta-video-1-5",
"prompt": "A slow cinematic push through silver grass at sunrise",
"seconds": 6,
"size": "1280x720",
},
)
response.raise_for_status()
job = response.json()
print(job["statusUrl"])202 Accepted · JSON
{
"id": "6aa0dca3ec6b40f89cbcf006a8f63ca0",
"jobId": "6aa0dca3ec6b40f89cbcf006a8f63ca0",
"object": "video_generation",
"mode": "video",
"status": "running",
"statusUrl": "https://api.byta-ai.com/v1/videos/generations/6aa0dca3ec6b40f89cbcf006a8f63ca0",
"durationSeconds": 6,
"resolution": "480p",
"creditsReserved": 45,
"modelId": "byta-video-1-5",
"modelName": "Byta-Video-1.5"
}Poll job status
Poll every 3–5 seconds. running is non-terminal; completed and failed are terminal.
GET
/v1/videos/generations/{jobId}cURL · job status
curl https://api.byta-ai.com/v1/videos/generations/6aa0dca3ec6b40f89cbcf006a8f63ca0 \
-H "Authorization: Bearer $BYTA_API_KEY"200 OK · completed
{
"id": "6aa0dca3ec6b40f89cbcf006a8f63ca0",
"object": "video_generation",
"status": "completed",
"durationSeconds": 6,
"resolution": "720p",
"creditsCharged": 150,
"videos": [
{
"id": "8d7f620318204948a35b3dfab6f1ee42",
"mimeType": "video/mp4",
"sizeBytes": 12840232,
"url": "https://api.byta-ai.com/v1/videos/generations/6aa0.../files/8d7f..."
}
]
}Download the completed video
Output URLs are private. Send the same Bearer key used to create and poll the job. Range requests are supported for streaming clients.
GET
/v1/videos/generations/{jobId}/files/{fileId}Add ?download=1 for attachment disposition
cURL · MP4 download
curl "https://api.byta-ai.com/v1/videos/generations/6aa0.../files/8d7f...?download=1" \
-H "Authorization: Bearer $BYTA_API_KEY" \
--output generated-video.mp4Image-to-video
Provide an owned Studio file, a public image URL, or an inline base64 image. The model uses it as visual guidance for the generated clip.
cURL · image-to-video
curl https://api.byta-ai.com/v1/videos/generations \
-H "Authorization: Bearer $BYTA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: image-to-video-001" \
-d '{
"model": "byta-video-1-5",
"prompt": "The camera moves slowly forward while the fabric moves in a light breeze.",
"seconds": 5,
"size": "854x480",
"input_reference": {"file_id": "owned_image_file_id"}
}'JSON · accepted reference shapes
// Existing image uploaded to Byta Studio
{"input_reference": {"file_id": "owned_image_file_id"}}
// Publicly reachable image
{"input_reference": {"image_url": "https://cdn.example.com/reference.jpg"}}
// Inline base64 image
{"input_reference": {"image_url": "data:image/jpeg;base64,/9j/4AAQ..."}}Import and ownership
file_idmust identify an existing Byta Studio image owned by the API-key account. Public URLs and base64 data URIs are verified, imported into that account's Studio storage, and count toward its upload quota. JPEG, PNG, and WebP inputs up to 20 MiB are accepted.API reference
promptrequiredstringDescription of subject, scene, motion, camera, lighting, and mood.
modeloptionalstringAn active video model ID from GET /v1/models. modelId is also accepted.
secondsoptionalintegerA duration supported by the selected model. durationSeconds is also accepted.
sizeoptionalstringWidth x height. resolution and aspectRatio are also accepted separately.
input_referenceoptionalobjectExactly one file_id or image_url. image_url accepts a public HTTP(S) URL or base64 data URI.
Errors
Fix request-validation failures before resubmitting. Preserve the same Idempotency-Key only for a transport retry of the same logical request.
| Code | Meaning | What to do |
|---|---|---|
unsupported_size | The size is not one of the six public aliases. | Choose a documented size or send resolution and aspectRatio. |
invalid_input_reference | input_reference is malformed or ambiguous. | Send exactly one file_id or image_url. |
unsafe_reference_url | URL resolves to a non-public address. | Use a public image host. |
invalid_reference_image | Reference bytes are not a valid supported image. | Send JPEG, PNG, or WebP up to 20 MiB. |
insufficient_credits | The fixed job price cannot be reserved. | Add credits or select a lower-cost option. |
| Model validation | Duration, resolution, aspect ratio, or reference count is unsupported. | Read availableOptions or availableAspectRatios and choose a supported row. |