openapi: 3.0.3 info: title: Kling AI Open Platform Account Image-to-Video API description: 'The Kling AI Open Platform is the developer API for Kuaishou''s Kling generative video and image models. Every capability follows the same asynchronous pattern: submit a task with POST (receiving a task_id), then poll the matching GET endpoint by task_id until status is succeed and the generated video or image URLs are returned. Generated asset URLs are short-lived and should be downloaded promptly. Authentication uses a JWT (HS256) signed from an Access Key / Secret Key pair, passed as a Bearer token; tokens are short-lived (about 30 minutes). endpointsModeled: The overall path structure, async task model, JWT auth, and model catalog are grounded in Kling''s official Open Platform documentation and cross-referenced against multiple Kling API wrappers. Kling''s official reference pages block automated fetching (HTTP 446), so exact request/response field-level schemas here are honestly modeled on the documented behavior rather than copied verbatim, and should be reconciled against the live reference before code generation.' version: '1.0' contact: name: Kling AI Open Platform url: https://app.klingai.com/global/dev servers: - url: https://api.klingai.com description: Kling AI Open Platform (global) security: - bearerAuth: [] tags: - name: Image-to-Video description: Animate images into video. paths: /v1/videos/image2video: post: operationId: createImageToVideoTask tags: - Image-to-Video summary: Create an image-to-video task description: Animate a start image (and optional end image) with a motion prompt. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ImageToVideoRequest' responses: '200': description: Task accepted. content: application/json: schema: $ref: '#/components/schemas/TaskCreatedResponse' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' /v1/videos/image2video/{task_id}: get: operationId: getImageToVideoTask tags: - Image-to-Video summary: Query an image-to-video task parameters: - $ref: '#/components/parameters/TaskId' responses: '200': description: Task status and, when complete, the generated video URL. content: application/json: schema: $ref: '#/components/schemas/VideoTaskResponse' /v1/videos/multi-image2video: post: operationId: createMultiImageToVideoTask tags: - Image-to-Video summary: Create a multi-image-to-video task description: Compose a video from multiple reference images plus a prompt. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MultiImageToVideoRequest' responses: '200': description: Task accepted. content: application/json: schema: $ref: '#/components/schemas/TaskCreatedResponse' /v1/videos/multi-image2video/{task_id}: get: operationId: getMultiImageToVideoTask tags: - Image-to-Video summary: Query a multi-image-to-video task parameters: - $ref: '#/components/parameters/TaskId' responses: '200': description: Task status and, when complete, the generated video URL. content: application/json: schema: $ref: '#/components/schemas/VideoTaskResponse' components: schemas: VideoTaskResponse: type: object properties: code: type: integer message: type: string request_id: type: string data: type: object properties: task_id: type: string task_status: type: string enum: - submitted - processing - succeed - failed task_result: type: object properties: videos: type: array items: type: object properties: id: type: string url: type: string duration: type: string ImageToVideoRequest: type: object required: - image properties: model_name: type: string example: kling-v2-6 image: type: string description: Start-frame image as a URL or base64 string. image_tail: type: string description: Optional end-frame image as a URL or base64 string. prompt: type: string negative_prompt: type: string cfg_scale: type: number mode: type: string enum: - std - pro duration: type: string enum: - '5' - '10' callback_url: type: string TaskCreatedResponse: type: object properties: code: type: integer description: Business status code (0 indicates success). message: type: string request_id: type: string data: type: object properties: task_id: type: string task_status: type: string enum: - submitted - processing - succeed - failed created_at: type: integer updated_at: type: integer Error: type: object properties: code: type: integer message: type: string request_id: type: string MultiImageToVideoRequest: type: object required: - image_list - prompt properties: model_name: type: string example: kling-v1-6 image_list: type: array items: type: string description: List of reference image URLs or base64 strings. prompt: type: string mode: type: string enum: - std - pro duration: type: string enum: - '5' - '10' callback_url: type: string responses: Unauthorized: description: Missing, invalid, or expired JWT. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Too many requests or concurrency limit exceeded. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: TaskId: name: task_id in: path required: true schema: type: string description: The task identifier returned by the create-task call. securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'A JWT signed with HS256 from your Access Key (as the iss claim) and Secret Key, passed as Authorization: Bearer . Tokens are short-lived (about 30 minutes; nbf is typically set 5 seconds in the past).'