Skip to content

Omni Video

Create a Kling-compatible multimodal Omni video task.

Create Task

Request

http
POST /v1/videos/omni-video
FieldTypeRequiredSupported values and limitsDescription
model_namestringYeskling-v3-omniOmni video generation model. This is the only supported model value at present.
multi_shotbooleanNotrue, falseEnables multi-shot generation. Default is false. When multi_shot=true, prompt is ignored; when multi_shot=false, shot_type and multi_prompt are ignored.
shot_typestringNoOnly customize is supportedRequired when multi_shot=true; ignored when multi_shot=false. Only custom storyboards are supported. intelligence is not supported.
promptstringNoUp to 2500 charsRequired when multi_shot=false; ignored when multi_shot=true. You can reference input assets in the prompt with <<<image_1>>>, <<<element_1>>>, and <<<video_1>>>.
multi_promptarrayNo1 to 6 itemsRequired when multi_shot=true and shot_type=customize; ignored when multi_shot=false. Used to define prompt and duration for each shot.
multi_prompt[].indexintegerYesStarts from 1Shot index.
multi_prompt[].promptstringYesUp to 512 charsPrompt for the current shot.
multi_prompt[].durationstringYesAt least 1 secondDuration of the current shot. The sum of all shot durations must equal the total duration.
image_listarrayNoPublic image URL or raw Base64Reference image list. It can be used for subject, scene, or style reference, and can also be used as first/end frame input. When an end frame is used, a first frame must also be present; when first-frame or first-and-end-frame generation is used, video editing cannot be used.
image_list[].image_urlstringYes.jpg, .jpeg, .png; up to 10MBImage URL or raw Base64. Images must be at least 300px, and the aspect ratio must stay between 1:2.5 and 2.5:1.
image_list[].typestringNofirst_frame, end_frameFrame type. If an end frame is used, a first frame must also be provided. End frame only is not supported. When more than 2 reference images are provided, end frame is not supported.
element_listarrayNoUse within scenario limitsReference element list, suitable for keeping subject identity or visual consistency in the generated video. When first-frame or first-and-end-frame generation is used, up to 3 elements are supported; with a reference video, the combined count of reference images and reference elements must not exceed 4, and video-role elements are not supported; without a reference video, the combined count must not exceed 7.
element_list[].element_idintegerYesExisting element IDElement ID from the element library.
video_listarrayNoUp to 1 videoReference video list. It can be used either for video reference or as the input video for editing. When refer_type=base, first/end-frame input cannot be defined; when a reference video is present, sound must be off.
video_list[].video_urlstringYesMP4, MOVVideo URL. Input videos must be at least 3 seconds long, no larger than 200MB, within 720px to 2160px in width and height, and between 24fps and 60fps. When using video reference capability, only 3 to 10 seconds is supported.
video_list[].refer_typestringNofeature, basefeature means reference video. base means the input video will be edited. Default is base.
video_list[].keep_original_soundstringNoyes, noWhether to preserve the original input video sound. This also applies to feature reference videos.
soundstringNoon, offWhether to generate audio together with the video. Default is off. When video_list is provided, only off is allowed.
modestringNostd, proGeneration mode. std is the standard mode. pro is the higher-quality mode and the default. 4k is not supported.
aspect_ratiostringNo16:9, 9:16, 1:1Recommended when the request does not use first-frame input and does not perform video editing.
durationstringNo3 to 15Total video duration in seconds. If video_list[].refer_type=base, output duration follows the input video and this field does not take effect.
watermark_infoobjectNo{"enabled": boolean}Whether to return a watermarked result in parallel.
external_task_idstringNoCustom stringCustom task ID for later query use. It must be unique within the same account.

When video_list is present, set sound to off.

Response

json
{
  "code": 0,
  "message": "success",
  "request_id": "req_abc123",
  "data": {
    "task_id": "sg_vid_xxxxxxxx",
    "task_status": "submitted",
    "created_at": 1776209922,
    "updated_at": 1776209922
  }
}

Example

Basic Example

bash
curl -sS "https://api.exchangetoken.ai/v1/videos/omni-video" \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "kling-v3-omni",
    "prompt": "Make <<<image_1>>> walk through a neon gallery, matching the mood of <<<video_1>>>",
    "image_list": [
      {"image_url": "https://example.com/character.png"}
    ],
    "video_list": [
      {"video_url": "https://example.com/reference.mp4", "refer_type": "feature", "keep_original_sound": "no"}
    ],
    "mode": "pro",
    "sound": "off",
    "aspect_ratio": "16:9",
    "duration": "7"
  }'

First and End Frame Example

bash
curl -sS "https://api.exchangetoken.ai/v1/videos/omni-video" \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "kling-v3-omni",
    "prompt": "The subject turns around and the camera slowly pushes in",
    "image_list": [
      {"image_url": "https://example.com/first.png", "type": "first_frame"},
      {"image_url": "https://example.com/end.png", "type": "end_frame"}
    ],
    "mode": "pro",
    "sound": "off",
    "duration": "5"
  }'

Query Task

Request

http
GET /v1/videos/omni-video/{task_id}

Use data.task_id for polling.

Response

json
{
  "code": 0,
  "message": "success",
  "request_id": "req_abc123",
  "data": {
    "task_id": "sg_vid_xxxxxxxx",
    "task_status": "succeed",
    "watermark_info": {
      "enabled": false
    },
    "task_result": {
      "videos": [
        {
          "url": "https://example.com/output.mp4"
        }
      ]
    },
    "created_at": 1776209922,
    "updated_at": 1776210072
  }
}

Status Values

task_statusMeaning
submittedTask accepted but not yet running.
processingTask is queued or running.
succeedTask completed and task_result.videos may be present.
failedTask failed or was cancelled. Check task_status_msg when present.

Example

bash
curl -sS "https://api.exchangetoken.ai/v1/videos/omni-video/sg_vid_xxxxxxxx" \
  -H "Authorization: Bearer sk-xxxxxx"