> ## 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 2.1 Pro Image to Video

> Kling 2.1 Pro image-to-video with a required start frame and an optional end frame.

<Tip>
  1. Submit the request with `VIDGO_API_KEY`. A `task_id` is returned immediately. Keep it until the task reaches `finished` or `failed`.
  2. Use [Query Task Status](/api-manual/task-management/status) to retrieve the result. If you provide a `callback_url`, Vidgo sends the result to your [webhook](/api-manual/task-management/webhooks) when the task finishes or fails.
</Tip>

# Kling 2.1 Pro Image to Video

Kling 2.1 Pro image-to-video with a required start frame and an optional end frame.

## Available Models

* **kwaivgi/kling-video/v2.1/pro/image-to-video** - Generate video from image input.

## Duration Options

* **5, 10 seconds** - Set `duration` as an integer. Optional. Default: **5 seconds** when omitted. Strings, booleans, null and fractional values are rejected.

## Key Features

* Generate video from image input.
* Use `start_image_url` to supply the starting frame.
* Optionally supply an ending frame with `end_image_url`.

## Advanced Parameters

Set `model` and optional `callback_url` at the request root. Place all workflow parameters, including output options, inside `input`.

Send only the input fields supported by this workflow. Unsupported `input` fields are rejected before credits are deducted. Input URLs must use HTTP(S), include a hostname, and contain no embedded credentials.

### Prompt

* `prompt`: Required. Describe the scene and desired motion. Length: **1-5,000 characters**.
* The value must be a string and must not be blank after trimming. Non-string values are rejected.

### Start Image URL

* `start_image_url`: Required. Provide the starting frame URL. Use a publicly accessible HTTP(S) URL without credentials or whitespace. Empty URLs and null are rejected.

### End Image URL

* `end_image_url`: Optional. Provide the ending frame URL. Use a publicly accessible HTTP(S) URL without credentials or whitespace. Empty URLs and null are rejected.

### Negative Prompt

* `negative_prompt`: Optional. Describe content to avoid.

## Billing Factors

Billed per video according to the selected model tier (Standard or Pro) and video duration (`duration`).

Credits are deducted on submission and refunded if the task fails.


## OpenAPI

````yaml api-manual/video-series/kwaivgi-kling-video-v2-1-pro-image-to-video.json POST /api/generate/submit
openapi: 3.0.0
info:
  title: Vidgo API - Kling 2.1 Pro Image to Video
  description: >-
    Kling 2.1 Pro image-to-video with a required start frame and an optional end
    frame.
  version: 1.0.0
servers:
  - url: https://api.vidgo.ai
security:
  - BearerAuth: []
paths:
  /api/generate/submit:
    post:
      tags:
        - Video Series
      summary: Kling 2.1 Pro Image to Video
      description: >-
        Kling 2.1 Pro image-to-video with a required start frame and an optional
        end frame. Unsupported input fields are rejected before credits are
        deducted. Billed per video according to the selected model tier
        (Standard or Pro) and video duration (`duration`).
      operationId: submit_kwaivgi_kling_video_v2_1_pro_image_to_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
                - input
              additionalProperties: true
              properties:
                model:
                  type: string
                  example: kwaivgi/kling-video/v2.1/pro/image-to-video
                input:
                  type: object
                  required:
                    - prompt
                    - start_image_url
                  properties:
                    prompt:
                      type: string
                      maxLength: 5000
                      minLength: 1
                      description: >-
                        Required nonblank string, maximum 5,000 Unicode
                        characters after trimming.
                    duration:
                      type: integer
                      enum:
                        - 5
                        - 10
                      default: 5
                      description: >-
                        Optional integer: 5 or 10 seconds. Defaults to 5 when
                        omitted. Strings, booleans, null and fractional
                        durations are rejected.
                    start_image_url:
                      type: string
                      format: uri
                      description: >-
                        Required first-frame public HTTP(S) URL, with a hostname
                        and no credentials or whitespace. Empty URLs and null
                        are rejected.
                    end_image_url:
                      type: string
                      format: uri
                      description: >-
                        Optional last frame public HTTP(S) URL, with a hostname
                        and no credentials or whitespace. Omit optional fields
                        when unused; empty URLs and null are rejected.
                    negative_prompt:
                      type: string
                      description: Negative prompt.
                  additionalProperties: false
                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: Basic workflow
                value:
                  model: kwaivgi/kling-video/v2.1/pro/image-to-video
                  input:
                    prompt: >-
                      A quiet forest under soft morning light, with natural
                      detail.
                    start_image_url: https://example.com/image.png
                    duration: 5
              callback:
                summary: Receive a completion callback
                value:
                  model: kwaivgi/kling-video/v2.1/pro/image-to-video
                  input:
                    prompt: >-
                      A quiet forest under soft morning light, with natural
                      detail.
                    start_image_url: https://example.com/image.png
                    duration: 5
                  callback_url: https://your-domain.com/callback
              with_end_frame:
                summary: Pro with an optional end frame
                value:
                  model: kwaivgi/kling-video/v2.1/pro/image-to-video
                  input:
                    prompt: >-
                      A quiet forest under soft morning light, with natural
                      detail.
                    start_image_url: https://example.com/image.png
                    duration: 5
                    end_image_url: https://example.com/end-frame.png
      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-unified-example
                  status: running
                  created_time: '2026-09-10T08:00:00'
        '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 upstream generation task
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '503':
          description: Model configuration or capability is not approved
          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.

````