Create a lyric video, a Canvas or a music video
- MCP tool
create_lyric_video- CLI
kinetune create lyric-video- MCP tool
create_canvas- CLI
kinetune create canvas- MCP tool
create_music_video- CLI
kinetune create music-video
/api/v1/videosNot sent from the docs: it spends credits. Run it with curl, the CLI or its MCP tool.
Make the lyric video a quote priced (spends credits)
Send the same request as the quote plus its quote_id. Returns the video ids at once; poll get_video until status is completed (or failed). Each video has one file per format. Needs an active plan (402 plan_required without one; get_account: plan.active) and room in its storage (402 storage_full when it would not fit; get_account: storage).
Make the Canvas a quote priced (spends credits)
Send the same request as the quote plus its quote_id. Returns the video ids at once; poll get_video until status is completed. Upload the file in Spotify for Artists. Needs an active plan (402 plan_required without one; get_account: plan.active) and room in its storage (402 storage_full when it would not fit; get_account: storage).
Make the music video a quote priced (spends credits)
Send the same request as the quote plus its quote_id. Returns the video ids at once; poll get_video until status is completed. It takes about 5 minutes for a minute of song, longer for the whole song. Needs an active plan (402 plan_required without one; get_account: plan.active) and room in its storage (402 storage_full when it would not fit; get_account: storage).
AuthorizationBearer <token>An organization API key (kt_live_…) or an OAuth access token
application/json- body
type*unknownsong_id*stringThe song id
1 <= length <= 120variations?integer1–4 different New Looks, one video each (an Existing Look renders one)
1 <= value <= 41callback_url?stringAn https URL to POST the finished video to (signed; see Callbacks). Quote and create with the same value
length <= 2000metadata?Your own JSON (an order id, for example): kept with the video and returned in its request. Quote and create with the same value
look*|{"mode":"existing","id":"look_…"} to reuse a saved Look (add "lyric_style" to render it in another lyric style, at no extra cost), or {"mode":"new","category":"…","lyric_style":"…","background":{"source":"ai-image","quality":"high"},"visibility":"private","direction":"…"} to have one designed (background.source "upload-photo"/"upload-video" with background.upload_id from upload_background designs it around your own media; such a Look stays private. "stock-photo"/"stock-video" with background.stock_id from search_stock uses that stock photo or clip instead of the director's pick). lyric_style (optional, from get_options) sets how the lyrics are presented and animated: block-stack, punch, player, neon, terminal, cinematic… Omit it and the director picks one. background.scenes (2–4, AI image only) makes that many shots of the same world that cut on the song's sections, each priced like the first. background.references "stock" (AI image or AI video, default "none") with feature_artist "always" makes the background one real stock photo of a place the director picks, with the artist put into it and restyled a little for the Look; no extra cost. The singer is left out unless asked: feature_artist "always" (default "never") makes them the subject of the background, recognizable from their artist photos (add_artist_photos); it needs an AI image or AI video background, a private Look and display.cover false (the cover would hide them), and that Look then only serves this artist's songs. A saved Look that shows an artist (featured_artist) only serves that artist's songs, also with display.cover false
aspect_ratios?array<>Formats to render, each its own file: "9:16" (vertical), "16:9" (wide), "1:1" (square)
1 <= items <= 3[
"9:16"
]display?Which elements show (title, artist, cover, lyrics, badges, headline) and their sizes. cover must be false to show the artist in the background
{
"title": true,
"artist": true,
"cover": true,
"lyrics": true,
"badges": true
}trim?Render only this section of the song (at least 8 seconds). Best: a part from get_song_analysis (parts[]: its start and end never cut a word)
quote_id*stringThe quote_id from the matching quote: the request must be identical
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidcurl -X POST 'https://kinetune.com/api/v1/videos' \
-H 'Content-Type: application/json' \
-d '{
"type": "lyric-video",
"song_id": "string",
"look": {
"mode": "new",
"category": "release"
},
"quote_id": "3c071a1d-db86-46a7-9dc8-72ba3fbca992"
}'