API documentation
KinoGenie API
Generate short video clips with native audio from a text prompt, or animate an image. One endpoint, asynchronous jobs, flat per-second pricing. The OpenAPI description lives at https://kinogenie.com/openapi.json.
Quickstart
Create an API key in the dashboard, then queue a generation. The body has no media inputs — only options.
curl -X POST https://kinogenie.com/api/v1/tools/generate-video \
-H "Authorization: Bearer kp_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-first-clip" \
-d '{
"inputs": [],
"options": {
"prompt": "Golden-hour beach, a golden retriever puppy runs toward the camera in slow motion, shallow depth of field. Audio: soft waves, joyful piano.",
"seconds": 5,
"resolution": "768p",
"aspect_ratio": "16:9"
}
}'The response is 202 Accepted with a job.id and a statusUrl. Rendering takes a few minutes.
Options
prompt | Required, up to 2000 characters. Describe the shot, the motion, the style and the audio (dialogue, sound effects, music). Concrete beats vague: camera move, light, subject, mood. |
seconds | 4–15, default 5. Frames snap to the model grid (5 s = 124 frames at 24 fps). |
resolution | 768p (default) or 480p on the short edge. |
aspect_ratio | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 (default 16:9). Ignored when image_url is set. |
image_url | Image-to-video: public HTTPS image (JPEG, PNG or WebP, up to 20 MB) or a media_url from POST /api/v1/uploads. Used as the first frame; the clip keeps the image's aspect ratio (capped at 21:9). Refer to it as <Picture 1> in the prompt. |
last_image_url | Optional last frame (requires image_url): the clip ends on this image. |
seed | Optional integer for reproducible results. |
webhook | Optional top-level object, see Webhooks. |
Jobs and results
Poll GET https://kinogenie.com/api/v1/jobs/{id} until status is succeeded or failed. A succeeded job carries the file:
{
"job": { "id": "…", "status": "succeeded", "consumedCredits": 30, "reservedCredits": 30 },
"result": {
"output": {
"downloadUrl": "https://cdn.kinopipe.com/outputs/…/output.mp4",
"contentType": "video/mp4", "byteSize": 2613940
},
"input": { "generation": { "width": 1376, "height": 768, "frames": 124, "steps": 8, "seed": 7 } },
"runtimeMs": 253218
}
}The download URL is served from a CDN and stays valid for a year. Files are H.264 + AAC stereo at 24 fps and carry an AI-generated tag in their metadata.
Webhooks
Add "webhook": { "url": "https://…", "secret": "at least 16 characters" } to the request and we POST job.succeeded or job.failed to that URL, signed with HMAC-SHA256 in the X-KinoPipe-Signature header (X-KinoPipe-Delivery deduplicates retries).
MCP server
Connect https://kinogenie.com/mcp to Claude, ChatGPT or Codex — OAuth sign-in, no key to paste. Two tools: generate_video (same options as the REST call) and get_job. See Connect MCP.
claude mcp add --transport http --scope user kinogenie https://kinogenie.com/mcpn8n
Use an HTTP Request node against the endpoint above with your API key, then a Wait + HTTP Request loop on the job URL — or the KinoPipe community node with a custom job. A dedicated KinoGenie node is on the roadmap.
Pricing
Credits per second of video, reserved when the job is queued and settled as-is. Failed renders are refunded.
| Per second of video | Credits | Starter ($12/mo) | Developer ($29/mo) | Pro ($99/mo) | Credit pack |
|---|---|---|---|---|---|
| 480p (short edge) | 5 | $0.04/s | $0.029/s | $0.02/s | $0.045/s |
| 768p (short edge) | 8 | $0.064/s | $0.046/s | $0.032/s | $0.072/s |
Plans and packs are on the pricing page.
Content policy and model
Clips are rendered with MiniMax H3 (MiniMax, open weights) on our GPU workers. Prompts and outputs are moderated: no real-person likeness without consent, no sexual, violent or unlawful content, no misleading synthetic media. Outputs may not be used to train other models. Every file is tagged as AI-generated in its metadata (EU AI Act art. 50); keep that tag when you publish.
Errors
400 invalid_tool_request | An option is out of range (see Options). |
402 insufficient_credits | The full price could not be reserved. Buy credits or shorten the clip. |
409 idempotency_conflict | The idempotency key was reused with different options. |
503 generation_disabled | Generation is not open for this account yet. |
failed · generation_failed | The render failed; credits are refunded and the message says why. |