Guide
AI video generation API for apps and agents
An AI video generation API with Kling, Veo, Seedance and more behind one key: price a clip, start it, wait for it, and get refunded if it fails.
Kinoseed is an AI video generation API: one REST endpoint and one MCP server in front of 17 video models (Seedance 2.0, Kling 3.0, Google Veo 3.1, Google Veo 3.1 Lite, Grok Imagine, Wan 3.0, MiniMax H3, Seedance 2.5, Wan 2.7, MiniMax Hailuo 2.3, Seedance 1.5 Pro, Seedance 2.0 Mini, Kling 3.0 Standard, Seedance 2.0 Fast, Kling 2.6 Pro, MiniMax Hailuo 2.3 Fast and Google Veo 3.1 Fast), all paid from one prepaid credit balance. You send a prompt and, if you like, a start frame; you get back a job; you read the job until it holds a video URL.
This guide covers the three calls a video run takes, what the models cost, which inputs each accepts, and what happens when a run fails. Every price on this page is computed from the same quote functions the API charges with, at the moment the page renders.
Sign in, create a key on your account page, and call any model with one key.
Three calls: quote, start, wait
Video runs take one to several minutes, so the API never holds a POST open for that long. Instead, POST /api/v1/videos charges the run and answers at once with a job in queued. You then read GET /api/v1/jobs/{id}?wait=50, which holds the line for up to 50 seconds and returns early the moment the job is final.
Before the POST, send the same body to POST /api/v1/quote. It is free, it charges nothing, and the number it returns is what the run will cost.
const KEY = process.env.KINOSEED_API_KEY!; // ks_live_YOUR_KEY
const BASE = "https://kinoseed.app/api/v1";
const headers = { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" };
const body = {
prompt: "a lighthouse at dusk, waves breaking, slow aerial orbit",
model: "kling-3",
duration: 5,
aspect: "16:9",
};
// 1. Price it. Free, and the number is what the run will charge.
const quote = await (
await fetch(`${BASE}/quote`, { method: "POST", headers, body: JSON.stringify({ kind: "video", ...body }) })
).json();
console.log("this clip costs", quote.credits, "credits");
// 2. Start it. The Idempotency-Key makes a retry after a timeout safe.
const res = await fetch(`${BASE}/videos`, {
method: "POST",
headers: { ...headers, "Idempotency-Key": "lighthouse-001" },
body: JSON.stringify(body),
});
if (!res.ok) throw new Error((await res.json()).error.code); // e.g. insufficient_credits
let job = await res.json();
// 3. Wait for it. Each GET holds up to 50 seconds and returns as soon as the job is final.
while (job.status !== "completed" && job.status !== "failed") {
job = await (await fetch(`${BASE}/jobs/${job.id}?wait=50`, { headers })).json();
}
console.log(job.status, job.output.videoUrl ?? job.error, job.credits); // a failed job shows its refund
Each step is documented on its own page: Quote, Videos and Jobs.
The models and what a clip costs
Every model below is reachable with the same request shape; only the model id changes. Prices are for the shortest clip each model makes, at its first resolution, without sound, which is the example GET /models returns:
seedance-2Seedance 2.0: 130 credits ($2.60) for 5s, at 480p.kling-3Kling 3.0: 110 credits ($2.20) for 5s, no sound.veo-3-1Google Veo 3.1: 150 credits ($3) for 4s, at 720p, no sound.veo-3-1-liteGoogle Veo 3.1 Lite: 25 credits ($0.50) for 4s, at 720p, no sound, from a start frame.grok-imagine-videoGrok Imagine: 55 credits ($1.10) for 6s, at 480p.wan-3Wan 3.0: 50 credits ($1) for 5s, at 480p.minimax-h3MiniMax H3: 50 credits ($1) for 5s, at 480P.seedance-2-5Seedance 2.5: 170 credits ($3.40) for 4s, at 480p.wan-2-7Wan 2.7: 95 credits ($1.90) for 5s, at 720p, from a start frame.minimax-hailuo-23MiniMax Hailuo 2.3: 90 credits ($1.80) for 6s, from a start frame.seedance-1-5-proSeedance 1.5 Pro: 12 credits ($0.24) for 5s, at 480p, no sound.seedance-2-miniSeedance 2.0 Mini: 70 credits ($1.40) for 5s, at 480p.kling-3-standardKling 3.0 Standard: 80 credits ($1.60) for 5s, no sound.seedance-2-fastSeedance 2.0 Fast: 110 credits ($2.20) for 5s, at 480p.kling-2-6Kling 2.6 Pro: 65 credits ($1.30) for 5s, no sound.minimax-hailuo-23-fastMiniMax Hailuo 2.3 Fast: 40 credits ($0.80) for 6s, from a start frame.veo-3-1-fastGoogle Veo 3.1 Fast: 75 credits ($1.50) for 4s, at 720p, no sound.
Length, resolution and sound change the price. A 5-second Kling 3.0 clip is 110 credits; a 10-second one with sound is 310. The text to video API pricing guide explains what moves the number, and the video generation API comparison puts each model next to the provider's list price.
Text, frames and references
Models differ in what they accept, and GET /models says so per model in its inputs field. The request fields are the same for all of them:
prompt: what happens in the clip. Up to 2,000 characters.startImageUrl: a first frame to animate. Models that only animate images need it; text models switch to their image-to-video endpoint when you send it.endImageUrl: a last frame, on the models whoseinputs.endImageis true.referenceImageUrls: several images the prompt refers to, on models with a multi-reference mode.duration,aspect,resolution: snapped to the nearest value the model allows, and the quote follows the snapped value.audio: off by default, because sound can double the price on some models. Turn it on when you want it.
Input images must be public https URLs or URLs returned by POST /files. The API resolves every URL and refuses private addresses, localhost and plain http before anything fetches it, so a key holder cannot point it at an internal network.
When a run fails
Providers fail some runs: a prompt is refused, a frame cannot be read, a queue times out. When that happens the whole charge comes back on its own and the job shows it: credits.charged and credits.refunded are equal, and error says why in plain words. There is nothing to claim.
Retries are safe if you send an Idempotency-Key. The same key with the same body within 24 hours returns the first job instead of starting and charging a second one. See Idempotency.
An account can have 5 runs queued or running at once, web app runs included. One more is refused with 429 too_many_running and nothing is charged.
Polling or webhooks
Polling with ?wait=50 is enough for a script or an agent. A backend with many runs can register a webhook and Kinoseed sends a signed job.completed or job.failed POST with the whole job in it. The output URLs are already copied to Kinoseed's storage, so they do not expire with the provider's.
curl -X POST https://kinoseed.app/api/v1/webhooks \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/hooks/kinoseed", "events": ["job.completed", "job.failed"] }'
# The response holds "secret": "whsec_..." once. Store it now.
See Webhooks.
From an agent
The same runs are available as MCP tools: generate_video starts a run and returns the job, and get_job with wait_seconds follows it. Claude Code, Cursor and other MCP clients connect with one URL and the same API key. The Claude Code guide walks through it, and the MCP server page has the setup for every client.
Generating begins with a plan from $10 a month (500 credits a month). Every tool page is open to browse without an account.
Questions
Which AI video models does the API offer?
Seedance 2.0, Kling 3.0, Google Veo 3.1, Google Veo 3.1 Lite, Grok Imagine, Wan 3.0, MiniMax H3, Seedance 2.5, Wan 2.7, MiniMax Hailuo 2.3, Seedance 1.5 Pro, Seedance 2.0 Mini, Kling 3.0 Standard, Seedance 2.0 Fast, Kling 2.6 Pro, MiniMax Hailuo 2.3 Fast and Google Veo 3.1 Fast. GET /api/v1/models?kind=video lists them with their inputs, durations, resolutions and an example price, and needs no key.
How long does a video take?
Usually one to several minutes, depending on the model and the length. Loop GET /jobs/{id}?wait=50 or register a webhook; give up on your side after about ten minutes and keep the job id, because the job keeps its state on the server.
Do I pay for a video that fails?
No. A run the provider fails or refuses is refunded in full, automatically, and the job shows the refund in credits.refunded.
Can I use the clips commercially?
You keep ownership of what you upload and of the outputs, under the terms, which also set out the acceptable use and consent rules. Results carry no watermark.
Is there an SDK?
Not yet. The API is plain JSON over HTTPS, so fetch and httpx are enough; SDKs shows both, and any OpenAPI generator can build a client from /openapi.json.
Sign in, create a key on your account page, and call any model with one key.