SEEAPISEEAPI
Developer CenterDocs
Get API Key
  • Getting Started
  • Authentication
  • List Model Prices
  • Create a Generation
  • Get Task Details
Image Models
Alibaba
Black Forest Labs
ByteDance
Google
Grok
OpenAI
SeeAPI
Video Models
Alibaba
ByteDance
Google
Grok
Kling
Lightricks
MiniMax
PixVerse
Runway
SeeAPI
Vidu
Music Models
Text Models

Policies

  • Data Handling & Privacy
  • Terms of Service
  • Privacy Policy
  • Commercial Use Policy
www.seeapi.com

One AI API for every leading model. Create images, videos, music, and multimodal AI assets online, or build with one unified API.

Developers
  • AI Models
  • API Pricing
  • AI Integrations
  • API Keys
  • Documentation
Support
  • Pricing
  • [email protected]
Legal
  • Privacy Policy
  • Refund Policy
  • Terms & Conditions

Copyright 2026 © SeeAPI. All rights reserved.

GROWCRAFT PTE. LTD.

·5 RAFFLES PLACE, #06-00, RAFFLES PLACE MRT STATION, SINGAPORE 048618

Text to VideoImage to VideoReference to Video

Kling 4.0 · Image to Video

Guide Kling 4.0 video generation with a first frame, ordered middle frames and a last frame. Describe the motion between images, then query the asynchronous generation to retrieve the result.

Developer API pricing

Provider: SeeAPI

USD estimate: $0.0037 / credit · Estimated equivalent, not an additional charge.

720p: 38.1 credits/sec (≈ $0.14/sec)

1080p: 56.8 credits/sec (≈ $0.21/sec)

Request

POST/v1/generations
AuthorizationSend your API key in the Authorization header using the Bearer scheme.Authorization: Bearer ****************

Header Params

stringrequired

A unique key used to safely retry the same request.

  • Required; maximum 255 characters.
  • Reuse the same key only with the same request body.
max length: 255
Example:
order-20260818-001

Body Params

application/json
stringrequired

The model identifier.

  • Required. Use kling-4-0.
Allowed:kling-4-0
Default:
kling-4-0
Example:
kling-4-0
stringrequired

The generation capability to run.

  • Required. Use image-to-video.
Allowed:image-to-video
Default:
image-to-video
Example:
image-to-video
stringoptional

The public provider to use.

  • Optional. The default provider is seeapi.
Allowed:seeapi
Default:
seeapi
Example:
seeapi
objectrequired

The frame images, prompt and output settings for this generation.

  • Supply publicly reachable HTTPS image URLs. URLs must point to actual JPEG or PNG files.
  • The total number of first, middle and last frames must not exceed min(10, duration_seconds + 1). For a 5-second video, use at most 6 frames in total.

Provider parameters

SeeAPIseeapiDefault Provider
string <uri>optional

The image used as the first frame.

  • Optional. JPEG or PNG, at most 10 MB.
  • Use @first_frame in the prompt only when this image is supplied.
Example:
https://client.example.com/first.png
array <uri>optional

An ordered array of middle-frame image URLs guiding the progression between the first and last frames.

  • Optional; at most 8 middle frames. Each file must be JPEG or PNG and at most 10 MB.
  • All frames share the total limit min(10, duration_seconds + 1).
  • Reference supplied middle frames as @keyframe_1, @keyframe_2 and so on, in array order.
max items: 8
Example:
["https://client.example.com/middle.png"]
string <uri>optional

The image used as the last frame.

  • Optional. JPEG or PNG, at most 10 MB.
  • Use @last_frame in the prompt only when this image is supplied.
Example:
https://client.example.com/last.png
stringrequired

Describe the actions, transitions and camera movement between the supplied frames.

  • Required; maximum 8000 characters.
  • Only mention frame references that are included in this request.
max length: 8000
Example:
Start from @first_frame, follow the subject walking toward the open doorway shown in @keyframe_1, and end with the composition of @last_frame. Smooth camera motion and consistent appearance.
numberoptional

The desired output video duration in seconds.

  • Optional. Use an integer from 3 to 30; default 5.
  • Increasing duration also changes the allowed total frame count, up to 10 frames.
min: 3max: 30
Default:
5
stringoptional

The output video resolution.

  • Optional. Allowed values: 720p, 1080p. Default: 720p.
Allowed:720p1080p
Default:
720p
stringoptional

The output frame aspect ratio.

  • Optional. Allowed values: auto, 16:9, 9:16, 1:1, 21:9. Default: auto.
Allowed:auto16:99:161:121:9
Default:
auto
string <uri>optional

An absolute HTTPS URL that receives the terminal generation webhook.

  • Optional; maximum 2048 characters.
  • Verify webhook signatures before processing callbacks.
max length: 2048
Example:
https://client.example.com/webhooks/seeapi

Responses

202The request was accepted for asynchronous processing.
Bodyapplication/json
  • Save generation.id and query the task until it reaches a terminal state.
  • This response does not contain the completed video.
objectrequired

The accepted generation and its current processing status.

stringrequired

The generation identifier. Save it to query status and retrieve the result.

Example:
task_xxx
stringrequired

The model used for this generation.

Example:
kling-4-0
stringrequired

The endpoint used for this generation.

Example:
image-to-video
stringrequired

The selected public provider.

Allowed:seeapi
  • seeapi: SeeAPI
Example:
seeapi
stringrequired

