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

# Animate an image

> Kling 3 returns a new pending video Image directly; poll its id. Kling 2.5 returns the parent Image with a linked version; poll that version’s source_image_id. HTTP 200 means accepted, not finished. Start/end frames must be at least 300 × 300 pixels, no larger than 10 MiB, with width/height between 0.4 and 2.5. When both frames are supplied, their dimensions must match.

[Track jobs and versions](/api-reference/jobs-and-versions).


## OpenAPI

````yaml POST /images/{id}/video
openapi: 3.0.3
info:
  title: bitStudio API
  version: '2026-09-06'
  description: >-
    Core Studio image, video, and reusable-asset workflows. Requests use a
    workspace-scoped API key and the account’s feature access and credits.
    Generation is asynchronous.
  contact:
    name: bitStudio support
    email: hello@bitstudio.ai
servers:
  - url: https://api.bitstudio.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Images
  - name: Video
  - name: Assets
paths:
  /images/{id}/video:
    post:
      tags:
        - Video
      summary: Animate an image
      description: >-
        Kling 3 returns a new pending video Image directly; poll its id. Kling
        2.5 returns the parent Image with a linked version; poll that version’s
        source_image_id. HTTP 200 means accepted, not finished. Start/end frames
        must be at least 300 × 300 pixels, no larger than 10 MiB, with
        width/height between 0.4 and 2.5. When both frames are supplied, their
        dimensions must match.
      operationId: imageToVideo
      parameters:
        - name: id
          in: path
          required: true
          description: Image or asset ID from a previous response.
          schema:
            type: string
            description: Resource ID.
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoInput'
            example:
              model: kling-v3-pro
              prompt: Slow camera push-in. The model holds a steady pose.
              duration: 5
              generate_audio: false
      responses:
        '200':
          description: >-
            Kling 3 returns a new pending video Image directly; poll its id.
            Kling 2.5 returns the parent Image with a linked version; poll that
            version’s source_image_id. HTTP 200 means accepted, not finished.
            Start/end frames must be at least 300 × 300 pixels, no larger than
            10 MiB, with width/height between 0.4 and 2.5. When both frames are
            supplied, their dimensions must match.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Image'
              example:
                id: 11111111-1111-4111-8111-111111111111
                status: pending
                path: null
                width_px: null
                height_px: null
                created_timestamp: '2026-09-06T12:00:00Z'
        default:
          description: >-
            Request rejected or service error. See the errors and recovery
            guide.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    VideoInput:
      type: object
      properties:
        prompt:
          type: string
          description: Scene and motion direction.
        model:
          type: string
          description: >-
            Kling 3 returns a standalone job. Kling 2.5 image-to-video returns
            the parent image with a linked version.
          enum:
            - kling-2.5
            - kling-v3-pro
            - kling-v3-standard
          example: kling-v3-pro
        duration:
          type: integer
          description: >-
            Clip duration in seconds. Use 5 for the first request. Supported
            durations depend on the model.
          example: 5
        aspect_ratio:
          type: string
          description: Video output ratio.
          enum:
            - '16:9'
            - '9:16'
            - '1:1'
        generate_audio:
          type: boolean
          description: Generated audio for models that support it.
          default: false
        multi_prompt:
          type: array
          items:
            type: object
            properties:
              prompt:
                type: string
                description: Directions for this shot.
              duration:
                type: integer
                description: Shot length in seconds.
                minimum: 3
                maximum: 15
            required:
              - prompt
              - duration
            additionalProperties: false
          description: >-
            Kling 3 multi-shot directions. The shot durations determine the
            total duration. Use a single prompt first.
        negative_prompt:
          type: string
          description: Optional undesired visual characteristics.
        version_id:
          type: string
          description: >-
            Optional version of this image to use as the source. Omit to use the
            original image.
          format: uuid
        last_frame_id:
          type: string
          description: >-
            Optional end frame. Its dimensions must match the start frame.
            Mutually exclusive with last_frame_url.
          format: uuid
        last_frame_url:
          type: string
          description: Direct end-frame URL. The same media constraints apply.
          format: uri
        resolution:
          type: string
          description: Optional output quality; supported values depend on the video model.
        elements:
          type: array
          items:
            type: object
            additionalProperties: false
            properties:
              asset_id:
                type: string
                format: uuid
              frontal_image_id:
                type: string
                format: uuid
              frontal_image_url:
                type: string
                format: uri
              reference_image_ids:
                type: array
                items:
                  type: string
                  format: uuid
              reference_image_urls:
                type: array
                items:
                  type: string
                  format: uri
          description: >-
            Kling 3 subject references. Provide an asset or direct image
            references for each element.
        avatar_text:
          type: string
          description: Additional avatar directions for supported video models.
        outfit_text:
          type: string
          description: Additional outfit directions for supported video models.
      additionalProperties: false
    Image:
      type: object
      properties:
        id:
          type: string
          description: Resource ID.
          format: uuid
        status:
          type: string
          description: Job state. Only completed has a finished result.
          enum:
            - pending
            - generating
            - completed
            - failed
            - policy_blocked
            - nsfw_filtered
        path:
          type: string
          description: Result URL. Can be null while the job is pending.
          nullable: true
        watermarked_path:
          type: string
          description: ''
          nullable: true
        width_px:
          type: integer
          description: ''
          nullable: true
        height_px:
          type: integer
          description: ''
          nullable: true
        size_bytes:
          type: integer
          description: ''
          nullable: true
        extension:
          type: string
          description: ''
          nullable: true
        is_generated:
          type: boolean
          description: ''
        for_training:
          type: boolean
          description: Whether the upload is a reusable asset reference.
        task:
          type: string
          description: Operation that created this job.
          nullable: true
        type:
          type: string
          description: ''
          nullable: true
        created_timestamp:
          type: string
          description: ''
          format: date-time
        finish_timestamp:
          type: string
          description: ''
          format: date-time
          nullable: true
        fail_reason:
          type: string
          description: Human-readable failure detail.
          nullable: true
        failure_code:
          type: string
          description: Machine-readable failure category, when available.
          enum:
            - input_rejected
            - provider_unavailable
            - queue_timeout
            - policy_blocked
          nullable: true
        asset_ids:
          type: array
          items:
            type: string
            description: Resource ID.
            format: uuid
          description: Linked reusable assets.
          nullable: true
        versions:
          type: array
          items:
            $ref: '#/components/schemas/ImageVersion'
          description: >-
            Related versions. May be omitted or empty. Never infer a new version
            is completed from the parent status.
      required:
        - id
        - status
    Error:
      type: object
      properties:
        error:
          type: string
          description: Some handlers return a plain error string.
        code:
          type: string
          description: Structured error code, when available.
        message:
          type: string
          description: Structured human-readable error, when available.
        cta:
          type: boolean
          description: Whether the response includes an account action.
        next_action:
          type: string
          description: Suggested action, such as a plan or credit change.
        current_plan:
          type: string
          description: ''
        user_message:
          type: string
          description: User-facing explanation when present.
        extra_context:
          type: string
          description: Additional error context when present.
      description: >-
        Error shapes differ by endpoint. Read message or error; preserve the
        HTTP status and code. Additional context fields may be returned.
    ImageVersion:
      type: object
      properties:
        id:
          type: string
          description: Version ID. Save this to correlate the operation.
          format: uuid
        image_id:
          type: string
          description: Parent image ID.
          format: uuid
        source_image_id:
          type: string
          description: >-
            Child job ID. Poll GET /images/{id} with this ID to track
            processing.
          format: uuid
          nullable: true
        source_version_id:
          type: string
          description: Resource ID.
          format: uuid
          nullable: true
        version_type:
          type: string
          description: For example edited, upscaled, or video.
        status:
          type: string
          description: Job state. Only completed has a finished result.
          enum:
            - pending
            - generating
            - completed
            - failed
            - policy_blocked
            - nsfw_filtered
        path:
          type: string
          description: Result URL; may be empty while processing.
        width_px:
          type: integer
          description: ''
        height_px:
          type: integer
          description: ''
        created_timestamp:
          type: string
          description: ''
          format: date-time
        fail_reason:
          type: string
          description: ''
          nullable: true
        failure_code:
          type: string
          description: ''
          nullable: true
      required:
        - id
        - image_id
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Create an API key in Studio → account menu → API Keys. Keep it on your
        server.

````