{"openapi":"3.1.0","info":{"title":"Clips API","version":"1.0.0","description":"Create videos, manage the Library and schedule posts to connected accounts in a Clips workspace. Every response is `{ data, error }`. Docs: /docs"},"servers":[{"url":"https://clips.lnr.ae"}],"security":[{"bearer":[]}],"tags":[{"name":"Workspace","description":"The workspace a key belongs to, and the templates its projects are built from."},{"name":"Projects","description":"Editable videos built from a template. Create one from a starter or from full props, then change it until it's right."},{"name":"AI video generation","description":"Have the AI director write, voice and edit a video from a prompt, saved as a project you can open in the editor."},{"name":"AI studio","description":"Follow and revise AI videos, make product films of real apps, and film AI footage. Paid calls reserve credits first and give them back when nothing is made."},{"name":"Rendering","description":"Turn a template project into an MP4 on the Clips server, then download it or post it."},{"name":"Videos and library","description":"Find finished videos and library files, download them, and upload your own MP4s, so you have a videoId or storagePath to post."},{"name":"Connected accounts","description":"The social accounts connected to the workspace, how posts reach each one, and the weekly posting times that next_free_slot fills."},{"name":"Posts and calendar","description":"Schedule a finished MP4 to connected accounts, then follow, change, retry, copy or cancel the posts and read their numbers."},{"name":"Brand and characters","description":"How the workspace looks and sounds, and who appears in its videos. Every video, caption and idea follows the brand kit."},{"name":"Usage, analytics and notifications","description":"What the workspace has left to spend, how its posts did on each platform, and the notices that need attention."},{"name":"Ideas and captions","description":"AI help with what to post and how to word it. Each request spends AI writing calls from the daily allowance, never credits."}],"paths":{"/api/v1/workspace":{"get":{"operationId":"getWorkspace","summary":"Get the workspace","description":"The key's workspace: its name, plan, the formats and platforms it posts to, and how many projects it has. A good first call to check a key works.\n\nMCP tool: `get_workspace`.","tags":["Workspace"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","name":"Lunar Coffee","slug":"lunar-coffee","createdAt":"2026-10-01T08:00:00.000Z","plan":"pro","formats":["vertical"],"platforms":["instagram","tiktok"],"postsPerWeek":5,"projectCount":12},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/templates":{"get":{"operationId":"listTemplates","summary":"List templates","description":"Every template with its scenes, a plain description of each field, its JSON Schema and a working example, plus the starters you can create a project from without writing props.\n\nMCP tool: `list_templates`.","tags":["Workspace"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"templates":[{"id":"stat-reveal","name":"Stat reveal","summary":"One striking number, revealed and explained.","durationSeconds":15,"scenes":[{"name":"Hook","from":0,"to":3}],"fields":[{"path":"brand.name","description":"Brand name shown at the end, 1–40 characters."}],"propsSchema":{"type":"object"},"exampleProps":{}}],"starters":[{"id":"coffee","label":"Coffee shop"}]},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/projects":{"get":{"operationId":"listProjects","summary":"List projects","description":"Projects, newest first, a page at a time.\n\nMCP tool: `list_projects`.","tags":["Projects"],"x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"The `nextCursor` from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"projects":[{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Coffee facts","template":"stat-reveal","createdAt":"2026-11-14T09:30:00.000Z","updatedAt":"2026-11-14T09:30:00.000Z"}],"nextCursor":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createProject","summary":"Create a project","description":"Send a template with a starter (and optionally a name, hook and accent colour), or a template with full props from List templates.\n\nMCP tool: `create_project`.","tags":["Projects"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","template"],"properties":{"title":{"type":"string","minLength":1,"maxLength":120},"template":{"type":"string","enum":["stat-reveal","problem-solution"]},"starter":{"type":"string","enum":["clips","coffee","science","kids","history"],"description":"Use a starter, or send props."},"name":{"type":"string","maxLength":40,"description":"With a starter: the brand name."},"hook":{"type":"string","maxLength":80,"description":"With a starter: the opening line."},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"With a starter: the accent colour."},"props":{"type":"object","description":"The template's full props, instead of a starter."}}},"example":{"title":"Coffee facts","template":"stat-reveal","starter":"coffee","name":"Lunar Coffee","accent":"#c8a26b"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Coffee facts","template":"stat-reveal","createdAt":"2026-11-14T09:30:00.000Z","updatedAt":"2026-11-14T09:30:00.000Z","props":{"brand":{"name":"Lunar Coffee","accent":"#c8a26b"}}},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/projects/{id}":{"get":{"operationId":"getProject","summary":"Get a project","description":"One project with its full props.\n\nMCP tool: `get_project`.","tags":["Projects"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The project's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Coffee facts","template":"stat-reveal","createdAt":"2026-11-14T09:30:00.000Z","updatedAt":"2026-11-14T09:30:00.000Z","props":{"brand":{"name":"Lunar Coffee","accent":"#c8a26b"}}},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateProject","summary":"Update a project","description":"Rename it, replace its props, or both. New props replace the old ones whole and must fit the project's template.\n\nMCP tool: `update_project`.","tags":["Projects"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The project's id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"props":{"type":"object"}}},"example":{"title":"Coffee facts, take two"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Coffee facts, take two","template":"stat-reveal","createdAt":"2026-11-14T09:30:00.000Z","updatedAt":"2026-11-14T09:30:00.000Z","props":{}},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteProject","summary":"Delete a project","description":"Deletes the project. This can't be undone.","tags":["Projects"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The project's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/generate":{"get":{"operationId":"listFormats","summary":"List video formats","description":"The formats the director knows, with the fields each one asks for. Use one instead of a free prompt for a predictable structure.","tags":["AI video generation"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"formats":[{"id":"explainer-30","name":"Explainer in 30 Seconds","summary":"One idea, explained clearly.","lengthSeconds":30,"fields":[{"id":"topic","label":"Topic","required":true,"maxLength":80}]}]},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"generateVideo","summary":"Generate a video","description":"Makes a video from a prompt, or from a format and its fields, and saves it as a project. By default the request waits for the result, usually 1 to 4 minutes, so allow a long timeout. Send \"wait\": false to get a sessionId back at once (HTTP 202) and poll Get a video session instead. Paid plans only; each video costs credits and counts against the plan's monthly AI video allowance.\n\nMCP tool: `generate_video`.","tags":["AI video generation"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","maxLength":4000,"description":"What the video is about. Send this, or a format."},"format":{"type":"string","description":"A format id from List video formats."},"fields":{"type":"object","additionalProperties":{"type":"string","maxLength":600},"description":"The format's fields, by id (at most 8)."},"lengthSeconds":{"type":"integer","minimum":10,"maximum":60,"default":30},"voice":{"type":"boolean","default":true},"music":{"type":"boolean","default":true},"captions":{"type":"string","enum":["standard","animated","off"],"default":"standard"},"broll":{"type":"boolean","default":false,"description":"Add stock footage between scenes."},"platform":{"type":"string","enum":["tiktok","instagram","linkedin","all"],"default":"all"},"wait":{"type":"boolean","default":true,"description":"false: answer at once with a sessionId (HTTP 202) and poll Get a video session."}}},"example":{"format":"product-ad","fields":{"product":"Halo, a smart water bottle","problem":"People forget to drink water at work","cta":"Try it for 30 days"},"lengthSeconds":20}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"projectId":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Halo: drink more without thinking","sessionId":"0b9e7c4d-2f1a-4c3b-8d5e-6f7a8b9c0d1e","message":"A 20-second ad: the problem, Halo's reminder glow, the 40% proof, then the offer.","editorUrl":"https://clips.lnr.ae/app/editor/6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/sessions/{id}":{"get":{"operationId":"getVideoSession","summary":"Get a video session","description":"An AI video session started through the API or MCP: running, done or failed, the live steps, the saved project, its scenes and the latest messages. Poll every 15–30 seconds while it runs. Chats made in the app aren't listed here. Free.\n\nMCP tool: `get_video_session`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The sessionId from Generate a video.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"4d2a9c71-3e5b-4f08-b1c6-7a9e2d4f6b13","title":"Heat pumps in 30 seconds","status":"done","updatedAt":"2026-11-14T09:12:44.208Z","projectId":"9e1b7c3a-2f4d-4a6e-8b5c-1d3f5a7e9c20","editorUrl":"https://clips.lnr.ae/app/editor/9e1b7c3a-2f4d-4a6e-8b5c-1d3f5a7e9c20","revisions":{"used":1,"limit":10},"steps":[],"scenes":[{"id":"hook","type":"kinetic-title","text":"Your boiler is burning money"},{"id":"stat","type":"big-number","text":"3x more efficient than gas"},{"id":"outro","type":"brand-outro","text":"Switch this winter"}],"messages":[{"role":"user","content":"A 30 second explainer on how heat pumps work, calm and clear","projectId":null,"createdAt":"2026-11-14T09:05:02.114Z"},{"role":"assistant","content":"Your video is ready: a calm 30 second explainer in three scenes.","projectId":"9e1b7c3a-2f4d-4a6e-8b5c-1d3f5a7e9c20","createdAt":"2026-11-14T09:08:31.902Z"},{"role":"user","content":"Make the hook shorter","projectId":null,"createdAt":"2026-11-14T09:10:57.330Z"},{"role":"assistant","content":"Done: the hook is now four words and lands in under two seconds.","projectId":"9e1b7c3a-2f4d-4a6e-8b5c-1d3f5a7e9c20","createdAt":"2026-11-14T09:12:44.150Z"}]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/sessions/{id}/revise":{"post":{"operationId":"reviseVideo","summary":"Revise a video","description":"Change a generated video by instruction, the whole video or one scene (sceneId). A revision costs 1 credit up to the plan's cap per video; newVersion, or a change past the cap, costs a new video (10 credits). Answers at once; poll the session. With \"wait\": true it answers 200 with the session when done (1–4 minutes).\n\nMCP tool: `revise_video`.","tags":["AI studio"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The video's sessionId.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["instruction"],"additionalProperties":false,"properties":{"instruction":{"type":"string","maxLength":4000},"sceneId":{"type":"string","pattern":"^[a-z0-9-]{1,32}$"},"newVersion":{"type":"boolean","default":false},"voiceId":{"type":"string"},"language":{"type":"string"},"modelId":{"type":"string"},"wait":{"type":"boolean","default":false}}},"example":{"instruction":"Use an Arabic voice and make the hook shorter","language":"ar"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"sessionId":"4d2a9c71-3e5b-4f08-b1c6-7a9e2d4f6b13","title":"Heat pumps in 30 seconds","status":"running"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/voices":{"get":{"operationId":"listVoices","summary":"List voices","description":"Narrators to pass as voiceId when revising, and the languages a video can be written and voiced in. source=library searches the public voice library. Free.\n\nMCP tool: `list_voices`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"source","in":"query","required":false,"description":"Curated narrators, or the public library.","schema":{"type":"string","enum":["account","library"],"default":"account"}},{"name":"search","in":"query","required":false,"description":"With source=library: words to search for.","schema":{"type":"string","maxLength":60}},{"name":"language","in":"query","required":false,"description":"With source=library: an ISO 639-1 code.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"voices":[{"id":"a1B2c3D4e5F6g7H8i9J0","name":"Alice","tagline":"Clear, Engaging Educator","gender":"female","accent":"british","age":"middle_aged","language":"en","useCase":"educational","descriptive":"confident","previewUrl":"https://…/alice-preview.mp3"}],"languages":[{"id":"en","name":"English"},{"id":"ar","name":"Arabic"}],"hasMore":false},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/models":{"get":{"operationId":"listVideoModels","summary":"List video models","description":"The models the director can run on, by Clips' public name, with each one's tier and the credits a new video costs on it. Pass an id as modelId when revising. Free.\n\nMCP tool: `list_video_models`.","tags":["AI studio"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"models":[{"id":"m_3f9a1c7e5b2d8a40","label":"Clips Pro","tier":"premium","credits":10,"recommended":true}],"defaultId":"m_3f9a1c7e5b2d8a40"},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/films":{"get":{"operationId":"listFilms","summary":"List product films","description":"The workspace's product films, newest first, with a download link for finished ones. Free.\n\nMCP tool: `list_films`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"The nextCursor from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"films":[{"id":"b7f3d1e9-6a2c-4e85-9d47-2c8a6e0f4b31","status":"succeeded","stage":"Ready in your Library","style":{"id":"glass","name":"Glass"},"aspect":"9:16","brief":"Show how Halo turns support tickets into answers in seconds.","message":null,"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/halo-product-film.mp4","downloadUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/halo-product-film.mp4?token=…","createdAt":"2026-11-14T08:40:10.512Z","finishedAt":"2026-11-14T08:52:37.006Z"}],"nextCursor":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createFilm","summary":"Create a product film","description":"A cinematic film of a real app from its public link and/or library screenshots. Costs 10 credits, reserved first and refunded if it can't be made; takes about 5–15 minutes, so poll Get a product film. Styles: glass, studio-light, fluid, isometric, flow, turnaround, minimal, neon, vivid, ribbon, canvas, playful, sunlit.\n\nMCP tool: `create_film`.","tags":["AI studio"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["brief","style"],"additionalProperties":false,"properties":{"brief":{"type":"string","maxLength":4000},"style":{"type":"string","enum":["glass","studio-light","fluid","isometric","flow","turnaround","minimal","neon","vivid","ribbon","canvas","playful","sunlit"]},"aspect":{"type":"string","enum":["9:16","16:9"],"default":"9:16"},"productUrl":{"type":"string"},"productScreens":{"type":"array","items":{"type":"string"},"maxItems":8},"brandKitId":{"type":"string","format":"uuid"},"brand":{"type":"object","description":"{ kind: \"kit\" } (default), { kind: \"link\", url }, or { kind: \"none\", name? }."},"wideScreens":{"type":"string","enum":["crop","whole"],"default":"crop"}}},"example":{"brief":"Show how Halo turns support tickets into answers in seconds.","style":"glass","productUrl":"https://app.halo.example"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"b7f3d1e9-6a2c-4e85-9d47-2c8a6e0f4b31","status":"writing","stage":"Writing the film","style":{"id":"glass","name":"Glass"},"aspect":"9:16","brief":"Show how Halo turns support tickets into answers in seconds.","message":null,"storagePath":null,"downloadUrl":null,"createdAt":"2026-11-14T08:40:10.512Z","finishedAt":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/films/{id}":{"get":{"operationId":"getFilm","summary":"Get a product film","description":"A film's status (writing, queued, rendering, replan, succeeded, failed) and stage, and a download link that works for 15 minutes once it has succeeded. Free.\n\nMCP tool: `get_film`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The film's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"b7f3d1e9-6a2c-4e85-9d47-2c8a6e0f4b31","status":"succeeded","stage":"Ready in your Library","style":{"id":"glass","name":"Glass"},"aspect":"9:16","brief":"Show how Halo turns support tickets into answers in seconds.","message":null,"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/halo-product-film.mp4","downloadUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/halo-product-film.mp4?token=…","createdAt":"2026-11-14T08:40:10.512Z","finishedAt":"2026-11-14T08:52:37.006Z"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/footage":{"get":{"operationId":"listFootage","summary":"List AI footage","description":"AI clips, stills and 4K upscales, newest first, with credits used and download links for finished ones. Free.\n\nMCP tool: `list_footage`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"The nextCursor from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"footage":[{"id":"e2c84a6f-1b9d-4d3e-a7f5-8c0b2e4d6a19","kind":"video","status":"succeeded","model":"motion-2-5","modelName":"Lunar Motion 2.5","prompt":"A barista pouring latte art in a sunlit cafe, slow motion","seconds":5,"credits":15,"createdAt":"2026-11-14T10:02:18.441Z","error":null,"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/ai-footage/e2c84a6f-1b9d-4d3e-a7f5-8c0b2e4d6a19-barista-latte-art.mp4","downloadUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/barista-latte-art.mp4?token=…","posterUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/barista-latte-art.jpg?token=…"}],"nextCursor":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"generateFootage","summary":"Generate AI footage","description":"Film a clip from a prompt; it is saved to the library. 15 credits per clip-sized unit (dearer models, lengths and sound take more), reserved first and given back if it fails. Models: motion-2-5 (Starter+), hailuo-h3 (Growth+), wan-3-0 (Growth+), kling-3-0-pro (Growth+), veo-3-1 (Scale+). Poll Get AI footage (1–3 minutes).\n\nMCP tool: `generate_footage`.","tags":["AI studio"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prompt"],"additionalProperties":false,"properties":{"prompt":{"type":"string","minLength":3,"maxLength":800},"model":{"type":"string","enum":["motion-2-5","hailuo-h3","wan-3-0","kling-3-0-pro","veo-3-1"],"default":"motion-2-5"},"seconds":{"type":"integer","default":5},"withSound":{"type":"boolean","default":false},"shot":{"type":"string"},"camera":{"type":"string"},"lighting":{"type":"string"},"look":{"type":"string"},"firstFramePath":{"type":"string"}}},"example":{"prompt":"A barista pouring latte art in a sunlit cafe, slow motion","model":"motion-2-5","seconds":5}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"e2c84a6f-1b9d-4d3e-a7f5-8c0b2e4d6a19","kind":"video","status":"running","model":"motion-2-5","modelName":"Lunar Motion 2.5","prompt":"A barista pouring latte art in a sunlit cafe, slow motion","seconds":5,"credits":15,"createdAt":"2026-11-14T10:02:18.441Z","error":null,"storagePath":null,"downloadUrl":null,"posterUrl":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/footage/{id}":{"get":{"operationId":"getFootage","summary":"Get AI footage","description":"A clip's status and, once it has succeeded, its storagePath (post it with POST /api/v1/posts) and a download link that works for 15 minutes. Free.\n\nMCP tool: `get_footage`.","tags":["AI studio"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The clip's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"e2c84a6f-1b9d-4d3e-a7f5-8c0b2e4d6a19","kind":"video","status":"succeeded","model":"motion-2-5","modelName":"Lunar Motion 2.5","prompt":"A barista pouring latte art in a sunlit cafe, slow motion","seconds":5,"credits":15,"createdAt":"2026-11-14T10:02:18.441Z","error":null,"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/ai-footage/e2c84a6f-1b9d-4d3e-a7f5-8c0b2e4d6a19-barista-latte-art.mp4","downloadUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/barista-latte-art.mp4?token=…","posterUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/barista-latte-art.jpg?token=…"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/footage/{id}/upscale":{"post":{"operationId":"upscaleFootage","summary":"Upscale AI footage to 4K","description":"Upscale a finished AI clip to 4K (Growth and Scale). Draws credits by the clip's length, reserved first and given back if it fails. Returns the new upscale; poll Get AI footage.\n\nMCP tool: `upscale_footage`.","tags":["AI studio"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The finished clip's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"f4a1c9e3-7d2b-4b6a-9e8c-3a5d7f1b2c40","kind":"upscale","status":"running","model":"bytedance-upscaler","modelName":"4K upscale","prompt":"A barista pouring latte art in a sunlit cafe, slow motion","seconds":5,"credits":15,"createdAt":"2026-11-14T10:02:18.441Z","error":null,"storagePath":null,"downloadUrl":null,"posterUrl":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/projects/{id}/render":{"post":{"operationId":"renderProject","summary":"Render a project to MP4","description":"Starts rendering a template project (stat-reveal or problem-solution) to the same MP4 the editor's export makes, saved to the library. Answers at once; poll Get a video with the videoId until status is done (usually one to three minutes), then use its downloadUrl or post it. One render at a time per workspace (429 while one runs) and a daily number by plan (Starter 10, Growth 30, Scale 100, UTC days). No credits. size is 720p or 1080p, up to the plan's export size; the body is optional.\n\nMCP tool: `render_project`.","tags":["Rendering"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The project's id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"size":{"type":"string","enum":["720p","1080p"],"description":"Output size by the short side of the 9:16 frame. Default: 1080p where the plan allows it."}},"additionalProperties":false},"example":{"size":"1080p"}}}},"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"videoId":"9d2e4f6a-1b3c-4d5e-8f7a-0b1c2d3e4f5a","status":"pending","projectId":"6f1c2b8e-4a3d-4e6f-9b1a-2c7d8e9f0a1b","title":"Coffee facts","size":"1080p","storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/9d2e4f6a-1b3c-4d5e-8f7a-0b1c2d3e4f5a-coffee-facts.mp4"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos":{"get":{"operationId":"listVideos","summary":"List finished videos","description":"Finished MP4s, newest first. A video gets a record once Clips has rendered or scheduled it; MP4s you only uploaded are in the library. Pass a video's id as videoId, or its storagePath, to POST /api/v1/posts.\n\nMCP tool: `list_videos`.","tags":["Videos and library"],"x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"The nextCursor from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"videos":[{"id":"c3a9e7d2-5b14-4e8f-a6d0-91b2f4c8e735","title":"Launch teaser","source":"upload","storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","durationMs":28400,"createdAt":"2026-11-12T09:41:07.512Z"}],"nextCursor":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/videos/{id}":{"get":{"operationId":"getVideo","summary":"Get a video","description":"One video with its status and a download link that works for 15 minutes. downloadUrl is null until the render is done. Ask again for a fresh link rather than storing one.\n\nMCP tool: `get_video`.","tags":["Videos and library"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The video's id, from List finished videos.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"c3a9e7d2-5b14-4e8f-a6d0-91b2f4c8e735","title":"Launch teaser","source":"upload","storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","durationMs":28400,"createdAt":"2026-11-12T09:41:07.512Z","status":"done","downloadUrl":"https://storage.clips.lnr.ae/storage/v1/object/sign/media/…/launch-teaser.mp4?token=…&download=launch-teaser.mp4","downloadUrlExpiresAt":"2026-11-14T10:15:00.000Z"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"renameVideo","summary":"Rename a video","description":"Changes a video's title. Videos have no separate description.\n\nMCP tool: `rename_video`.","tags":["Videos and library"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The video's id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"],"additionalProperties":false},"example":{"title":"Launch teaser (final)"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"c3a9e7d2-5b14-4e8f-a6d0-91b2f4c8e735","title":"Launch teaser (final)"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library":{"get":{"operationId":"listLibrary","summary":"List library files","description":"Files in the media library (your uploads and AI footage), newest first, with the library's folders. A file with postable: true is an MP4 you can pass as storagePath to POST /api/v1/posts. Files waiting for a content review are left out.\n\nMCP tool: `list_library`.","tags":["Videos and library"],"x-scope":"read","parameters":[{"name":"folder","in":"query","required":false,"description":"all, unfiled, or a folder id from the folders list.","schema":{"type":"string","default":"all"}},{"name":"kind","in":"query","required":false,"description":"Only files of this kind.","schema":{"type":"string","enum":["video","image","audio","pdf"]}},{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","required":false,"description":"The nextCursor from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"folders":[{"id":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58","name":"November campaign"}],"files":[{"name":"launch-teaser.mp4","storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","kind":"video","mimeType":"video/mp4","sizeBytes":18734210,"createdAt":"2026-11-12T09:38:52.104Z","folderId":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58","postable":true},{"name":"product-shot.png","storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/2d4f6a8c-1b3e-4c5d-8e7f-9a0b1c2d3e4f-product-shot.png","kind":"image","mimeType":"image/png","sizeBytes":842113,"createdAt":"2026-11-10T16:02:31.877Z","folderId":null,"postable":false}],"nextCursor":"MjAyNi0xMS0xMFQxNjowMjozMS44Nzd8MmQ0ZjZhOGMtMWIzZS00YzVkLThlN2YtOWEwYjFjMmQzZTRm"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/uploads":{"post":{"operationId":"createLibraryUpload","summary":"Upload a file to the library","description":"Returns a signed URL for one new file and the storagePath it will have. PUT the bytes to uploadUrl with the returned headers within two hours, then call Complete an upload with the same storagePath and sizeBytes to start the file's content check. Videos, raster images, audio and PDFs up to 1 GB are accepted, within your plan's library storage.\n\nMCP tool: `create_upload_url`.","tags":["Videos and library"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"maxLength":200,"description":"The file's name with its extension."},"contentType":{"type":"string","description":"The file's mime type, e.g. video/mp4. SVG isn't accepted."},"sizeBytes":{"type":"integer","minimum":1,"description":"The file's exact size in bytes."}},"required":["fileName","contentType","sizeBytes"],"additionalProperties":false},"example":{"fileName":"launch-teaser.mp4","contentType":"video/mp4","sizeBytes":18734210}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","uploadUrl":"https://storage.clips.lnr.ae/storage/v1/object/upload/sign/media/…/launch-teaser.mp4?token=…","method":"PUT","headers":{"Content-Type":"video/mp4"},"expiresAt":"2026-11-14T12:00:00.000Z","kind":"video","postable":true},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/uploads/complete":{"post":{"operationId":"completeLibraryUpload","summary":"Complete an upload","description":"Call once the PUT to uploadUrl has finished. Clips reads the stored file: if its real size differs from sizeBytes, it isn't a type the library takes, or it takes the workspace over its plan's storage, the file is removed and the call fails. Otherwise its content check starts. POST /api/v1/posts accepts the file once the check is done, usually within a minute; until then it answers that the file is still being checked.\n\nMCP tool: `complete_upload`.","tags":["Videos and library"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"storagePath":{"type":"string","maxLength":400,"description":"The storagePath the upload request returned."},"sizeBytes":{"type":"integer","minimum":1,"description":"The sizeBytes sent with the upload request."}},"required":["storagePath","sizeBytes"],"additionalProperties":false},"example":{"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","sizeBytes":18734210}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"storagePath":"6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","name":"launch-teaser.mp4","kind":"video","sizeBytes":18734210,"postable":true,"contentCheck":"started"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/folders":{"get":{"operationId":"listLibraryFolders","summary":"List library folders","description":"The library's folders, A to Z, with how many files each holds. Folders are labels: filing a file never changes its storagePath.\n\nMCP tool: `list_folders`.","tags":["Videos and library"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"folders":[{"id":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58","name":"November campaign","fileCount":12}]},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createLibraryFolder","summary":"Create a library folder","description":"Creates a folder. A library holds up to 100.\n\nMCP tool: `create_folder`.","tags":["Videos and library"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Unique in the library, ignoring case."}},"required":["name"],"additionalProperties":false},"example":{"name":"November campaign"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58","name":"November campaign"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/folders/{id}":{"patch":{"operationId":"renameLibraryFolder","summary":"Rename a library folder","description":"Renames a folder.\n\nMCP tool: `rename_folder`.","tags":["Videos and library"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The folder's id.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Unique in the library, ignoring case."}},"required":["name"],"additionalProperties":false},"example":{"name":"December campaign"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58","name":"December campaign"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteLibraryFolder","summary":"Delete a library folder","description":"Deletes a folder. Its files aren't deleted: they go back to Unfiled. With ?preview=1 it returns the preview and deletes nothing.\n\nMCP tool: `delete_folder`.","tags":["Videos and library"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The folder's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"1 returns what would happen without changing anything.","schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/files/move":{"post":{"operationId":"moveLibraryFiles","summary":"Move files to a folder","description":"Files up to 500 library files in a folder, or back in Unfiled with folderId null. Nothing moves in storage, so storagePaths and posts using them keep working.\n\nMCP tool: `move_files`.","tags":["Videos and library"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"storagePaths":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":500,"description":"storagePath values from List library files."},"folderId":{"type":["string","null"],"format":"uuid"}},"required":["storagePaths","folderId"],"additionalProperties":false},"example":{"storagePaths":["6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/8e2b5c1a-4f7d-4a3e-b9c6-0d1e2f3a4b5c-launch-teaser.mp4","6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/2d4f6a8c-1b3e-4c5d-8e7f-9a0b1c2d3e4f-product-shot.png"],"folderId":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"moved":2,"folderId":"0f5d8a3c-7e21-4b96-8c4d-3a6e9b1f2d58"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/library/files/delete":{"post":{"operationId":"deleteLibraryFiles","summary":"Delete library files","description":"Permanently deletes up to 500 library files. This can't be undone, and posts that haven't gone out yet and use a deleted MP4 will fail. Call with ?preview=1 first: it lists the files and counts those posts without deleting anything.\n\nMCP tool: `delete_files`.","tags":["Videos and library"],"x-scope":"write","parameters":[{"name":"preview","in":"query","required":false,"description":"1 returns what would happen without changing anything.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"storagePaths":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":500,"description":"storagePath values from List library files."}},"required":["storagePaths"],"additionalProperties":false},"example":{"storagePaths":["6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/2d4f6a8c-1b3e-4c5d-8e7f-9a0b1c2d3e4f-product-shot.png"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"deleted":["6b1f0c2e-8d4a-4f3b-9a1e-2c7d5e9f0a11/library/2d4f6a8c-1b3e-4c5d-8e7f-9a0b1c2d3e4f-product-shot.png"],"failed":0},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/accounts":{"get":{"operationId":"listAccounts","summary":"List accounts","description":"The connected accounts with their delivery (`direct`: Clips posts it; `tiktok_inbox`: lands in the creator's TikTok inbox and they tap Post; `manual`: the person posts it; `browser`: temporary Lunar-owned TikTok mode), timezone and next free posting slots. Call this before scheduling.\n\nMCP tool: `list_connected_accounts`.","tags":["Connected accounts"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"accounts":[{"id":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","platform":"instagram","handle":"@lunarcoffee","status":"connected","publishMode":"auto","delivery":"direct","timezone":"Asia/Dubai","nextFreeSlots":["2026-11-16T05:00:00.000Z"]},{"id":"d7e8f9a0-1b2c-4d3e-8f4a-5b6c7d8e9f0a","platform":"tiktok","handle":"@lunarcoffee","status":"connected","publishMode":"auto","delivery":"tiktok_inbox","timezone":"Asia/Dubai","nextFreeSlots":["2026-11-16T15:00:00.000Z"]}]},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/accounts/{id}":{"get":{"operationId":"getAccount","summary":"Get an account","description":"One account in this workspace, connected or not: status (`connected`, `needs_reauth` or `disconnected`), delivery, timezone, its weekly posting times (weekday 0 = Sunday, local 24-hour time) and its next free slots.\n\nMCP tool: `get_account`.","tags":["Connected accounts"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id, from List accounts.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","platform":"instagram","handle":"@lunarcoffee","status":"connected","publishMode":"auto","delivery":"direct","timezone":"Asia/Dubai","postingTimes":[{"weekday":1,"time":"09:00"},{"weekday":3,"time":"18:30"},{"weekday":5,"time":"12:00"}],"nextFreeSlots":["2026-11-16T05:00:00.000Z","2026-11-18T14:30:00.000Z"]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/accounts/{id}/posting-times":{"put":{"operationId":"setPostingTimes","summary":"Replace posting times","description":"Replaces the account's weekly posting times with the list you send (an empty list clears them; repeats are dropped; at most 42). Times are in the account's timezone. Posts already scheduled keep their times. Returns the updated account.\n\nMCP tool: `set_posting_times`.","tags":["Connected accounts"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The account's id, from List accounts.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"postingTimes":{"type":"array","maxItems":42,"items":{"type":"object","properties":{"weekday":{"type":"integer","minimum":0,"maximum":6,"description":"0 = Sunday … 6 = Saturday."},"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"\"HH:mm\", 24-hour."}},"required":["weekday","time"],"additionalProperties":false}}},"required":["postingTimes"],"additionalProperties":false},"example":{"postingTimes":[{"weekday":1,"time":"09:00"},{"weekday":3,"time":"18:30"},{"weekday":5,"time":"12:00"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","platform":"instagram","handle":"@lunarcoffee","status":"connected","publishMode":"auto","delivery":"direct","timezone":"Asia/Dubai","postingTimes":[{"weekday":1,"time":"09:00"},{"weekday":3,"time":"18:30"},{"weekday":5,"time":"12:00"}],"nextFreeSlots":["2026-11-16T05:00:00.000Z","2026-11-18T14:30:00.000Z"]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts":{"get":{"operationId":"listPosts","summary":"List posts","description":"Posts, latest scheduled time first, filtered by status, account, platform or a scheduled-time range. `failureReason` is set only on failed posts.\n\nMCP tool: `list_posts`.","tags":["Posts and calendar"],"x-scope":"read","parameters":[{"name":"status","in":"query","required":false,"description":"`ready` waits for approval; `awaiting_creator` waits for the person (e.g. their TikTok inbox).","schema":{"type":"string","enum":["draft","ready","approved","scheduled","publishing","awaiting_creator","published","failed","cancelled"]}},{"name":"accountId","in":"query","required":false,"description":"Only this account's posts.","schema":{"type":"string","format":"uuid"}},{"name":"platform","in":"query","required":false,"description":"Only this platform's posts.","schema":{"type":"string","enum":["instagram","tiktok","linkedin","facebook","threads","youtube","pinterest"]}},{"name":"from","in":"query","required":false,"description":"Scheduled at or after this time (ISO 8601 with offset).","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Scheduled before this time (ISO 8601 with offset).","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"posts":[{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"scheduled","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-16T14:00:00.000Z","publishedAt":null,"externalUrl":null,"failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"}]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"schedulePost","summary":"Schedule or publish a post","description":"Schedules a finished MP4 (a `videoId`, or a Library `storagePath`) to up to 3 accounts, one per platform, with a caption per platform. `when` is \"next_free_slot\" (default), an ISO time, or \"now\" to publish within about a minute (the publish_now tool). A Library file you uploaded must have finished its content check (see Complete an upload). Returns the new post ids; `awaitingApproval` is true when the workspace reviews posts first.\n\nMCP tool: `schedule_post`.","tags":["Posts and calendar"],"x-scope":"write","parameters":[{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"videoId":{"type":"string","format":"uuid","description":"A finished video. Pass this or storagePath."},"storagePath":{"type":"string","maxLength":400,"description":"A workspace Library MP4, '<workspaceId>/library/<file>.mp4'. Pass this or videoId."},"title":{"type":"string","maxLength":200,"description":"Used as the YouTube, Pinterest and LinkedIn title and in the calendar."},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":3},"captions":{"type":"object","properties":{"instagram":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"tiktok":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"linkedin":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"facebook":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"threads":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"youtube":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"pinterest":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false}},"additionalProperties":false,"description":"One caption per platform you post to."},"when":{"type":"string","description":"\"next_free_slot\" (default), \"now\", or an ISO 8601 time with offset at least 2 minutes ahead."},"sendForReview":{"type":"boolean","description":"Hold the posts for the owner's approval. Review workspaces always hold API posts."},"tiktok":{"type":"object","description":"Only when TikTok direct posting is on (delivery `direct`). Ask the person; never assume.","properties":{"privacyLevel":{"type":"string","maxLength":40},"allowComments":{"type":"boolean"},"allowDuet":{"type":"boolean"},"allowStitch":{"type":"boolean"},"promotesOwnBrand":{"type":"boolean"},"aiGenerated":{"type":"boolean"},"musicUsageConsent":{"type":"boolean"}},"additionalProperties":false},"youtube":{"type":"object","properties":{"madeForKids":{"type":"boolean"}},"required":["madeForKids"],"additionalProperties":false}},"required":["accountIds","captions"],"additionalProperties":false},"example":{"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","accountIds":["c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","d7e8f9a0-1b2c-4d3e-8f4a-5b6c7d8e9f0a"],"captions":{"instagram":{"caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"]},"tiktok":{"caption":"Cold brew, explained in 15 seconds"}},"when":"2026-11-16T18:00:00+04:00"}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"postIds":["3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","8b2d4f6a-1c3e-4a5b-9d7f-0e2a4c6b8d1f"],"awaitingApproval":false},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{id}":{"get":{"operationId":"getPost","summary":"Get a post","description":"One post: status, scheduled and published times, its link once live, and why it failed if it did.\n\nMCP tool: `get_post`.","tags":["Posts and calendar"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"published","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-16T14:00:00.000Z","publishedAt":"2026-11-16T14:00:41.000Z","externalUrl":"https://www.instagram.com/reel/C9xYz12AbCd/","failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updatePost","summary":"Reschedule or edit a post","description":"Moves a post that hasn't gone out (`draft`, `ready`, `approved` or `scheduled`) and/or replaces its caption and hashtags; only what you send changes. In a workspace that reviews posts, a caption or hashtag change sends an approved post back to the owner (`ready`); a move doesn't. The video, accounts and title can't change here: cancel and schedule again, or duplicate.\n\nMCP tool: `update_post`.","tags":["Posts and calendar"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"when":{"type":"string","format":"date-time","description":"ISO 8601 with offset, at least 2 minutes ahead, at most a year out."},"caption":{"type":"string","maxLength":5000},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30}},"additionalProperties":false},"example":{"when":"2026-11-17T19:30:00+04:00","caption":"Cold brew: three things nobody tells you."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"scheduled","caption":"Cold brew: three things nobody tells you.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-17T15:30:00.000Z","publishedAt":null,"externalUrl":null,"failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"cancelPost","summary":"Cancel a post","description":"Cancels a post that hasn't gone out (waiting for approval, scheduled, failed, or waiting for the person). A post that is publishing or published can't be cancelled or removed from the platform here; delete it on the platform.\n\nMCP tool: `cancel_post`.","tags":["Posts and calendar"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"cancelled","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-16T14:00:00.000Z","publishedAt":null,"externalUrl":null,"failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{id}/retry":{"post":{"operationId":"retryPost","summary":"Retry a failed post","description":"Sends a failed post again about 3 minutes later. Refused when its account needs reconnecting, or when the platform refused the post for good (then cancel it and schedule the video again with the change the platform asks for). No body.\n\nMCP tool: `retry_post`.","tags":["Posts and calendar"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"scheduled","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-14T10:03:00.000Z","publishedAt":null,"externalUrl":null,"failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{id}/approve":{"post":{"operationId":"approvePost","summary":"Approve a post","description":"Approves a post waiting for the owner's review, which schedules it for its time. Needs a key with approve access: only the workspace owner can make one, and it stops approving if its maker is no longer the owner. Refused when the post isn't waiting for approval or its time has passed. No body.\n\nMCP tool: `approve_post`.","tags":["Posts and calendar"],"x-scope":"approve","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","status":"scheduled","scheduledFor":"2026-11-16T14:00:00.000Z"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{id}/duplicate":{"post":{"operationId":"duplicatePost","summary":"Duplicate a post","description":"Schedules this post's video again, to other accounts or at a new time, with the same rules as Schedule a post. Captions default to the source post's. Each video goes to one account per platform, so a copy to a platform the video is already scheduled or live on is refused.\n\nMCP tool: `duplicate_post`.","tags":["Posts and calendar"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}},{"name":"preview","in":"query","required":false,"description":"`1` runs every check and returns `{ preview }` (what would happen) without changing anything.","schema":{"type":"string","enum":["1"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":3},"when":{"type":"string","description":"\"next_free_slot\" (default), or an ISO 8601 time with offset at least 2 minutes ahead and at most a year out."},"captions":{"type":"object","properties":{"instagram":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"tiktok":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"linkedin":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"facebook":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"threads":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"youtube":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false},"pinterest":{"type":"object","properties":{"caption":{"type":"string","maxLength":5000,"description":"The post text. Instagram and TikTok allow 2,200 characters in total, LinkedIn 3,000."},"hashtags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30,"description":"With or without #. Instagram allows 5 in total; extras are dropped."}},"required":["caption"],"additionalProperties":false}},"additionalProperties":false,"description":"One caption per platform you post to."},"sendForReview":{"type":"boolean"},"tiktok":{"type":"object","description":"Only when TikTok direct posting is on (delivery `direct`). Ask the person; never assume.","properties":{"privacyLevel":{"type":"string","maxLength":40},"allowComments":{"type":"boolean"},"allowDuet":{"type":"boolean"},"allowStitch":{"type":"boolean"},"promotesOwnBrand":{"type":"boolean"},"aiGenerated":{"type":"boolean"},"musicUsageConsent":{"type":"boolean"}},"additionalProperties":false},"youtube":{"type":"object","properties":{"madeForKids":{"type":"boolean"}},"required":["madeForKids"],"additionalProperties":false}},"required":["accountIds"],"additionalProperties":false},"example":{"accountIds":["d7e8f9a0-1b2c-4d3e-8f4a-5b6c7d8e9f0a"],"when":"next_free_slot","captions":{"tiktok":{"caption":"Cold brew, explained"}}}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"postIds":["8b2d4f6a-1c3e-4a5b-9d7f-0e2a4c6b8d1f"],"awaitingApproval":false},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/posts/{id}/metrics":{"get":{"operationId":"getPostMetrics","summary":"Get post metrics","description":"The numbers collected from the platform about 1, 3 and 7 days after posting. Real platform figures only: an empty list means none collected yet, and null means the platform doesn't report that metric.\n\nMCP tool: `get_post_metrics`.","tags":["Posts and calendar"],"x-scope":"read","parameters":[{"name":"id","in":"path","required":true,"description":"The post's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"post":{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"published","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-16T14:00:00.000Z","publishedAt":"2026-11-16T14:00:41.000Z","externalUrl":"https://www.instagram.com/reel/C9xYz12AbCd/","failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"},"snapshots":[{"window":"1d","capturedAt":"2026-11-17T14:05:00.000Z","views":4210,"reach":3880,"likes":312,"comments":18,"shares":25,"saves":41,"avgWatchTimeMs":9400}],"note":"Numbers come from the platform about 1, 3 and 7 days after posting."},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/calendar":{"get":{"operationId":"getCalendar","summary":"Get the calendar","description":"Posts placed on local days `from` to `to` (inclusive, at most 92 days) by scheduled time, or published time when there is none, in the workspace's timezone: the first connected account's, as on the Calendar page, unless you pass one. Cancelled posts are left out; `truncated` is true past 1,000 posts.\n\nMCP tool: `get_calendar`.","tags":["Posts and calendar"],"x-scope":"read","parameters":[{"name":"from","in":"query","required":true,"description":"First day, YYYY-MM-DD.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"description":"Last day, YYYY-MM-DD.","schema":{"type":"string","format":"date"}},{"name":"timezone","in":"query","required":false,"description":"An IANA timezone such as Europe/London.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"timezone":"Asia/Dubai","from":"2026-11-16","to":"2026-11-22","posts":[{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"instagram","accountId":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","status":"scheduled","caption":"Three things nobody tells you about cold brew.","hashtags":["coldbrew","coffee"],"scheduledFor":"2026-11-16T14:00:00.000Z","publishedAt":null,"externalUrl":null,"failureReason":null,"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","videoTitle":"Cold brew facts","localDate":"2026-11-16","localTime":"18:00"}],"truncated":false},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/brand":{"get":{"operationId":"getBrand","summary":"Get the brand kit","description":"The default brand kit (or the one `kitId` names) with its colours, voice style, tone of voice, banned words and a logo link valid for 10 minutes, plus the list of all the workspace's kits.\n\nMCP tool: `get_brand_kit`.","tags":["Brand and characters"],"x-scope":"read","parameters":[{"name":"kitId","in":"query","required":false,"description":"One of the workspace's kits. Omit for the default.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"kit":{"id":"5c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","name":"Ember Bakery","isDefault":true,"colors":{"accent":"#ff6b4a","background":"#1f1d36","text":"#ffffff"},"voice":{"id":"warm-deep","label":"Warm and deep"},"tone":"Speak like a friendly expert: plain words, short sentences, one idea at a time. Confident, never pushy.","bannedWords":["cheap","best ever"],"website":"https://emberbakery.com","logoUrl":"https://media.clips.lnr.ae/storage/v1/object/sign/media/…?token=…","updatedAt":"2026-11-12T09:41:00.000Z"},"kits":[{"id":"5c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","name":"Ember Bakery","accent":"#ff6b4a","isDefault":true},{"id":"6d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a","name":"Ember Catering","accent":"#2bb3a3","isDefault":false}]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateBrand","summary":"Update the brand kit","description":"Change any of name, colours (each key on its own), voice, tone and banned words; fields you leave out stay. `bannedWords` replaces the list. Edits the default kit unless `kitId` names another. When the workspace has no kit yet, pass a name to create it. Validated exactly as the Brand kit page.\n\nMCP tool: `update_brand_kit`.","tags":["Brand and characters"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kitId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60},"colors":{"type":"object","properties":{"accent":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},"background":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"},"text":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"}},"additionalProperties":false},"voice":{"type":"string","enum":["warm-deep","bright-energetic","clear-neutral","soft-friendly","bold-dramatic"],"nullable":true},"tone":{"type":"string","maxLength":500},"bannedWords":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":50}},"additionalProperties":false},"example":{"colors":{"accent":"#ff6b4a"},"tone":"Warm, plain and short. Talk to the viewer as 'you'.","bannedWords":["cheap","best ever"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"kit":{"id":"5c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","name":"Ember Bakery","isDefault":true,"colors":{"accent":"#ff6b4a","background":"#1f1d36","text":"#ffffff"},"voice":{"id":"warm-deep","label":"Warm and deep"},"tone":"Warm, plain and short. Talk to the viewer as 'you'.","bannedWords":["cheap","best ever"],"website":"https://emberbakery.com","logoUrl":"https://media.clips.lnr.ae/storage/v1/object/sign/media/…?token=…","updatedAt":"2026-11-12T09:41:00.000Z"},"kits":[{"id":"5c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","name":"Ember Bakery","accent":"#ff6b4a","isDefault":true},{"id":"6d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a","name":"Ember Catering","accent":"#2bb3a3","isDefault":false}]},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/characters":{"get":{"operationId":"listCharacters","summary":"List characters","description":"The workspace's own characters (built from the cast) and its Illustrated characters with their poses. Images are links valid for 10 minutes. Name a character in a video brief to cast them.\n\nMCP tool: `list_characters`.","tags":["Brand and characters"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"characters":[{"id":"7e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b","name":"Mia","base":"woman","look":"flat","colors":{"skin":"#e9b08a","hair":"#2c2420","outfit":"#ff6b4a","outfitAccent":null},"accessory":"glasses","about":"Head baker. Calm, funny, explains every step.","faceUrl":null}],"illustrated":[{"id":"8f4a5b6c-7d8e-4f9a-0b1c-2d3e4f5a6b7c","name":"Leo","description":"A cheerful delivery cyclist in a red cap","approved":true,"referenceUrl":"https://media.clips.lnr.ae/storage/v1/object/sign/media/…?token=…","poses":[{"name":"Waving","url":"https://media.clips.lnr.ae/storage/v1/object/sign/media/…?token=…"},{"name":"Pointing","url":"https://media.clips.lnr.ae/storage/v1/object/sign/media/…?token=…"}]}]},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createCharacter","summary":"Create a character","description":"Add one of the workspace's own characters from the cast, up to 24. Free: nothing is drawn by AI. Illustrated characters are made in the app.\n\nMCP tool: `create_character`.","tags":["Brand and characters"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40,"description":"Unique in the workspace."},"base":{"type":"string","enum":["kid","girl","woman","man","gran","grandpa","blob","robot","cat"],"description":"The cast figure they're built on."},"look":{"type":"string","enum":["flat","3d"],"description":"Flat cartoon (default) or 3D toon figure."},"colors":{"type":"object","properties":{"skin":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"hair":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"outfit":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"outfitAccent":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true}},"additionalProperties":false,"description":"Colours as #rrggbb; null for the figure's default."},"accessory":{"type":"string","enum":["none","glasses","sunglasses","cap","headphones","bow","crown","party-hat"],"nullable":true},"about":{"type":"string","maxLength":200,"description":"One line on who they are; the AI director uses it when writing them into a video."},"facePath":{"type":"string","nullable":true,"description":"A picture already in the Library to use as their face. Once set it is their locked reference."}},"required":["name","base"],"additionalProperties":false},"example":{"name":"Mia","base":"woman","colors":{"hair":"#2c2420","outfit":"#ff6b4a"},"accessory":"glasses","about":"Head baker. Calm, funny, explains every step."}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"7e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b","name":"Mia","base":"woman","look":"flat","colors":{"skin":"#e9b08a","hair":"#2c2420","outfit":"#ff6b4a","outfitAccent":null},"accessory":"glasses","about":"Head baker. Calm, funny, explains every step.","faceUrl":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/characters/{id}":{"patch":{"operationId":"updateCharacter","summary":"Update a character","description":"Change any of a character's fields; fields you leave out stay. A face that is already set is a locked reference and can't be swapped for an AI-made one.\n\nMCP tool: `update_character`.","tags":["Brand and characters"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The character's id, from List characters.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40,"description":"Unique in the workspace."},"base":{"type":"string","enum":["kid","girl","woman","man","gran","grandpa","blob","robot","cat"],"description":"The cast figure they're built on."},"look":{"type":"string","enum":["flat","3d"],"description":"Flat cartoon (default) or 3D toon figure."},"colors":{"type":"object","properties":{"skin":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"hair":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"outfit":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"outfitAccent":{"type":"string","pattern":"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true}},"additionalProperties":false,"description":"Colours as #rrggbb; null for the figure's default."},"accessory":{"type":"string","enum":["none","glasses","sunglasses","cap","headphones","bow","crown","party-hat"],"nullable":true},"about":{"type":"string","maxLength":200,"description":"One line on who they are; the AI director uses it when writing them into a video."},"facePath":{"type":"string","nullable":true,"description":"A picture already in the Library to use as their face. Once set it is their locked reference."}},"additionalProperties":false},"example":{"look":"3d","about":"Head baker and owner. Calm, funny, explains every step."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"7e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b","name":"Mia","base":"woman","look":"3d","colors":{"skin":"#e9b08a","hair":"#2c2420","outfit":"#ff6b4a","outfitAccent":null},"accessory":"glasses","about":"Head baker and owner. Calm, funny, explains every step.","faceUrl":null},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteCharacter","summary":"Delete a character","description":"Removes one of the workspace's own characters. Videos already made keep them. This can't be undone.\n\nMCP tool: `delete_character`.","tags":["Brand and characters"],"x-scope":"write","parameters":[{"name":"id","in":"path","required":true,"description":"The character's id, from List characters.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"id":"7e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/usage":{"get":{"operationId":"getUsage","summary":"Get usage","description":"The workspace's plan and what it has used: credits used and left this month with the renewal date (AI videos spend 10, Illustrated 20), pack credits, AI videos made, AI writing calls used today against the daily limit (ideas and captions spend these), and posts this week (Monday to Sunday, UTC) against the weekly goal. Check it before an AI request.\n\nMCP tool: `get_usage`.","tags":["Usage, analytics and notifications"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"plan":{"id":"growth","name":"Growth"},"credits":{"used":140,"limit":360,"left":220,"bonus":10,"trial":false,"periodStart":"2026-11-01T00:00:00.000Z","resetsAt":"2026-12-01T00:00:00.000Z"},"packCredits":{"balance":100,"expiresAt":"2027-02-08T00:00:00.000Z"},"aiVideos":{"made":12,"canMakeAbout":32},"aiHelp":{"usedToday":18,"dailyLimit":400,"resetsAt":"2026-11-15T00:00:00.000Z"},"posts":{"thisWeek":4,"weeklyGoal":7,"weekStart":"2026-11-09T00:00:00.000Z","weekEnd":"2026-11-16T00:00:00.000Z"}},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/analytics":{"get":{"operationId":"getAnalytics","summary":"Get analytics","description":"How published posts did over the last 7, 30 or 90 days: totals, per platform and per account, the five most viewed posts and the best weekday and hour to post (by median views, once an hour has two measured posts). Every figure is what the platform reported; one a platform doesn't give is null, never 0.\n\nMCP tool: `get_analytics`.","tags":["Usage, analytics and notifications"],"x-scope":"read","parameters":[{"name":"days","in":"query","required":false,"description":"The range, counted back from now.","schema":{"type":"integer","enum":[7,30,90],"default":30}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"days":30,"from":"2026-10-15T12:00:00.000Z","to":"2026-11-14T12:00:00.000Z","totals":{"posts":18,"measured":16,"figures":{"views":48210,"reach":39120,"likes":2311,"comments":184,"shares":96,"saves":140}},"platforms":[{"platform":"instagram","posts":10,"measured":9,"figures":{"views":21400,"reach":18050,"likes":1290,"comments":92,"shares":61,"saves":140}},{"platform":"linkedin","posts":2,"measured":1,"figures":{"views":1240,"reach":null,"likes":41,"comments":7,"shares":null,"saves":null}},{"platform":"tiktok","posts":6,"measured":6,"figures":{"views":25570,"reach":21070,"likes":980,"comments":85,"shares":35,"saves":null}}],"accounts":[{"id":"c4a1e2f3-5b6d-4e7f-8a9b-0c1d2e3f4a5b","platform":"instagram","handle":"@emberbakery","posts":10,"measured":9,"figures":{"views":21400,"reach":18050,"likes":1290,"comments":92,"shares":61,"saves":140}},{"id":"d7e8f9a0-1b2c-4d3e-8f4a-5b6c7d8e9f0a","platform":"tiktok","handle":"@emberbakery","posts":6,"measured":6,"figures":{"views":25570,"reach":21070,"likes":980,"comments":85,"shares":35,"saves":null}}],"topPosts":[{"id":"3f8f6c1e-2b4a-4c3d-9e5f-1a2b3c4d5e6f","platform":"tiktok","account":"@emberbakery","title":"Sourdough in 30 seconds","publishedAt":"2026-11-03T17:00:00.000Z","url":"https://www.tiktok.com/@emberbakery/video/7312…","measuredAt":"2026-11-10T17:05:00.000Z","figures":{"views":9800,"reach":8100,"likes":412,"comments":31,"shares":18,"saves":null}},{"id":"8b2d4f6a-1c3e-4a5b-9d7f-0e2a4c6b8d1f","platform":"instagram","account":"@emberbakery","title":"Three proofing mistakes","publishedAt":"2026-10-29T18:00:00.000Z","url":"https://www.instagram.com/reel/C9…","measuredAt":"2026-11-05T18:04:00.000Z","figures":{"views":6100,"reach":5200,"likes":380,"comments":22,"shares":14,"saves":51}}],"bestTimes":{"timezone":"Asia/Dubai","slots":[{"weekday":"Tuesday","hour":18,"medianViews":4200,"posts":3},{"weekday":"Saturday","hour":10,"medianViews":3100,"posts":2}]}},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/notifications":{"get":{"operationId":"listNotifications","summary":"List notifications","description":"This workspace's notices from the bell, newest first, as the key's maker sees them: a video is ready, a post failed or went out, a payment failed. Personal community notifications are never included.\n\nMCP tool: `list_notifications`.","tags":["Usage, analytics and notifications"],"x-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"unread","in":"query","required":false,"description":"`true` for unread notices only.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"notifications":[{"id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","title":"Your video is ready","body":"\"Sourdough in 30 seconds\" is ready to review.","link":"https://clips.lnr.ae/app/films","read":false,"createdAt":"2026-11-14T09:12:00.000Z"},{"id":"2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e","title":"A post didn't go out","body":"Instagram needs you to reconnect @emberbakery.","link":"https://clips.lnr.ae/app/accounts","read":true,"createdAt":"2026-11-12T18:01:00.000Z"}],"unread":1},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/notifications/read":{"post":{"operationId":"markNotificationsRead","summary":"Mark notifications read","description":"Marks the notices you list as read, or every unread notice when you send no ids. Returns how many changed.\n\nMCP tool: `mark_notifications_read`.","tags":["Usage, analytics and notifications"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":100}},"additionalProperties":false},"example":{"ids":["1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"marked":1},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/ideas":{"get":{"operationId":"listIdeas","summary":"List ideas","description":"This week's five video ideas (title, opening hook, angle and format), if they've been made. Free: it never makes new ones.\n\nMCP tool: `list_ideas`.","tags":["Ideas and captions"],"x-scope":"read","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"week":"2026-11-09","ideas":[{"title":"Three proofing mistakes","hook":"Your dough isn't lazy. You're rushing it.","angle":"Side-by-side loaves show what under-proofing does, then the one-finger test that fixes it.","format":{"id":"explainers","label":"Explainers and science"}},{"title":"Behind the 5am bake","hook":"This is what a bakery looks like before you're awake.","angle":"A fast walk through the first hour of the day, ending on the first tray out of the oven.","format":{"id":"uploads","label":"My own videos"}}],"createdAt":"2026-11-10T08:02:11.000Z"},"error":null}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"generateIdeas","summary":"Generate ideas","description":"Makes five fresh ideas for this week from the workspace's formats, platforms and brand kit, replacing this week's. Costs one AI writing call from the daily allowance, not credits; refused with `plan_limit` when today's allowance is used up. Takes up to a minute.\n\nMCP tool: `generate_ideas`.","tags":["Ideas and captions"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false},"example":{}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"week":"2026-11-09","ideas":[{"title":"Three proofing mistakes","hook":"Your dough isn't lazy. You're rushing it.","angle":"Side-by-side loaves show what under-proofing does, then the one-finger test that fixes it.","format":{"id":"explainers","label":"Explainers and science"}},{"title":"Behind the 5am bake","hook":"This is what a bakery looks like before you're awake.","angle":"A fast walk through the first hour of the day, ending on the first tray out of the oven.","format":{"id":"uploads","label":"My own videos"}}],"createdAt":"2026-11-14T12:00:41.000Z"},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/captions":{"post":{"operationId":"writeCaptions","summary":"Write captions","description":"A caption and hashtags for each platform, in the brand's tone, from a topic or one of the workspace's videos. Each platform costs one AI writing call from the daily allowance, not credits; if there aren't enough left for every platform asked for, it's refused with `plan_limit` before anything is spent.\n\nMCP tool: `write_captions`.","tags":["Ideas and captions"],"x-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","maxLength":200,"description":"What the post is about. Required unless videoId is given."},"description":{"type":"string","maxLength":1000,"description":"More to write from. Nothing that isn't here is invented."},"videoId":{"type":"string","format":"uuid","description":"One of the workspace's videos; its title is used when there's no topic."},"platforms":{"type":"array","items":{"type":"string","enum":["instagram","tiktok","linkedin"]},"minItems":1,"maxItems":3,"description":"Default: all three."}},"additionalProperties":false},"example":{"videoId":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d","description":"New winter loaf with roasted chestnuts. In store Friday.","platforms":["instagram","linkedin"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{},"error":{"type":"null"}}},"example":{"data":{"captions":{"instagram":{"caption":"Our winter loaf is back, now with roasted chestnuts.\nIn store from Friday, while the trays last.","hashtags":["#Sourdough","#WinterBaking","#DubaiBakery"],"full":"Our winter loaf is back, now with roasted chestnuts.\nIn store from Friday, while the trays last.\n\n#Sourdough #WinterBaking #DubaiBakery"},"linkedin":{"caption":"Seasonal products give regulars a reason to come back.\n\nOur winter loaf returns on Friday with roasted chestnuts, and we filmed the first bake to show how it's made.","hashtags":["#SmallBusiness","#Bakery"],"full":"Seasonal products give regulars a reason to come back.\n\nOur winter loaf returns on Friday with roasted chestnuts, and we filmed the first bake to show how it's made.\n\n#SmallBusiness #Bakery"}},"notWritten":[],"aiCallsLeftToday":380},"error":null}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key from Settings, API & MCP (clp_live_…)."}},"schemas":{"Error":{"type":"object","required":["data","error"],"properties":{"data":{"type":"null"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","invalid_json","payload_too_large","unsupported_media_type","method_not_allowed","rate_limited","plan_required","plan_limit","internal"]},"message":{"type":"string","description":"Plain English, safe to show a person or an AI."}}}}}}}}