Browse documentation

Media capabilities

Generate video

View as Markdown
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.
ModelBest forDurationsResolutionsReferencesRuntime
byta-video-1-5Our signature default model for reliable everyday video generation. Safety check is applied.6s, 10s, 15s480p, 720p, 1080pUp to 7~45s
bytis-video-1-4Fast and stable video generation model, no content moderation.5s, 10s480p, 720pUp to 1~20s
bytis-video-1-5Fast video generation model with strong prompt understanding and cinematic output. No content moderation.5s, 8s, 12s480p, 720pUp to 1~150s
bytis-video-1-5bPowerful video model fine-tuned for high-resolution output. No moderation.5s, 8s, 12s480p, 720p, 1080pUp to 1~120s
seedance-2-0-miniFast, economical video generation with native audio and optional first-to-last-frame animation. Safety check is applied.6s, 10s, 15s480p, 720pUp to 2~90s
minimax-h3Open-weights video generation with native stereo audio and optional first-to-last-frame animation. Safety check is applied.6s, 10s, 15s480p, 768pUp to 2~150s
minimax-h3-spicyMiniMax 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, 15s480p, 768pUp to 2~150s
minimax-h3-turboTurbo MiniMax H3 generation optimized for faster inference with optional first-to-last-frame animation. Safety check is applied.6s, 10s, 15s480p, 768pUp to 2~90s

Which model should I use?

NeedChooseWhy
Current defaultbyta-video-1-5Our signature default model for reliable everyday video generation. Safety check is applied.
Alternative active modelbytis-video-1-4Fast and stable video generation model, no content moderation.
Alternative active modelbytis-video-1-5Fast video generation model with strong prompt understanding and cinematic output. No content moderation.
Alternative active modelbytis-video-1-5bPowerful video model fine-tuned for high-resolution output. No moderation.
Alternative active modelseedance-2-0-miniFast, economical video generation with native audio and optional first-to-last-frame animation. Safety check is applied.
Alternative active modelminimax-h3Open-weights video generation with native stereo audio and optional first-to-last-frame animation. Safety check is applied.
Alternative active modelminimax-h3-spicyMiniMax 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 modelminimax-h3-turboTurbo 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.
ModelDurationResolutionModesCredits
byta-video-1-56 seconds480pT2V · I2V45
byta-video-1-56 seconds720pT2V · I2V90
byta-video-1-510 seconds480pT2V · I2V68
byta-video-1-510 seconds720pT2V · I2V135
byta-video-1-515 seconds480pT2V113
byta-video-1-515 seconds720pT2V225
byta-video-1-515 seconds480pI2V113
byta-video-1-515 seconds720pI2V225
byta-video-1-56 seconds1080pT2V · I2V180
byta-video-1-510 seconds1080pT2V · I2V270
byta-video-1-515 seconds1080pT2V · I2V450
bytis-video-1-45 seconds480pT2V · I2V120
bytis-video-1-45 seconds720pT2V · I2V225
bytis-video-1-410 seconds480pT2V · I2V225
bytis-video-1-410 seconds720pT2V · I2V450
bytis-video-1-55 seconds480pT2V125
bytis-video-1-55 seconds720pT2V · I2V250
bytis-video-1-58 seconds480pT2V200
bytis-video-1-58 seconds720pT2V · I2V400
bytis-video-1-512 seconds720pI2V550
bytis-video-1-5b5 seconds480pT2V300
bytis-video-1-5b5 seconds480pI2V250
bytis-video-1-5b5 seconds720pT2V225
bytis-video-1-5b8 seconds480pI2V400
bytis-video-1-5b5 seconds720pI2V500
bytis-video-1-5b8 seconds480pT2V400
bytis-video-1-5b8 seconds720pT2V360
bytis-video-1-5b8 seconds720pI2V800
bytis-video-1-5b5 seconds1080pI2V750
bytis-video-1-5b8 seconds1080pI2V1200
bytis-video-1-5b12 seconds720pT2V540
seedance-2-0-mini6 seconds480pT2V · I2V165
seedance-2-0-mini6 seconds720pT2V · I2V165
seedance-2-0-mini10 seconds480pT2V · I2V275
seedance-2-0-mini10 seconds720pT2V · I2V275
seedance-2-0-mini15 seconds480pT2V · I2V413
seedance-2-0-mini15 seconds720pT2V · I2V413
minimax-h36 seconds480pT2V · I2V300
minimax-h36 seconds768pT2V · I2V600
minimax-h310 seconds480pT2V · I2V500
minimax-h310 seconds768pT2V · I2V1000
minimax-h315 seconds480pT2V · I2V750
minimax-h315 seconds768pT2V · I2V1500
minimax-h3-spicy6 seconds480pT2V · I2V300
minimax-h3-spicy6 seconds768pT2V · I2V600
minimax-h3-spicy10 seconds480pT2V · I2V500
minimax-h3-spicy10 seconds768pT2V · I2V1000
minimax-h3-spicy15 seconds480pT2V · I2V750
minimax-h3-spicy15 seconds768pT2V · I2V1500
minimax-h3-turbo6 seconds480pT2V · I2V360
minimax-h3-turbo6 seconds768pT2V · I2V360
minimax-h3-turbo10 seconds480pT2V · I2V600
minimax-h3-turbo10 seconds768pT2V · I2V600
minimax-h3-turbo15 seconds480pT2V · I2V900
minimax-h3-turbo15 seconds768pT2V · I2V900

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.
ModelAccepted valuesMeaning
byta-video-1-5auto · 16:9 · 9:16 · 3:2 · 2:3 · 1:1Use a value returned for this model.
bytis-video-1-4auto · 16:9 · 9:16 · 1:1Use a value returned for this model.
bytis-video-1-5auto · 16:9 · 9:16Use a value returned for this model.
bytis-video-1-5bauto · 21:9 · 16:9 · 4:3 · 1:1 · 3:4 · 9:16Use a value returned for this model.
seedance-2-0-miniauto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9Use a value returned for this model.
minimax-h3auto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9Use a value returned for this model.
minimax-h3-spicyauto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9Use a value returned for this model.
minimax-h3-turboauto · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9Use 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.
sizeResolutionShape
854x480480pLandscape / 16:9
480x854480pPortrait / 9:16
480x480480pSquare / 1:1
1280x720720pLandscape / 16:9
720x1280720pPortrait / 9:16
720x720720pSquare / 1:1

Duration defaults

When public API duration or resolution is omitted, Byta uses the first activevideoOptions 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/generations
Returns 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.mp4

Image-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

promptrequired
string

Description of subject, scene, motion, camera, lighting, and mood.

modeloptional
string

An active video model ID from GET /v1/models. modelId is also accepted.

secondsoptional
integer

A duration supported by the selected model. durationSeconds is also accepted.

sizeoptional
string

Width x height. resolution and aspectRatio are also accepted separately.

input_referenceoptional
object

Exactly 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.
CodeMeaningWhat to do
unsupported_sizeThe size is not one of the six public aliases.Choose a documented size or send resolution and aspectRatio.
invalid_input_referenceinput_reference is malformed or ambiguous.Send exactly one file_id or image_url.
unsafe_reference_urlURL resolves to a non-public address.Use a public image host.
invalid_reference_imageReference bytes are not a valid supported image.Send JPEG, PNG, or WebP up to 20 MiB.
insufficient_creditsThe fixed job price cannot be reserved.Add credits or select a lower-cost option.
Model validationDuration, resolution, aspect ratio, or reference count is unsupported.Read availableOptions or availableAspectRatios and choose a supported row.