{"openapi":"3.1.0","info":{"title":"LumeClip API","version":"1.0.0","description":"Turn a long YouTube video into short vertical clips (9:16) with captions. Create a project, poll its status until DONE, then fetch each clip. Processing spends minutes from the account balance. Authenticate with the API key from Dashboard → Profile → API Key. AI agents can use the hosted MCP server at https://api.lumeclip.com/mcp instead.\n\nVersioning: this is version 1 of the API. Additive changes (new fields, new optional parameters) can happen at any time. A breaking change is announced at least 30 days in advance on https://www.lumeclip.com/developers, and the affected operations start returning the Deprecation and Sunset headers (RFC 9745, RFC 8594) during that window.\n\nRate limits: every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; a 429 also carries Retry-After (seconds).","x-api-lifecycle":{"version":"1","deprecationNoticeDays":30,"deprecationHeaders":["Deprecation","Sunset"]}},"servers":[{"url":"https://api.lumeclip.com"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key (lc_…) from Dashboard → Profile → API Key"}},"schemas":{"Erro":{"type":"object","description":"Error body of every 4xx/5xx response. `error` is a human-readable message; `code`, when present, is stable and machine-readable (branch on it, not on the message); `params` carries the values the message was built from.","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string","enum":["INSUFFICIENT_MINUTES","INSUFFICIENT_MINUTES_GENERIC","BATCH_INSUFFICIENT_MINUTES","SERVICE_UNAVAILABLE","INVALID_VIDEO_URL","YOUTUBE_BOT_CHALLENGE","YOUTUBE_OTHER","YOUTUBE_LIVE","INVALID_VIDEO_FILE","FILE_TOO_LARGE","UPLOAD_TOO_MANY_OPEN","UPLOAD_SERVER_BUSY","UPLOAD_SERVER_FULL","UPLOAD_NOT_FOUND","UPLOAD_CHUNK_INVALID","UPLOAD_FINALIZING","UPLOAD_CHUNK_BUSY","UPLOAD_CHUNK_TOO_LARGE","UPLOAD_CHUNK_INCOMPLETE","UPLOAD_PARTS_MISSING","PHOTOS_TOO_MANY","PHOTOS_TOO_FEW","PHOTO_INVALID_TYPE","IMAGE_TOO_LARGE","MEDIA_TOO_MANY","MEDIA_NONE","MEDIA_INVALID_TYPE","PROJECT_NOT_FOUND","PROJECT_NOT_AWAITING_REVIEW","PROJECT_NOT_EDITABLE","PLAN_REQUIRED","INVALID_SETTINGS","RERENDER_LIMIT","NO_APPROVED_CUTS","NO_PENDING_SUGGESTIONS","SELECTION_LOCKED","PEOPLE_LOCKED","REPROCESS_NOT_ALLOWED","ORIGINAL_DELETED","TRANSCRIPT_UNAVAILABLE","MANUAL_CUT_END_BEFORE_START","MANUAL_CUT_TOO_SHORT","MANUAL_CUT_TOO_LONG","MANUAL_CUT_OUT_OF_RANGE","SUGGESTION_NOT_FOUND","EDIT_LOCKED","CLIP_RANGE_INVALID","CLIP_DURATION_OUT_OF_RANGE","SOURCE_NOT_READY","AI_VARIATIONS_FAILED","CLIP_NOT_FOUND","SOCIAL_ACCOUNT_NOT_FOUND","CLIP_NOT_READY","CLIP_FILE_MISSING","CLIP_EXPIRED","THUMBNAIL_FAILED","SHARE_LINK_INVALID","SRT_NO_RANGE","PLAN_UPGRADE_REQUIRED","BATCH_NOT_FOUND","BATCH_ZIP_NOT_READY","CHANNEL_LIMIT","SUBSCRIPTION_EXISTS","NO_ACTIVE_SUBSCRIPTION","ACCOUNT_DELETE_BILLING_FAILED","TICKET_NOT_FOUND","TICKET_FIELDS_REQUIRED","TICKET_SUBJECT_REQUIRED","TICKET_SUBJECT_TOO_LONG","TICKET_SUBJECT_NEWLINE","TICKET_MESSAGE_REQUIRED","TICKET_MESSAGE_TOO_SHORT","TICKET_MESSAGE_TOO_LONG","RESOURCE_NOT_FOUND","PEDIDO_EM_TEXTO_PLANO","PEDIDO_EM_TEXTO_FALHOU","WATERMARK_PAID_ONLY","IMAGE_TYPE_NOT_ALLOWED","IMAGE_PNG_ONLY","IMAGE_OVER_LIMIT","COOKIES_NOT_TEXT","COOKIES_TOO_LARGE","COOKIES_INVALID_FORMAT"]},"params":{"type":"object","additionalProperties":{"type":["string","number"]}}}},"Projeto":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","description":"PENDING → DOWNLOADING/TRANSCRIBING → ANALYZING → CUTTING → DONE, or FAILED"},"errorMessage":{"type":["string","null"]},"clips":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}}}}}},"Clipe":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"shareToken":{"type":["string","null"],"description":"Public page: https://www.lumeclip.com/c/{shareToken}"}}}}},"paths":{"/api/projects":{"post":{"operationId":"createProject","summary":"Create a project from a YouTube video","description":"Starts processing a public YouTube video into short clips. Reserves minutes from the balance at creation (the video duration). Returns the project; poll getProject until status is DONE.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sourceType","sourceUrl"],"properties":{"sourceType":{"type":"string","enum":["YOUTUBE"]},"sourceUrl":{"type":"string","format":"uri","description":"Public YouTube video URL"},"captionStyle":{"type":"string","enum":["CLASSIC","BOLD","NEON","MINIMAL","IMPACT_BOLD","NEON_CYAN","TOXIC_GREEN","HOT_MAGENTA","ACHADINHO"]},"captionAnimated":{"type":"boolean","description":"Pop animation on the active word (Pro+)"},"titleCardStyle":{"type":"string","enum":["CLASSIC","OUTLINE","MINIMAL","MARKER","HANDWRITTEN"]},"layoutMode":{"type":"string","enum":["AUTO","SMART","FULL","GAME","MOTION_TRACK","REACTION"]}}}}}},"responses":{"201":{"description":"Project created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Projeto"}}}},"400":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"401":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"402":{"description":"Not enough minutes in the balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"422":{"description":"The video could not be fetched from YouTube","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"503":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"5XX":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/projects/{projectId}":{"get":{"operationId":"getProject","summary":"Get a project, its status and its clips","description":"Returns the project status and the list of clips. Clips with status DONE are ready to download.","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Projeto"}}}},"401":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"5XX":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/clips/{clipId}":{"get":{"operationId":"getClip","summary":"Get a clip","description":"Returns one clip of the account, including the token of its public share page.","parameters":[{"name":"clipId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clip","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Clipe"}}}},"401":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"5XX":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}},"/api/clips/{clipId}/download":{"get":{"operationId":"downloadClip","summary":"Download the clip video (MP4)","description":"Returns the rendered vertical clip as an MP4 file.","parameters":[{"name":"clipId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"MP4 video","content":{"video/mp4":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"404":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"429":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}},"5XX":{"description":"Erro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"}}}}}}}}}