Skip to content

UlazAI developer docs

Video Studio API

POST /api/v1/video-studio/generate/

Canonical video generation endpoint

Use Video Studio for all current video models. This endpoint supports text-to-video, image-to-video, and model-specific workflows such as video remix.

For dynamic integrations, fetch model capabilities from /api/v1/models/video/ before sending generation payloads.

Recent Video Studio routes include seedance_2_5, seedance_2_mini, kling_v3_turbo_t2v, kling_v3_turbo_i2v, video_lip_sync, omnihuman_1_5, happyhorse_t2v, happyhorse_i2v, happyhorse_r2v, and happyhorse_videoedit.
Authentication: send Authorization: Bearer YOUR_API_KEY on every request.

Poll with /api/v1/video-studio/status/{job_id}/ and load recent jobs from /api/v1/video-studio/history/.

Request contract

Field Type Required Notes
model_slug string Yes Must match a registered Video Studio model slug
prompt string Usually Required for most models. Storyboard mode can start with images only.
aspect_ratio string No Must be one of the selected model's aspect ratios
duration_seconds integer No Must match an allowed duration for the model. Motion Control uses the motion clip length for pricing.
quality_mode string No Required when model defines quality modes
input_image_urls array[string] Model-specific Used for image-to-video models. Some models require at least one URL.
input_video_urls array[string] Model-specific Used by video remix and source-video routes such as wan_2_6_v2v, kling_3_0_motion_control, video_lip_sync, and happyhorse_videoedit.
seedance_mode string Seedance 2 family Use text_to_video, first_frame, first_last_frame, or multimodal.
first_frame_url, last_frame_url string Seedance 2 family Use for the first-frame and first+last-frame Seedance 2 modes. Public URLs and asset:// IDs are accepted.
reference_image_urls, reference_video_urls, reference_audio_urls array[string] Model-specific Seedance 2 uses multimodal reference arrays. Audio-driven routes such as video_lip_sync and omnihuman_1_5 use reference_audio_urls for the target speech or voiceover. Public URLs and asset:// IDs are accepted where the selected model supports them.
character_orientation string Model-specific Motion Control only. Use video to follow the motion clip orientation or image to keep the uploaded character framing, with durations from 3 to 15 seconds.
sound boolean No Only used on models with audio support
return_last_frame, web_search boolean Seedance 2 family return_last_frame requests a separate final image on a best-effort basis; a successful video may not include one. web_search enables model-side web search.
output_format string Seedance 2.5 only Use mp4 or mov. The default is mp4.
prompt_directory_optin boolean No Directory discount applies only to selected model families
For real-person footage in Seedance 2, use the UlazAI Seedance 2 asset guide and pass the returned asset:// ID. Direct raw files may fail.
Seedance 2.5 accepts 4-30 second output in 480p or 720p. Multimodal mode supports up to 30 images, 10 videos, and 10 audio files. When a video reference is present, credits are calculated from its measured input duration plus the requested output duration.

Model selector

Choose a model to inspect capabilities and auto-generate request snippets.

Seedance 2.5 model_slug=seedance_2_5

4-30 second generation in 480p/720p with text, first-frame, first+last-frame, or multimodal mode. Supports up to 30 image, 10 video, and 10 audio references plus MP4/MOV output.

Engine: Seedance 2.5

Aspect ratios: 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive

Durations: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 seconds

Quality modes: 480p, 720p, 1080p

Inputs: text , image , video

Credits: 480p 4 no video input: 112, 480p 5 no video input: 140, 480p 6 no video input: 168, 480p 7 no video input: 196, +77 more

Live request snippets

Snippets below follow the selected model preset.

cURL (API key)

JavaScript (fetch)

Python (requests)

Status polling snippets

Poll status by job_id until completed or failed.

cURL

JavaScript (fetch)

Python (requests)

Response examples

Success

{
  "success": true,
  "job_ids": ["8990f846-f6f0-4ff1-a298-d0a72d49e7ad"],
  "credits_remaining_total": 438
}

Validation error

{
  "success": false,
  "error": "Invalid duration for this model"
}

Insufficient credits

{
  "success": false,
  "error": "Insufficient credits",
  "credits_required": 220,
  "credits_available": 94
}

API-key video endpoint (legacy)

If you need API-key based video calls, use /api/v1/generate/video/. That path supports a limited model set and is documented under legacy video mapping.

Open legacy video mapping Open status workflows Open video model matrix

Build one video API flow that survives queued jobs

A video request is asynchronous: submit the prompt and media, save the job ID, then poll until completion or failure. This keeps long renders out of the web request and makes retries traceable.

Validate file type and size before upload, expose the chosen model to the user and record the final error. Never retry a paid job automatically without checking whether the first request already started.

Music Studio Songs, instrumentals and your own lyrics. AI song generator