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

promptRequired, 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.
seconds415, default 5. Frames snap to the model grid (5 s = 124 frames at 24 fps).
resolution768p (default) or 480p on the short edge.
aspect_ratio16:9, 9:16, 1:1, 4:3, 3:4, 21:9 (default 16:9). Ignored when image_url is set.
image_urlImage-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_urlOptional last frame (requires image_url): the clip ends on this image.
seedOptional integer for reproducible results.
webhookOptional 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/mcp

n8n

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 videoCreditsStarter ($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_requestAn option is out of range (see Options).
402 insufficient_creditsThe full price could not be reserved. Buy credits or shorten the clip.
409 idempotency_conflictThe idempotency key was reused with different options.
503 generation_disabledGeneration is not open for this account yet.
failed · generation_failedThe render failed; credits are refunded and the message says why.