The current generation state. Processing does not mean the video is ready.

Allowed:processing
Example:
processing
numberrequired

The estimated charge in public credits for this request.

Example:
190.5
numberrequired

Credits consumed by this generation so far.

Example:
0
numberrequired

Credits refunded for this generation so far.

Example:
0
string <date-time>required

The time the generation was created, in ISO 8601 format.

Example:
2026-08-18T10:00:00Z
string <date-time>required

The time the generation was last updated, in ISO 8601 format.

Example:
2026-08-18T10:00:00Z
booleanrequired

Whether this is a replay of an earlier request with the same idempotency key.

Example:
false
200An existing generation was returned for an idempotent replay.
Bodyapplication/json
  • The same idempotency key and request body return the original generation rather than creating another one.
objectrequired

The accepted generation and its current processing status.

stringrequired

The generation identifier. Save it to query status and retrieve the result.

Example:
task_xxx
stringrequired

The model used for this generation.

Example:
kling-4-0
stringrequired

The endpoint used for this generation.

Example:
image-to-video
stringrequired

The selected public provider.

Allowed:seeapi
  • seeapi: SeeAPI
Example:
seeapi
stringrequired

The current generation state. Processing does not mean the video is ready.

Allowed:processing
Example:
processing
numberrequired

The estimated charge in public credits for this request.

Example:
190.5
numberrequired

Credits consumed by this generation so far.

Example:
0
numberrequired

Credits refunded for this generation so far.

Example:
0
string <date-time>required

The time the generation was created, in ISO 8601 format.

Example:
2026-08-18T10:00:00Z
string <date-time>required

The time the generation was last updated, in ISO 8601 format.

Example:
2026-08-18T10:00:00Z
booleanrequired

Whether this is a replay of an earlier request with the same idempotency key.

Example:
false
400

Invalid JSON, parameters, Schema, or API Policy

401

Invalid API Key or authentication failed

402

Insufficient credits

403

The current request is not allowed

404

Model, Endpoint, or task not found

409

Idempotency conflict or the same request is still being created

413

Request body is too large

429

Too many requests

503

Service temporarily unavailable

Related Resources

Market Overview

Explore all available models

Credits & Billing

View credit balance, plans, and billing activity

Usage

Review API usage and credit consumption

Query Task Status

After submitting a task, use the unified query endpoint to check progress and retrieve results:

Get Task DetailsLearn how to query task status and retrieve generation results

Submit requests from your server using a Bearer API key. Store generation.id and use Get Task Details to retrieve the result. Replace all example image URLs with publicly reachable HTTPS URLs for your actual images.

Callbacks

Manage the secret used to verify generation webhook signatures. Callback URLs are supplied when you create each generation.

Webhook flow

Callback URL per generation.

Webhook signing key
Code Examples
Request
const response = await fetch("https://api.seeapi.com/v1/generations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Idempotency-Key": "order-20260818-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "kling-4-0",
  "endpoint": "image-to-video",
  "provider": "seeapi",
  "input": {
    "first_frame_image": "https://client.example.com/first.png",
    "keyframe_urls": [
      "https://client.example.com/middle.png"
    ],
    "last_frame_image": "https://client.example.com/last.png",
    "prompt": "Start from @first_frame, follow the subject walking toward the open doorway shown in @keyframe_1, and end with the composition of @last_frame. Smooth camera motion and consistent appearance.",
    "duration_seconds": 5,
    "resolution": "720p",
    "aspect_ratio": "auto"
  },
  "callback_url": "https://client.example.com/webhooks/seeapi"
})
});

const result = await response.json();
ResponseHTTP 202
{
  "generation": {
    "id": "task_xxx",
    "model": "kling-4-0",
    "endpoint": "image-to-video",
    "provider": "seeapi",
    "status": "processing",
    "estimated_credits": 190.5,
    "consumed_credits": 0,
    "refunded_credits": 0,
    "created_at": "2026-08-18T10:00:00Z",
    "updated_at": "2026-08-18T10:00:00Z"
  },
  "idempotent": false
}
PreviousKling 4.0 · Text to VideoNextKling 4.0 · Reference to Video
Request
const response = await fetch("https://api.seeapi.com/v1/generations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Idempotency-Key": "order-20260818-001",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "model": "kling-4-0",
  "endpoint": "image-to-video",
  "provider": "seeapi",
  "input": {
    "first_frame_image": "https://client.example.com/first.png",
    "keyframe_urls": [
      "https://client.example.com/middle.png"
    ],
    "last_frame_image": "https://client.example.com/last.png",
    "prompt": "Start from @first_frame, follow the subject walking toward the open doorway shown in @keyframe_1, and end with the composition of @last_frame. Smooth camera motion and consistent appearance.",
    "duration_seconds": 5,
    "resolution": "720p",
    "aspect_ratio": "auto"
  },
  "callback_url": "https://client.example.com/webhooks/seeapi"
})
});

const result = await response.json();
ResponseHTTP 202
{
  "generation": {
    "id": "task_xxx",
    "model": "kling-4-0",
    "endpoint": "image-to-video",
    "provider": "seeapi",
    "status": "processing",
    "estimated_credits": 190.5,
    "consumed_credits": 0,
    "refunded_credits": 0,
    "created_at": "2026-08-18T10:00:00Z",
    "updated_at": "2026-08-18T10:00:00Z"
  },
  "idempotent": false
}