> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vidgo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling O3 Pro Image To Video

> Generate 3–15-second videos with Kling O3 Pro from a starting image and an optional ending frame. Supports single-shot and multi-shot generation. Explicitly set sound; multi-shot requires audio.

<Tip>
  Submit with your Vidgo API key, then query [task status](/api-manual/task-management/status) using the returned task ID. An optional callback receives the final result. The submit response above is an initial-state illustration, not the completed video response.
</Tip>

## Parameters

Use model `kwaivgi/kling-video-o3-pro/image-to-video`. Put generation parameters inside `input`.

* **`image_urls`**: Required: an array of 1–2 images. The first is the starting frame; the optional second is the ending frame. Accepts public HTTP(S) URLs, image Data URIs or raw Base64 image data.
* **`prompt`**: Required when multi\_shots=false. Describe the scene, action and camera movement. Use nonblank text, up to 2,500 characters after trimming. Omit prompt when multi\_shots=true.
* **`multi_prompt`**: Required when multi\_shots=true; omit in single-shot mode. Supply at least one shot, each with a nonblank prompt of up to 2,500 characters and an integer duration of 1–12 seconds. Shot durations must sum to the top-level duration (3–15 seconds). Extra fields inside a shot are ignored.
* **`duration`**: Required integer from 3 to 15 seconds. In multi-shot mode, this must equal the sum of all shot durations. Credits are calculated using this value.
* **`multi_shots`**: Required: explicitly send false for a single shot or true for multiple shots. Single-shot mode requires prompt. Multi-shot mode requires multi\_prompt and sound=true, with no nonblank top-level prompt. Omitting this field is an error.
* **`sound`**: Required: explicitly send true to generate audio or false for video without audio. Single-shot mode accepts either value; multi-shot mode requires true.
* **`aspect_ratio`**: May be omitted. If provided, use 16:9, 9:16 or 1:1. Image-to-video ignores this value; framing is determined by the input image.

Use standard JSON numbers and booleans. For compatibility, integer strings such as "5" are accepted. Boolean strings true/1/yes/y/on mean true; false/0/no/n/off mean false. These strings are case-insensitive and trimmed. Numeric 1 and 0 are also accepted for boolean fields. Numeric and boolean prompt values are converted to text; 0, false and null are treated as empty. Objects and arrays are not accepted as prompts. Unsupported input fields, including reference\_image\_urls and kling\_elements, are rejected. HTTP(S) URLs must have a hostname and no embedded credentials.

## Pricing

13 credits/s without sound; 16 credits/s with sound. Credits = duration × rate. Failed generation tasks are refunded.

## Default example: At the Volcano Observatory

