AI video via MCP — duration, resolution and price tier, driving video/templates, lipsync with voice, per-scene timestamps and avatars on camera.
Video uses the same UGC job pipeline (ugc_job_create with a
model_key of outputKind: "video") — only the params and capabilities
that matter change. See the full flow in
UGC — Generation.
ugc_models_list with output_kind: "video" — the capabilities that
matter:
| Capability | Meaning |
|---|---|
durationsSec / durationRangeSec / maxDurationSec | discrete durations or continuous range (seconds) |
resolutions | e.g. 720p, 1080p — changes the price tier |
aspectRatios | 9:16, 16:9, 1:1 |
acceptsImageRefs | accepts image_ref_media_ids (i2v) |
acceptsDrivingVideo | accepts driving video/template (motion) |
lipsync | supports lipsync with voice_id |
timestamps | per-scene timestamp prompts |
creditsByResolution shows the ceiling per tier — but the real cost of
YOUR input only comes from ugc_estimate (the auction picks the cheapest
provider that fits).
{
"model_key": "seedance-2.0",
"prompt": "the creator presents the product looking at the camera",
"idempotency_key": "video-001",
"params": {
"duration_sec": 5,
"aspect_ratio": "9:16",
"resolution": "720p",
"avatar_ids": ["avatar_id — the face on camera"],
"scene_id": "library scene as background",
"image_ref_media_ids": ["frame/visual reference"],
"format": "mp4"
}
}duration_sec is required for video (the estimate rejects without it).
resolution changes the price — confirm with ugc_estimate first.
For motion/lipsync from a reference video:
driving_video_media_id — file_id of an already-uploaded videotemplate_id — an ingested driving template (ugc_templates_list lists
the workspace's)Requires a model with acceptsDrivingVideo.
{ "params": { "voice_id": "voice id", "timestamps": true } }lipsync in the model + voice_id = the avatar's face speaking with the
chosen voice. timestamps: true enables per-scene prompt timestamps
(models with the timestamps capability).
script_id — links a script to the job.mentions — @name tokens in the prompt bound to avatar/scene/media:
{ "token": "@maria", "kind": "avatar", "id": "..." }.project_id — groups the job under a UGC project (ugc_projects_list).Same as image: ugc_job_get until succeeded → resultUrl/resultMediaId
(the final mp4 — reusable as driving_video_media_id later). Failure →
refund; ugc_job_cancel → cancel + refund. credits_balance before
creating.
See also: UGC — Generation · Avatars