{"openapi":"3.1.0","info":{"title":"Clippie API","version":"1.0.0","description":"Make Clippie videos, images and audio from code. Create calls return 202 { job }: poll GET /v1/jobs/{id}?wait=30 or pass a webhookUrl. Send \"dryRun\": true to see the cost first, and an Idempotency-Key to make retries safe. Errors are { error: { type, message, param?, requestId } }.","contact":{"name":"Clippie","url":"https://clippie.ai/developers"}},"servers":[{"url":"https://api.clippie.ai"}],"externalDocs":{"url":"https://clippie.ai/developers"},"tags":[{"name":"Resources","description":"Account and catalog."},{"name":"Jobs","description":"Async jobs started by create calls."},{"name":"Files","description":"Uploads used as inputs."},{"name":"Create","description":"Calls that spend credits or minutes."}],"paths":{"/v1/me":{"get":{"operationId":"get_account","summary":"Get account","description":"Shows the user's Clippie plan, AI credit balance (plan and top-up), the voiceover, caption and export minutes left, when the period ends and whether videos are watermarked. Call this first, and before anything that spends.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"get_account","responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id","email","name"],"additionalProperties":false},"plan":{"anyOf":[{"type":"object","properties":{"name":{"type":["string","null"]},"interval":{"type":["string","null"]},"status":{"type":"string"},"active":{"type":"boolean"},"cancelAtPeriodEnd":{"type":"boolean"},"periodEnd":{"type":["string","null"]}},"required":["name","interval","status","active","cancelAtPeriodEnd","periodEnd"],"additionalProperties":false},{"type":"null"}]},"credits":{"type":"object","properties":{"balance":{"type":"number"},"regular":{"type":"number"},"toppedUp":{"type":"number"}},"required":["balance","regular","toppedUp"],"additionalProperties":false},"minutesLeft":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"watermark":{"type":"object","properties":{"clippie":{"type":"boolean","description":"Whether exports carry the Clippie watermark (never on an active paid plan)."},"brand":{"type":"boolean","description":"Whether the user's brand kit adds their own watermark to videos."}},"required":["clippie","brand"],"additionalProperties":false}},"required":["user","plan","credits","minutesLeft","watermark"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/credits/history":{"get":{"operationId":"list_credit_history","summary":"List credit history","description":"Lists credit movements (top-ups, plan credits, generations, refunds) and minute spends, newest first, each linked to its API job when there is one.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_credit_history","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["credits","minutes"]},"type":{"type":"string"},"description":{"type":["string","null"]},"amount":{"type":"number"},"balanceAfter":{"type":["number","null"]},"generationId":{"type":["string","null"]},"jobId":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","kind","type","description","amount","balanceAfter","generationId","jobId","createdAt"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/voices":{"get":{"operationId":"list_voices","summary":"List voices","description":"Lists narration voices: the user's own cloned voices first, then the popular voices, then the rest. Filter with search (name, accent, style), gender, language or mine. Pass a voice's id as voiceId.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_voices","parameters":[{"name":"search","in":"query","required":false,"description":"Matches name, accent or description, e.g. \"british\" or \"deep\".","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":60}],"description":"Matches name, accent or description, e.g. \"british\" or \"deep\"."}},{"name":"gender","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","enum":["male","female"]}]}},{"name":"language","in":"query","required":false,"description":"Language code, e.g. \"en\", \"es\", \"jp\".","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":10}],"description":"Language code, e.g. \"en\", \"es\", \"jp\"."}},{"name":"mine","in":"query","required":false,"description":"Only the user's own cloned voices.","schema":{"anyOf":[{"not":{}},{"type":"boolean"}],"description":"Only the user's own cloned voices."}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as voiceId."},"name":{"type":"string"},"gender":{"type":["string","null"]},"accent":{"type":["string","null"]},"language":{"type":["string","null"]},"description":{"type":["string","null"]},"previewUrl":{"type":["string","null"]},"popular":{"type":"boolean"},"custom":{"type":"boolean","description":"True for the user's own cloned voices."}},"required":["id","name","gender","accent","language","description","previewUrl","popular","custom"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/caption-styles":{"get":{"operationId":"list_caption_styles","summary":"List caption styles","description":"Lists the burned-in caption styles (font, colours, one word at a time or lines). Pass an id as captionStyleId.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_caption_styles","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Pass as captionStyleId."},"previewImageUrl":{"type":["string","null"]},"fontFamily":{"type":["string","null"]},"oneWordAtATime":{"type":"boolean"},"uppercase":{"type":"boolean"},"textColor":{"type":["string","null"]},"highlightColor":{"type":["string","null"]}},"required":["id","previewImageUrl","fontFamily","oneWordAtATime","uppercase","textColor","highlightColor"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/art-styles":{"get":{"operationId":"list_art_styles","summary":"List art styles","description":"Lists the looks an AI Story video can have. Either pass a type \"style\" id as artStyleId, or pass one of imageModels as imageModel together with a type \"stylePrompt\" id as stylePromptId. Direct-model scene images are included on paid plans.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_art_styles","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","enum":["style","stylePrompt"]}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["style","stylePrompt"]},"name":{"type":"string"},"category":{"type":["string","null"]},"thumbnailUrl":{"type":["string","null"]}},"required":["id","type","name","category","thumbnailUrl"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]},"imageModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":false}}},"required":["data","nextCursor","imageModels","categories"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/story-templates":{"get":{"operationId":"list_story_templates","summary":"List story templates","description":"Lists ready-made AI Story formats (an art style plus a frame shape, e.g. \"History documentary\" 16:9). Pass an id as storyTemplateId to set the look and aspect ratio in one go.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_story_templates","parameters":[{"name":"aspectRatio","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","enum":["16:9","9:16"]}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as storyTemplateId."},"name":{"type":"string"},"description":{"type":"string"},"aspectRatio":{"type":"string","enum":["16:9","9:16"]},"look":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"style"},"artStyleId":{"type":"string"}},"required":["type","artStyleId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"model"},"imageModel":{"type":"string"},"stylePromptId":{"type":"string"}},"required":["type","imageModel","stylePromptId"],"additionalProperties":false}]},"sampleVideoUrl":{"type":["string","null"]},"badge":{"type":["string","null"]}},"required":["id","name","description","aspectRatio","look","sampleVideoUrl","badge"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/motion-templates":{"get":{"operationId":"list_motion_templates","summary":"List motion templates","description":"Lists the trending motion clips used by Clippie Recast and motion-control video models, in the same order as AI Studio (newest hand-picked uploads first, then by trend). Pass an id as motionTemplateId. Each template says its length and whether Recast accepts it (recastCompatible); offer only those for recast_video.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_motion_templates","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as motionTemplateId."},"name":{"type":"string"},"videoUrl":{"type":"string"},"characterCount":{"type":"integer","description":"How many people move in the clip: send one photo per person."},"characterLabels":{"type":"array","items":{"type":"string"}},"sizeBytes":{"type":["number","null"]},"klingCompatible":{"type":"boolean"},"durationSeconds":{"type":["number","null"],"description":"Length of the clip in seconds; null when it could not be measured just now."},"recastCompatible":{"type":["boolean","null"],"description":"Whether Clippie Recast (recast_video) accepts it: Recast takes 5-30 s clips. null when the length is not known yet; the call checks it."},"recastReason":{"type":["string","null"],"description":"Why Recast refuses it, when recastCompatible is false."}},"required":["id","name","videoUrl","characterCount","characterLabels","sizeBytes","klingCompatible","durationSeconds","recastCompatible","recastReason"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/models":{"get":{"operationId":"list_models","summary":"List AI models","description":"Lists the AI Studio video and image models with their resolutions, aspect ratios, durations and credit price per generation (images: per image). Use an id as model for generate_video / generate_image.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_models","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","enum":["video","image"]}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as model."},"type":{"type":"string","enum":["video","image"]},"name":{"type":"string"},"capabilities":{"type":"array","items":{"type":"string"}},"resolutions":{"type":"array","items":{"type":"string"}},"aspectRatios":{"type":"array","items":{"type":"string"}},"durations":{"type":"array","items":{"type":"number"}},"minDurationSeconds":{"type":"number"},"maxDurationSeconds":{"type":"number"},"maxReferenceImages":{"type":"number"},"pricing":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolution":{"type":"string"},"durationSeconds":{"type":"number"},"withAudio":{"type":"boolean"},"credits":{"type":"number"}},"required":["resolution","durationSeconds","withAudio","credits"],"additionalProperties":false},{"type":"object","properties":{"resolution":{"type":"string"},"credits":{"type":"number"}},"required":["resolution","credits"],"additionalProperties":false}]}}},"required":["id","type","name","capabilities","resolutions","aspectRatios","pricing"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/background-videos":{"get":{"operationId":"list_background_videos","summary":"List background videos","description":"Lists the gameplay and satisfying background clips (Minecraft parkour, Roblox, ...) used behind story videos.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_background_videos","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":60}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as backgroundVideoId."},"category":{"type":"string"},"url":{"type":"string"},"thumbnailUrl":{"type":["string","null"]},"previewGifUrl":{"type":["string","null"]},"durationSeconds":{"type":"number"},"aspectRatio":{"type":["string","null"]}},"required":["id","category","url","thumbnailUrl","previewGifUrl","durationSeconds","aspectRatio"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/music":{"get":{"operationId":"list_music","summary":"List music","description":"Lists background music tracks, popular first. Tracks with hasCopyrightWarning may be muted on some platforms. Pass an id as musicId.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_music","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":60}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Pass as musicId."},"name":{"type":"string"},"url":{"type":"string"},"hasCopyrightWarning":{"type":"boolean"},"popular":{"type":"boolean"}},"required":["id","name","url","hasCopyrightWarning","popular"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/sound-effects":{"get":{"operationId":"list_sound_effects","summary":"List sound effects","description":"Lists the short sound effects (whoosh, bell, punch, ...) that can be placed on a video timeline.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_sound_effects","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":60}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"durationSeconds":{"type":"number"}},"required":["id","name","url","durationSeconds"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/languages":{"get":{"operationId":"list_languages","summary":"List languages","description":"Lists the languages for captions, transcription and narration. Pass a code as language.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_languages","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"flag":{"type":"string"}},"required":["code","name","flag"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/jobs":{"get":{"operationId":"list_jobs","summary":"List jobs","description":"Lists the jobs started through the API or MCP, newest first, with their status, output and what they cost. Filter by status or kind.","tags":["Jobs"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"list_jobs","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]}]}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":40}]}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1-100. Default 25.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":1,"maximum":100}],"description":"How many to return, 1-100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"anyOf":[{"not":{}},{"type":"string","maxLength":500}],"description":"`nextCursor` from the previous page."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["data","nextCursor"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/jobs/{id}":{"get":{"operationId":"get_job","summary":"Get job","description":"Gets one job: status (queued, processing, rendering, completed, failed, canceled), step, progress, output (videoUrl, imageUrls, audioUrl, captions, editorUrl) and cost. Pass waitSeconds (up to 50) to wait for it to finish instead of polling in a loop.","tags":["Jobs"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"get_job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":80,"description":"The job id, job_…"}},{"name":"wait","in":"query","required":false,"description":"Wait up to this many seconds (max 50) for the job to finish. REST: ?wait=.","schema":{"anyOf":[{"not":{}},{"type":"integer","minimum":0,"maximum":50}],"description":"Wait up to this many seconds (max 50) for the job to finish. REST: ?wait=."}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/jobs/{id}/cancel":{"post":{"operationId":"cancel_job","summary":"Cancel job","description":"Cancels a job that is still queued and refunds what it was charged. Jobs that have started cannot be canceled.","tags":["Jobs"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"cancel_job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":80,"description":"The job id, job_…"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/estimate":{"post":{"operationId":"estimate_cost","summary":"Estimate cost","description":"Shows what a create tool would charge (credits and voiceover, caption and export minutes) and whether it would go through, without spending anything. Pass the tool name and the same input you would send it. Confirm the cost with the user before creating.","tags":["Resources"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"estimate_cost","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string","minLength":1,"maxLength":80,"description":"A create tool name, e.g. generate_image."},"input":{"type":"object","additionalProperties":{},"default":{},"description":"The tool's input."}},"required":["tool"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["tool","estimate"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/files":{"post":{"operationId":"upload_file","summary":"Upload file","description":"Imports an image, video or audio file from a public https URL (up to 100 MB) so other tools can use it as fileId. REST callers can also send the file itself as multipart/form-data (field \"file\").","tags":["Files"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"upload_file","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"Public https URL of the file to import."},"name":{"type":"string","maxLength":120,"description":"File name to keep, e.g. \"intro.mp4\"."}},"additionalProperties":false}},"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Up to 100 MB."},"url":{"type":"string","format":"uri","maxLength":2048,"description":"Public https URL of the file to import."},"name":{"type":"string","maxLength":120,"description":"File name to keep, e.g. \"intro.mp4\"."}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string","description":"file_…; pass as fileId."},"object":{"type":"string","const":"file"},"type":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","object","type","url","createdAt"],"additionalProperties":false}},"required":["file"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/files/uploads":{"post":{"operationId":"create_file_upload","summary":"Start a large file upload","description":"Starts a multipart upload for files over 100 MB (up to 5 GB): returns presigned URLs to PUT each part to, valid for an hour, then call POST /v1/files/uploads/complete with each part's ETag.","tags":["Files"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":null,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"maxLength":120},"contentType":{"type":"string","minLength":3,"maxLength":100,"description":"image/*, video/* or audio/*"},"sizeBytes":{"type":"integer","minimum":1,"maximum":5368709120}},"required":["fileName","contentType","sizeBytes"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"uploadId":{"type":"string"},"partSizeBytes":{"type":"number"},"parts":{"type":"array","items":{"type":"object","properties":{"partNumber":{"type":"number"},"url":{"type":"string"}},"required":["partNumber","url"],"additionalProperties":false}},"expiresAt":{"type":"string"}},"required":["key","uploadId","partSizeBytes","parts","expiresAt"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/files/uploads/complete":{"post":{"operationId":"complete_file_upload","summary":"Finish a large file upload","description":"Finishes a multipart upload started with POST /v1/files/uploads and returns the file.","tags":["Files"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":null,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":400},"uploadId":{"type":"string","minLength":1,"maxLength":1000},"parts":{"type":"array","items":{"type":"object","properties":{"partNumber":{"type":"integer","minimum":1,"maximum":10000},"etag":{"type":"string","minLength":1,"maxLength":200}},"required":["partNumber","etag"],"additionalProperties":false},"minItems":1,"maxItems":10000}},"required":["key","uploadId","parts"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string","description":"file_…; pass as fileId."},"object":{"type":"string","const":"file"},"type":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","object","type","url","createdAt"],"additionalProperties":false}},"required":["file"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/files/{id}":{"get":{"operationId":"get_file","summary":"Get file","description":"Gets a file uploaded with upload_file: its type and URL.","tags":["Files"],"security":[{"bearer":[]},{"oauth2":["read"]}],"x-clippie-scope":"read","x-clippie-mcp-tool":"get_file","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":80,"description":"file_…"}}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string","description":"file_…; pass as fileId."},"object":{"type":"string","const":"file"},"type":{"type":"string","enum":["image","video","audio"]},"url":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","object","type","url","createdAt"],"additionalProperties":false}},"required":["file"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/images":{"post":{"operationId":"generate_image","summary":"Generate images","description":"Generates 1-4 images with an AI Studio model (Nano Banana, Seedream, Flux, Imagen). Spends credits: about 6 credits for one 1-megapixel Nano Banana image; bigger sizes, more images and premium models cost more (list_models has every price). Run with dryRun: true (or estimate_cost) first and confirm the cost. Returns a job; get_job with waitSeconds returns the image URLs, usually within a minute.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"generate_image","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","enum":["flux-dev","flux-2-dev","flux-2-pro","flux-2-flex","flux-2-max","imagen-4","imagen-4-fast","imagen-4-ultra","seedream-4.0","seedream-4.5","seedream-5.0-lite","seedream-5.0-flash","nano-banana","nano-banana-2.1","nano-banana-pro"],"default":"nano-banana","description":"Image model id from list_models (type image)."},"prompt":{"type":"string","minLength":1,"maxLength":4000,"description":"What to draw."},"aspectRatio":{"type":"string","enum":["1:1","16:9","9:16","4:3","3:4","21:9","9:21","3:2","2:3"],"default":"1:1","description":"Image shape. Not every model takes every ratio (list_models)."},"resolution":{"type":"string","enum":["0.5","1","2","4"],"default":"1","description":"Megapixels. Not every model takes every size."},"count":{"type":"integer","minimum":1,"maximum":4,"default":1,"description":"How many images, 1-4. Each is charged."},"referenceImages":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048,"description":"A reference image: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"maxItems":14,"description":"Images to work from, for the models that take them (maxReferenceImages in list_models)."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"required":["prompt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/videos":{"post":{"operationId":"generate_video","summary":"Generate a video clip","description":"Generates a short AI video clip with an AI Studio model: Seedance and Veo from text or images, Clippie Recast and Genjutsu from a source video (referenceVideoUrl or motionTemplateId) plus photos. Spends credits, from tens to hundreds a clip depending on model, length and resolution (list_models has the prices). Run with dryRun: true (or estimate_cost) first and confirm the cost. Returns a job; clips take 1-10 minutes, so use get_job with waitSeconds.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"generate_video","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","enum":["seedance-2-5","seedance-2-0","seedance-2-0-fast","seedance-2-0-mini","seedance-1-5-pro-251215","seedance-1-0-pro-250528","seedance-1-0-pro-fast-251015","veo-3.1-generate-preview","veo-3.1-fast-generate-preview","veo-3.0-generate-001","veo-3.0-fast-generate-001","clippie-recast","genjutsu-motion-transfer","genjutsu-object-swap","genjutsu-restyle"],"description":"Video model id from list_models (type video)."},"prompt":{"type":"string","maxLength":5000,"default":"","description":"What happens in the clip. Optional for the source-video models."},"imageUrl":{"type":"string","minLength":1,"maxLength":2048,"description":"First frame, or the character photo for Recast and Genjutsu: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"lastFrameUrl":{"type":"string","minLength":1,"maxLength":2048,"description":"Last frame (needs imageUrl): a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"referenceImages":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048,"description":"A reference image: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"maxItems":30,"description":"Reference images (Seedance 2, Veo 3.1), or more people and objects for Recast and Genjutsu."},"referenceVideos":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048,"description":"A reference video: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"maxItems":10,"description":"Seedance 2 reference videos."},"referenceAudios":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048,"description":"A reference audio clip: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"maxItems":10,"description":"Seedance 2 reference audio."},"referenceVideoUrl":{"type":"string","minLength":1,"maxLength":2048,"description":"Source video for Recast and Genjutsu: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"motionTemplateId":{"type":"string","minLength":1,"maxLength":120,"description":"A motion template id from list_motion_templates, used as the source video instead of referenceVideoUrl."},"duration":{"type":"integer","minimum":1,"maximum":30,"description":"Seconds, within the model's range (list_models). Source-video models take the source's length."},"resolution":{"type":"string","enum":["480p","720p","1080p"],"description":"Default: 720p when the model has it, else its first."},"aspectRatio":{"type":"string","enum":["auto","21:9","16:9","4:3","1:1","3:4","9:16"],"description":"Default 9:16 when the model has it."},"withAudio":{"type":"boolean","description":"Generate sound, for the models that can (Veo always does)."},"presetId":{"type":"string","format":"uuid","description":"Genjutsu Restyle look."},"seed":{"type":"integer"},"cameraFixed":{"type":"boolean","description":"Seedance 1.x: keep the camera still."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"required":["model"],"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/recast":{"post":{"operationId":"recast_video","summary":"Recast a trending video","description":"Clippie Recast: puts the people in your photos into a trending motion template (list_motion_templates), keeping its moves, camera and sound. Send one photo per person in the template. Spends credits by the template's length: about 413 credits for a 10-second clip at 720p; 1080p costs more. Run with dryRun: true (or estimate_cost) first and confirm the cost. Returns a job; recasts take a few minutes, so use get_job with waitSeconds.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"recast_video","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"motionTemplateId":{"type":"string","minLength":1,"maxLength":120,"description":"The motion template to recast, from list_motion_templates."},"photo":{"type":"string","minLength":1,"maxLength":2048,"description":"Photo of the person to put in the video: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"photos":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048,"description":"A photo of one person: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"minItems":1,"maxItems":4,"description":"One photo per person, matched to the template's people from left to right (its characterCount)."},"resolution":{"type":"string","enum":["720p","1080p"],"default":"720p"},"prompt":{"type":"string","maxLength":2000,"description":"Optional direction for the recast."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"required":["motionTemplateId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/upscale":{"post":{"operationId":"upscale","summary":"Upscale an image or video","description":"Upscales an image (2x-6x) or a video (to 720p, 1080p or 4K) with Topaz. Spends credits: about 7 for a 2x image (more at 4x and 6x) and 155 for a video of up to 30 seconds to 1080p at 60 fps. The price follows the real file: bigger images, longer videos (up to 10 minutes) and 4K cost more. Run with dryRun: true (or estimate_cost) first and confirm the cost. Images finish within the call; videos return a running job, so use get_job with waitSeconds.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"upscale","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"maxLength":80,"description":"The image or video to upscale: a file id from POST /v1/files."},"url":{"type":"string","minLength":1,"maxLength":2048,"description":"The image or video to upscale: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"mediaType":{"type":"string","enum":["image","video"],"description":"Optional check: refuse the call unless the file is this type."},"upscaleFactor":{"type":"string","enum":["2x","4x","6x"],"default":"2x","description":"Images: how much bigger."},"enhanceModel":{"type":"string","enum":["Standard V2","Low Resolution V2","CGI","High Fidelity V2","Text Refine"],"default":"Standard V2"},"outputFormat":{"type":"string","enum":["jpg","png","webp"],"default":"jpg"},"faceEnhancement":{"type":"boolean","default":false},"targetResolution":{"type":"string","enum":["720p","1080p","4k"],"default":"1080p","description":"Videos: output resolution."},"targetFps":{"type":"integer","minimum":15,"maximum":60,"default":60,"description":"Videos: output frame rate."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/speech":{"post":{"operationId":"text_to_speech","summary":"Text to speech","description":"Turns text into an mp3 narration with a Clippie voice or one of your cloned voices, with word timings. Spends voiceover minutes for the audio's length (about 150 words a minute), and the same in caption minutes for the word timings. Finishes within the call: the job comes back completed with audioUrl and captions.words.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"text_to_speech","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000,"description":"What to say."},"voiceId":{"type":"string","minLength":1,"maxLength":64,"description":"A voice id from list_voices (Clippie's or your own)."},"stability":{"type":"number","minimum":0.01,"maximum":1,"default":0.5},"similarity":{"type":"number","minimum":0.01,"maximum":1,"default":0.75},"language":{"type":"string","maxLength":10,"description":"Language code, e.g. \"en\"."},"wordTimestamps":{"type":"boolean","default":true,"description":"Also return word timings (transcribes the audio, which uses caption minutes too)."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"required":["text","voiceId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/transcribe":{"post":{"operationId":"transcribe","summary":"Transcribe audio or video","description":"Transcribes an audio or video file (up to 30 minutes) into punctuated text, word timings, and SRT and WebVTT captions split at sentence ends. Spends caption minutes for the file's length. Finishes within the call: the job comes back completed with captions.words, captions.srt and captions.vtt.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"transcribe","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileId":{"type":"string","minLength":1,"maxLength":80,"description":"An audio or video file id from POST /v1/files."},"url":{"type":"string","minLength":1,"maxLength":2048,"description":"The audio or video to transcribe: a file id from POST /v1/files (file_…) or a public https URL (copied into Clippie first, up to 100 MB)."},"language":{"type":"string","minLength":2,"maxLength":10,"description":"Language code, e.g. \"en\". Detected when left out."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/ai/scripts":{"post":{"operationId":"write_script","summary":"Write a script","description":"Writes a narration script for a short video from a topic, with the AI Story editor's writer, a theme, a tone and a target length. Free: spends no credits or minutes. Finishes within the call: the job comes back completed with output.script. Pass the script on to text_to_speech or create_ai_story_video.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"write_script","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"maxLength":2000,"description":"The topic or idea, e.g. \"the fall of the Roman Empire\"."},"durationSeconds":{"type":"integer","minimum":30,"maximum":300,"default":60,"description":"Target narration length, 30-300 seconds."},"theme":{"type":"string","enum":["any","historical","scientific","geography","politics","nature","religion","technology","psychology","mystery","space","mythology","war"],"default":"any"},"tone":{"type":"string","enum":["cinematic","suspenseful","educational","dark","inspirational","humorous","dramatic","casual","horror","scary","thriller","creepy"],"default":"cinematic"},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"required":["prompt"],"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/videos/ai-story":{"post":{"operationId":"create_ai_story_video","summary":"Create AI Story video","description":"Makes a narrated AI Story video (script, voiceover, scene images, captions, music) and renders it to MP4. Give one of prompt (a script is written to fill durationSeconds, 30-300, default 60), script, or voiceoverFileId. Spends minutes, not credits: about 1 voiceover, 1 caption and 1 export minute per minute of video (render: false skips the export minutes and returns an editable project). Run estimate_cost (or dryRun: true) first and confirm the cost. Takes a few minutes: wait with get_job (waitSeconds). At most 3 videos are made at once per account. The result has videoUrl and editorUrl.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"create_ai_story_video","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":2000,"description":"What the video is about; a script is written from it to fill durationSeconds. Give one of prompt, script or voiceoverFileId."},"script":{"type":"string","minLength":20,"maxLength":12000,"description":"The exact narration to use (it sets the length; durationSeconds is ignored)."},"voiceoverFileId":{"type":"string","maxLength":80,"description":"file_… id of your own narration audio (upload it with upload_file). It is transcribed for captions; no voice is generated. Up to 5 minutes."},"title":{"type":"string","minLength":1,"maxLength":120,"description":"Project and file name. Defaults to the start of the prompt or script."},"storyTemplateId":{"type":"string","maxLength":64,"description":"A format from list_story_templates: sets the look and the aspect ratio in one go. artStyleId, imageModel and aspectRatio override it."},"voiceId":{"type":"string","minLength":1,"maxLength":64,"description":"Narration voice id from list_voices (catalog voices or your own cloned ones). Defaults to your brand voice."},"artStyleId":{"type":"string","maxLength":64,"description":"A look from list_art_styles: a type \"style\" id, or a type \"stylePrompt\" id (rendered with imageModel, default seedream-5.0-lite)."},"imageModel":{"type":"string","enum":["nano-banana","nano-banana-2.1","nano-banana-pro","seedream-5.0-lite","flux-2-pro"],"description":"Draw the scene images with this model (from list_art_styles imageModels) instead of a named style. Included with paid plans."},"stylePromptId":{"type":"string","maxLength":64,"description":"Style preset (a type \"stylePrompt\" id) for imageModel."},"aspectRatio":{"type":"string","enum":["9:16","16:9"],"description":"Frame shape. Defaults to the story template, then your brand."},"durationSeconds":{"type":"integer","minimum":30,"maximum":300,"description":"Length of the whole video in seconds (30-300, default 60) when the script is written from prompt. The script is sized to the voice's measured speaking speed."},"language":{"type":"string","maxLength":10,"description":"Narration and caption language code from list_languages (e.g. \"en\", \"es\", \"ja\"). Default: detected."},"captionStyleId":{"type":"integer","minimum":1,"maximum":17,"description":"Caption style id from list_caption_styles. Defaults to your brand caption style."},"musicId":{"type":"string","maxLength":64,"description":"Background music id from list_music, or \"none\" for no music. Defaults to your brand track."},"theme":{"type":"string","enum":["any","historical","scientific","geography","politics","nature","religion","technology","psychology","mystery","space","mythology","war"],"description":"Subject direction for a script written from prompt."},"tone":{"type":"string","enum":["cinematic","suspenseful","educational","dark","inspirational","humorous","dramatic","casual","horror","scary","thriller","creepy"],"description":"Voice and pacing for a script written from prompt."},"render":{"type":"boolean","description":"Default true: render the MP4 (spends export minutes). false keeps an editable project and returns only editorUrl."},"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/videos/{projectId}/render":{"post":{"operationId":"render_video","summary":"Render video","description":"Renders an AI Story project you own to MP4: one made with create_ai_story_video (render: false) or in the Clippie editor. Spends export minutes for the video length (1 per minute of video). Run estimate_cost (or dryRun: true) first. Projects with placeholder scene images are refused: regenerate those scenes in the editor first.\n\nSpends credits or minutes.","tags":["Create"],"security":[{"bearer":[]},{"oauth2":["create"]}],"x-clippie-scope":"create","x-clippie-mcp-tool":"render_video","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The AI Story project id: output.projectId of a job, or the id in an editor URL."}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Up to 255 characters. A retry with the same key and body returns the first job; kept 24 h.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","description":"Check the request and return { estimate } (credits and minutes) without spending anything."},"webhookUrl":{"type":"string","format":"uri","maxLength":2048,"description":"https URL that receives job.completed / job.failed, signed with your webhook secret."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Retry-safe key: repeating a call with the same key and input returns the first job instead of starting (and charging) again. REST callers can send the Idempotency-Key header instead."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Dry run: what the call would charge. Nothing was started.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","const":true},"estimate":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false},"wouldSucceed":{"type":"boolean"},"reason":{"type":"string"},"reasonType":{"type":"string"},"details":{"type":"object","additionalProperties":{}}},"required":["credits","minutes","wouldSucceed"],"additionalProperties":false}},"required":["dryRun","estimate"],"additionalProperties":false}}}},"202":{"description":"The job was started (or replayed).","headers":{"X-Request-Id":{"schema":{"type":"string"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"job_…"},"object":{"type":"string","const":"job"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","processing","rendering","completed","failed","canceled"]},"step":{"type":["string","null"]},"progress":{"type":["number","null"]},"input":{"type":"object","additionalProperties":{}},"output":{"anyOf":[{"type":"object","properties":{"videoUrl":{"type":"string"},"imageUrls":{"type":"array","items":{"type":"string"}},"audioUrl":{"type":"string"},"captions":{},"editorUrl":{"type":"string"},"libraryId":{"type":"string"}},"additionalProperties":true},{"type":"null"}]},"cost":{"type":"object","properties":{"credits":{"type":"number"},"minutes":{"type":"object","properties":{"voiceover":{"type":"number"},"captions":{"type":"number"},"export":{"type":"number"}},"required":["voiceover","captions","export"],"additionalProperties":false}},"required":["credits","minutes"],"additionalProperties":false},"error":{"anyOf":[{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"}},"required":["type","message"],"additionalProperties":false},{"type":"null"}]},"source":{"type":"string","enum":["api","mcp"]},"webhookUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"completedAt":{"type":["string","null"]}},"required":["id","object","kind","status","step","progress","input","output","cost","error","source","webhookUrl","createdAt","startedAt","completedAt"],"additionalProperties":false}},"required":["job"],"additionalProperties":false}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key (clp_pat_…) from Settings → API, or an OAuth access token (clp_at_…)."},"oauth2":{"type":"oauth2","description":"Authorization code with PKCE (S256). Clients can register dynamically at /oauth/register.","flows":{"authorizationCode":{"authorizationUrl":"https://clippie.ai/oauth/authorize","tokenUrl":"https://api.clippie.ai/oauth/token","refreshUrl":"https://api.clippie.ai/oauth/token","scopes":{"read":"See your plan, balance, catalog, jobs and files","create":"Make videos, images and audio, spending your credits and minutes"}}}}},"responses":{"Error":{"description":"400: invalid_request; 401: unauthorized; 402: insufficient_credits or insufficient_minutes; 403: subscription_required, forbidden_scope, suspended or forbidden; 404: not_found; 409: idempotency_conflict or too_many_active_jobs; 422: generation_rejected; 429: rate_limited (see Retry-After); 500: internal","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","message","requestId"],"properties":{"type":{"type":"string","enum":["invalid_request","unauthorized","insufficient_credits","insufficient_minutes","subscription_required","forbidden_scope","suspended","forbidden","not_found","idempotency_conflict","too_many_active_jobs","generation_rejected","rate_limited","internal"]},"message":{"type":"string"},"param":{"type":"string"},"requestId":{"type":"string"}}}}}}}}}}}