This is the same default example shown on the [model page](https://vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video).

```json theme={null}
{
  "model": "kwaivgi/kling-video-o3-pro/image-to-video",
  "input": {
    "duration": 5,
    "sound": true,
    "multi_shots": true,
    "multi_prompt": [
      {
        "prompt": "Begin with the supplied photograph. Preserve the female geologist, white helmet, charcoal jacket with teal collar, orange instrument and safety railing. Medium-wide view: she watches a distant lava fountain beyond the secured platform. Warm lava light touches her jacket; wind moves a loose hair strand. Restrained documentary realism, safe distance. Audio: quiet wind and low distant rumble. No text, logos or watermarks.",
        "duration": 2
      },
      {
        "prompt": "Cut to a closer three-quarter view of the same geologist on the same platform. Preserve her face, white helmet, teal collar and orange instrument. She lowers her gaze from the volcano to the instrument and makes one small thumb adjustment. Maintain warm lava reflections against cool twilight. Finish looking down. Low distant rumble and glove movement; no speech, alarm or music. No text, logos or watermarks.",
        "duration": 3
      }
    ],
    "image_urls": [
      "https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/input-start.png"
    ]
  }
}
```

![Starting frame](https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/input-start.png)

<video controls playsInline preload="metadata" style={{ width: "100%", height: "auto" }} poster="https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/poster.jpg" src="https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/output.mp4" />

[Download this video](https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/output.mp4)

### Completed result from the status endpoint

`GET /api/generate/status/{task_id}`

The response below records this verified example. For a new generation, query the task ID returned by your own submission.

```json theme={null}
{
  "code": 200,
  "data": {
    "task_id": "WTSYQAI2J76PVHFW",
    "status": "finished",
    "files": [
      {
        "file_type": "video",
        "file_url": "https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/output.mp4"
      }
    ],
    "created_time": "2026-09-22T18:46:21",
    "error_message": null,
    "progress": 100
  }
}
```

<Note>
  The API validates prompts up to 2,500 characters. Some multi-shot generation requests have failed when a shot prompt exceeded 512 characters. We recommend keeping each shot prompt within 512 characters; this recommendation does not change the API validation limit.
</Note>


## OpenAPI

````yaml api-manual/video-series/kwaivgi-kling-video-o3-pro-image-to-video.json POST /api/generate/submit
openapi: 3.0.0
info:
  title: Vidgo API - Kling O3 Pro Image to Video
  description: >-
    Generate 3–15-second videos with Kling O3 Pro from a starting image and an
    optional ending frame. Supports single-shot and multi-shot generation.
    Explicitly set sound; multi-shot requires audio.
  version: 1.0.0
servers:
  - url: https://api.vidgo.ai
security:
  - BearerAuth: []
paths:
  /api/generate/submit:
    post:
      tags:
        - Video Series
      summary: Kling O3 Pro Image to Video
      description: >-
        Submit a video generation task. duration, multi_shots and sound must be
        explicitly provided. In multi-shot mode, provide multi_prompt, set
        sound=true and make shot durations sum to duration. Invalid parameters
        are rejected before image upload, task creation or charging.
      operationId: submit_kwaivgi_kling_video_o3_pro_image_to_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
                - input
              additionalProperties: true
              properties:
                model:
                  type: string
                  enum:
                    - kwaivgi/kling-video-o3-pro/image-to-video
                  example: kwaivgi/kling-video-o3-pro/image-to-video
                  description: >-
                    Vidgo public model ID. Must be
                    `kwaivgi/kling-video-o3-pro/image-to-video`.
                input:
                  type: object
                  required:
                    - duration
                    - multi_shots
                    - sound
                    - image_urls
                  description: >-
                    Video generation parameters. Use standard JSON numbers and
                    booleans. For compatibility, integer strings such as "5" are
                    accepted. Boolean strings true/1/yes/y/on mean true;
                    false/0/no/n/off mean false. These strings are
                    case-insensitive and trimmed. Numeric 1 and 0 are also
                    accepted for boolean fields. Numeric and boolean prompt
                    values are converted to text; 0, false and null are treated
                    as empty. Objects and arrays are not accepted as prompts.
                  properties:
                    image_urls:
                      type: array
                      items:
                        type: string
                        minLength: 1
                        pattern: \S
                      description: >-
                        Required: an array of 1–2 images. The first is the
                        starting frame; the optional second is the ending frame.
                        Accepts public HTTP(S) URLs, image Data URIs or raw
                        Base64 image data.
                      minItems: 1
                      maxItems: 2
                    prompt:
                      type: string
                      description: >-
                        Required when multi_shots=false. Describe the scene,
                        action and camera movement. Use nonblank text, up to
                        2,500 characters after trimming. Omit prompt when
                        multi_shots=true.
                      maxLength: 2500
                      minLength: 1
                      pattern: \S
                    multi_prompt:
                      type: array
                      items:
                        type: object
                        required:
                          - prompt
                          - duration
                        properties:
                          prompt:
                            type: string
                            description: >-
                              Required nonblank text for this shot, up to 2,500
                              characters after trimming.
                            maxLength: 2500
                            minLength: 1
                            pattern: \S
                          duration:
                            type: integer
                            description: >-
                              Required integer from 1 to 12 seconds for this
                              shot.
                            minimum: 1
                            maximum: 12
                        additionalProperties: true
                      description: >-
                        Required when multi_shots=true; omit in single-shot
                        mode. Supply at least one shot, each with a nonblank
                        prompt of up to 2,500 characters and an integer duration
                        of 1–12 seconds. Shot durations must sum to the
                        top-level duration (3–15 seconds). Extra fields inside a
                        shot are ignored.
                      minItems: 1
                    duration:
                      type: integer
                      description: >-
                        Required integer from 3 to 15 seconds. In multi-shot
                        mode, this must equal the sum of all shot durations.
                        Credits are calculated using this value.
                      minimum: 3
                      maximum: 15
                    multi_shots:
                      type: boolean
                      description: >-
                        Required: explicitly send false for a single shot or
                        true for multiple shots. Single-shot mode requires
                        prompt. Multi-shot mode requires multi_prompt and
                        sound=true, with no nonblank top-level prompt. Omitting
                        this field is an error.
                    sound:
                      type: boolean
                      description: >-
                        Required: explicitly send true to generate audio or
                        false for video without audio. Single-shot mode accepts
                        either value; multi-shot mode requires true.
                    aspect_ratio:
                      type: string
                      description: >-
                        May be omitted. If provided, use 16:9, 9:16 or 1:1.
                        Image-to-video ignores this value; framing is determined
                        by the input image.
                      enum:
                        - '1:1'
                        - '16:9'
                        - '9:16'
                  additionalProperties: false
                  oneOf:
                    - properties:
                        multi_shots:
                          enum:
                            - false
                      required:
                        - prompt
                      not:
                        required:
                          - multi_prompt
                    - properties:
                        multi_shots:
                          enum:
                            - true
                        sound:
                          enum:
                            - true
                      required:
                        - multi_shots
                        - multi_prompt
                      not:
                        required:
                          - prompt
                callback_url:
                  type: string
                  nullable: true
                  description: >-
                    Optional public HTTP(S) endpoint for task completion
                    notifications. HTTPS is recommended. Omit, use null, or use
                    an empty string to disable callbacks.
              description: >-
                Keep model and callback_url at the root. Unknown root fields are
                ignored; unsupported input fields are rejected.
            examples:
              basic:
                summary: At the Volcano Observatory
                value:
                  model: kwaivgi/kling-video-o3-pro/image-to-video
                  input:
                    duration: 5
                    sound: true
                    multi_shots: true
                    multi_prompt:
                      - prompt: >-
                          Begin with the supplied photograph. Preserve the
                          female geologist, white helmet, charcoal jacket with
                          teal collar, orange instrument and safety railing.
                          Medium-wide view: she watches a distant lava fountain
                          beyond the secured platform. Warm lava light touches
                          her jacket; wind moves a loose hair strand. Restrained
                          documentary realism, safe distance. Audio: quiet wind
                          and low distant rumble. No text, logos or watermarks.
                        duration: 2
                      - prompt: >-
                          Cut to a closer three-quarter view of the same
                          geologist on the same platform. Preserve her face,
                          white helmet, teal collar and orange instrument. She
                          lowers her gaze from the volcano to the instrument and
                          makes one small thumb adjustment. Maintain warm lava
                          reflections against cool twilight. Finish looking
                          down. Low distant rumble and glove movement; no
                          speech, alarm or music. No text, logos or watermarks.
                        duration: 3
                    image_urls:
                      - >-
                        https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/input-start.png
              callback:
                summary: At the Volcano Observatory with callback
                value:
                  model: kwaivgi/kling-video-o3-pro/image-to-video
                  input:
                    duration: 5
                    sound: true
                    multi_shots: true
                    multi_prompt:
                      - prompt: >-
                          Begin with the supplied photograph. Preserve the
                          female geologist, white helmet, charcoal jacket with
                          teal collar, orange instrument and safety railing.
                          Medium-wide view: she watches a distant lava fountain
                          beyond the secured platform. Warm lava light touches
                          her jacket; wind moves a loose hair strand. Restrained
                          documentary realism, safe distance. Audio: quiet wind
                          and low distant rumble. No text, logos or watermarks.
                        duration: 2
                      - prompt: >-
                          Cut to a closer three-quarter view of the same
                          geologist on the same platform. Preserve her face,
                          white helmet, teal collar and orange instrument. She
                          lowers her gaze from the volcano to the instrument and
                          makes one small thumb adjustment. Maintain warm lava
                          reflections against cool twilight. Finish looking
                          down. Low distant rumble and glove movement; no
                          speech, alarm or music. No text, logos or watermarks.
                        duration: 3
                    image_urls:
                      - >-
                        https://cdn.vidgo.ai/apis/models/kwaivgi/kling-video-o3-pro/image-to-video/v1/01/input-start.png
                  callback_url: https://your-domain.com/callback
      responses:
        '200':
          description: Task submitted
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - data
                properties:
                  code:
                    type: integer
                    enum:
                      - 200
                  data:
                    type: object
                    required:
                      - task_id
                      - status
                      - created_time
                    properties:
                      task_id:
                        type: string
                      status:
                        type: string
                        enum:
                          - not_started
                          - running
                          - finished
                          - failed
                      created_time:
                        type: string
                        format: date-time
              example:
                code: 200
                data:
                  task_id: task-submitted-example
                  status: not_started
                  created_time: '2026-09-22T00:00:00Z'
        '400':
          description: >-
            Invalid input, unsupported tier, inaccessible media, or insufficient
            credits
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '401':
          description: Invalid credentials
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '403':
          description: Access denied
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '404':
          description: Unknown or disabled model
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '408':
          description: Request timed out
          content:
            text/plain:
              schema:
                type: string
              example: Request timeout
        '422':
          description: Invalid JSON or non-object request body
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '429':
          description: Rate or API key credit limit exceeded
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '502':
          description: Unable to create the video generation task
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '503':
          description: This model is currently unavailable
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Use VIDGO_API_KEY.

````