ClipMaster API
Автоматизирайте ClipMaster от командния ред, от собствени скриптове или от AI асистент. Същите endpoint-и, които ползва приложението — таксувани със същите токени, без отделно плащане.
Предпочитате чист текст? Прочетете страницата като Markdown — направено за LLM модели и агенти. Ползвате Claude? Свържете MCP сървъра вместо да викате endpoint-ите ръчно.
Общ преглед
Достъпвайте ClipMaster програмно с API ключ. Всеки endpoint работи точно както в приложението и има достъп само до вашите проекти и клипове. Достъпът до API е наличен в платените планове.
Базов URL:
https://api.clipmaster.app/api/v1
Удостоверяване
Създайте ключ в приложението от Настройки → Достъп до API. Пълният ключ (cm_live_…) се показва само веднъж при създаването — пазете го на сигурно място. Изпращайте го като Bearer токен в хедъра Authorization:
curl https://api.clipmaster.app/api/v1/projects \-H "Authorization: Bearer cm_live_xxxxxxxxxxxxxxxxxxxx"
- Само в хедъра. Ключовете не се приемат като query параметър
?token=. - Ключът е свързан с акаунта ви и действа от ваше име, само върху вашите данни.
- Можете да анулирате ключ по всяко време от Настройки; анулираният ключ спира да работи веднага.
403 session_auth_required за вход/OAuth, таксуване и плащане (четенето на баланса и употребата на токени е разрешено), администратор, управление на API ключове и свързване на социален канал. Първо свържете канала си в уеб приложението — всичко останало е скриптуемо.Някои крайни точки са функции на платен план, отбелязани по-долу с името на функцията (например compilation). При план без нея те отговарят 403 subscription_required с тази feature.
Лимити на заявките
120 заявки на минута за ключ. При превишаване получавате 429 с хедър Retry-After.
AI крайните точки (предложения, Автоматична редакция, измерване на аудио, подреждане) също имат свои собствени лимити за потребител и отговарят 429 по същия начин.
Бърз старт
Импортирайте видео от YouTube, изчакайте обработката, после изведете клиповете и ги изтеглете. Задайте тези променливи веднъж в терминала:
KEY="cm_live_xxxxxxxxxxxxxxxxxxxx"BASE="https://api.clipmaster.app/api/v1"
Заявка
curl -X POST "$BASE/upload/from-url" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"source_url": "https://youtube.com/watch?v=..."}
Отговор
{"project_id": 123,"task_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890","message": "Processing started","progress_url": "/api/v1/projects/123/status"}
Заявка
curl "$BASE/projects/123/status" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"status": "completed","progress": 1.0,"progress_percent": 100,"total_clips": 6,"processing_complete": true}
Заявка
curl "$BASE/projects/123/clips" \-H "Authorization: Bearer $KEY"
Отговор
[{"clip_id": 456,"start_time": 0.0,"end_time": 42.3,"description": "Founder explains the pivot","status": "ready"}]
Заявка
# Render it (charges tokens) -> {"export_id": 37, "status": "rendering", ...}curl -X POST "$BASE/projects/123/clips/456/export" \-H "Authorization: Bearer $KEY"# Poll until "status" is "completed"curl "$BASE/exports/37/status" -H "Authorization: Bearer $KEY"# The clip's exports, newest firstcurl "$BASE/exports?clip_id=456" -H "Authorization: Bearer $KEY"# Download from the newest completed export's download_urlcurl -L "$DOWNLOAD_URL" -o clip.mp4
Изтеглянето винаги е експорт: клипът, рендериран със запазените си субтитри, ефекти и изрязване. download_url е подписан S3 линк, валиден до следващото 00:00 UTC (поне 30 минути) — без хедър за автентикация. За нов линк извикайте отново GET /exports.
Качване
За файлове използвайте двустъпковия процес на качване; за YouTube, импортирайте по URL. И двете приемат едни и същи незадължителни полета: processing_mode (automatic, semantic или full_video), query, min_duration, orientation, флаговете за субтитри и compilation_format с compilation_prompt за изграждане на компилация, след като клиповете са готови. Обработката изразходва 1 токен на минута изходен материал.
Импортирайте YouTube URL. Обработката започва незабавно; проверявайте статуса на върнатия проект. Платено: youtube_import.
Заявка
curl -X POST "$BASE/upload/from-url" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"source_url": "https://youtube.com/watch?v=...","orientation": "vertical","compilation_format": "auto"}
Отговор
{"project_id": 123,"task_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890","message": "Processing started","metadata": { "duration_sec": 212.4, "resolution": "1920x1080" },"progress_url": "/api/v1/projects/123/status"}
Стъпка 1 от качването на файл. Връща краткотрайна цел за качване: изпратете файла с POST към upload.url с върнатите upload.fields без промени, после извикайте complete.
Заявка
curl -X POST "$BASE/uploads/init" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"filename": "talk.mp4","size_bytes": 94371840,"sha256": "e3b0c44298fc1c14...","duration_sec": 693.5,"content_type": "video/mp4"}
Отговор
{"project_id": 124,"upload": {"url": "https://uploads.clipmaster.app","fields": {"...": "opaque form fields - send them back unchanged"}},"expires_at": "2026-08-14T21:00:00Z"}
Стъпка 2: потвърждава, че качването е приключило, и стартира обработката.
Заявка
curl -X POST "$BASE/uploads/124/complete" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 124,"task_id": "b2c3d4e5-...","message": "Processing started","progress_url": "/api/v1/projects/124/status"}
Качете лого, озвучаване или файл със сцена за компилация без браузър. purpose е logo, narration, scene_video или scene_image (последните две платени: compilation). POST върнатите полета, след това файла последен, до upload.url в рамките на 15 минути, след което използвайте asset_key на /users/me/logo/from-upload, /projects/{id}/clips/{clip_id}/logo/from-upload, /compilations/{id}/narration/from-upload или /compilations/{id}/media-scenes (като upload_key).
Заявка
curl -X POST "$BASE/uploads/assets" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"purpose": "logo", "content_type": "image/png", "size_bytes": 20480}'
Отговор
{"asset_key": "originals/staging/42/9f1c2b7e.png","upload": {"url": "https://s3.amazonaws.com/...","fields": { "...": "opaque form fields - send them back unchanged" }},"expires_at": "2026-09-11T21:15:00Z"}
Статус и клипове
Проверява напредъка на обработката. status е едно от: uploading, uploaded, processing, completed, failed.
Заявка
curl "$BASE/projects/123/status" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"status": "processing","progress": 0.45,"progress_percent": 45,"current_step": "Transcription","total_scenes": 8,"total_clips": 0,"processing_complete": false}
Списък на създадените клипове с AI метаданни (кукичка, тип клип, увереност).
Заявка
curl "$BASE/projects/123/clips" \-H "Authorization: Bearer $KEY"
Отговор
[{"clip_id": 456,"start_time": 0.0,"end_time": 42.3,"description": "Founder explains the pivot","display_name": null,"status": "ready","source": "Clipmaster","streaming_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...","features": {"scene_id": 2265,"clip_duration": 42.3,"vision_analysis": {"hook": "The moment everything changed","clip_type": "story","confidence": 0.9}}}]
Пълни детайли за един клип — надмножество на елемента от списъка: всяко поле на функция, AI анализ на сцената, нейното запълване, значка и виралност. Всеки кадър, аудиото и думите са в GET …/analysis.
Заявка
curl "$BASE/projects/123/clips/456" \-H "Authorization: Bearer $KEY"
Същата структура като елемента от списъка по-горе, с пълния обект features.
Списък на проектите ви.
Заявка
curl "$BASE/projects" -H "Authorization: Bearer $KEY"
Отговор
[{"project_id": 123,"filename": "keynote.mp4","status": "completed","created_at": "2026-08-14T20:11:38Z","video_metadata": {"duration_sec": 693.5,"resolution": "1920x1080","detected_orientation": "horizontal"},"is_demo": false}]
Изтрива проект с всичките му клипове, сцени и файлове.
Заявка
curl -X DELETE "$BASE/projects/123" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"success": true,"message": "Project deleted"}
Транскрибирайте цялото видео отново, във фонов режим. Клиповете със собствени редактирани думи ги запазват. Проверявайте статуса за project_config.transcription_rerun_status. Без токени; с ограничение на честотата.
Заявка
curl -X POST "$BASE/projects/123/transcription" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"status": "running","progress_url": "/api/v1/projects/123/status"}
Анализ
Прочетете анализа, като JSON, за да поставите редакция върху това, което е намерено. Документите на клипа използват времето на зрителя – часовникът на наслагванията, предложенията и автоматичната редакция: секунди от началото на сцената. Клипът се възпроизвежда от 0 до time.duration; времена извън това са подложката около сцената, където наслагванията не могат да отидат. Списъкът с моменти запазва само това, което се възпроизвежда, така че всяко от неговите t може да бъде поставено както е; от пълния анализ на клипа, поставете само времена между 0 и time.duration. Видео секунди = t + time.scene_start. Документът на видеото използва секунди от началото на качването. Кутиите са {x, y, w, h} части от кадъра. Четенето е безплатно и работи по демо проекта.
Целият съхранен анализ на клипа. Секции: scene (описание, кука, тема, тип, резултат, значка, виралност), layout (смени на камерата и, за всеки кадър, тип на кадъра, лица и панели на екран/уебкамера), audio (силно, тихо, ритъм, пеене; onsets=true добавя всеки удар), transcript (думите на клипа, с говорители, когато са известни), sound_events (смях, аплодисменти, музика), video_moments, talk_scenes и auto_edit (съхраненият дубъл, с неговите диапазони на скорост). include избира секции, разделени със запетаи; всички по подразбиране.
Заявка
curl "$BASE/projects/123/clips/456/analysis?include=scene,layout,audio" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"clip_id": 456,"scene_id": 2265,"time": {"clock": "viewer","unit": "seconds","note": "0 = scene start, …","duration": 10.0,"scene_start": 100.0,"scene_end": 110.0,"clip_start": -2.0,"clip_end": 12.0},"analyses": {"layout": {"status": "completed","error": null,"step": null,"started_at": "2026-10-22T18:02:11+00:00","finished_at": "2026-10-22T18:02:40+00:00","what": "Faces, screen/webcam/gameplay panels, shot type per frame, camera cuts.","rest": "POST /api/v1/projects/123/clips/456/layout-analysis","mcp": "analyze_clip_layout","cost": "Paid plans (smart crop); no tokens."},"audio_cues": { "status": "completed", "...": "same fields" },"auto_edit": { "status": null, "...": "same fields" }},"scene": {"description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming","topic": "basketball","clip_type": "reaction","score": 8,"...": "the rest of its stored AI fields","badge": { "label": "Highlight", "key": "highlight", "color": "#FF6B6B" },"virality": { "tier": "hot", "label": "Hot", "color": "#FF4444" }},"layout": {"current": true,"faces_placeable": true,"analyzed_at": "2026-10-22T18:02:40+00:00","model": "gemini-3.5-flash-lite","frame_interval": 2.0,"frame_size": { "width": 1920, "height": 1080 },"cuts": [4.0],"frames": [{ "t": 0.0, "shot": "solo_talking_head","faces": [{ "x": 0.4, "y": 0.1, "w": 0.2, "h": 0.4 }], "panels": [] },{ "t": 4.0, "shot": "screen_share_with_webcam","faces": [{ "x": 0.8, "y": 0.04, "w": 0.12, "h": 0.18 }],"panels": [{ "kind": "webcam_overlay", "x": 0.75, "y": 0.0, "w": 0.25, "h": 0.25,"highlighted": true }] }]},"audio": {"current": true,"measured_at": "2026-10-22T18:01:05+00:00","has_audio": true,"median_active_db": -20.0,"loud": [{ "t": 4.0, "end": 4.5, "over_db": 9.0 }],"quiet": [{ "start": -2.0, "end": -0.5, "level_db": -48.0 }],"beat": [{ "start": 0.0, "end": 10.0, "tempo_bpm": 120.0, "first_beat": 0.1, "period": 0.5 }],"singing": null}}
time и analyses винаги присъстват. analyses има един запис за всяко изпълнение по заявка (layout, audio_cues, auto_edit): status е running (изпълнява се), completed (завършено), failed (неуспешно), stale (маркирано като изпълняващо се повече от 30 минути, така че вероятно е спряло — проверете отново, преди да го рестартирате) или null (никога не е изпълнявано), с error, step (последната достигната стъпка; смислено по време на изпълнение), времеви отпечатъци и крайната точка, която го стартира. layout, audio и auto_edit са null, докато не бъдат изпълнени; sound_events, video_moments и talk_scenes са [], когато нищо не е намерено. current: false означава, че резултатът вече не съответства на клипа: неговият видео файл е бил изрязан отново оттогава (само едно подрязване не го променя), за layout също, когато последното изпълнение не е завършило, за audio също, когато самото измерване се е променило. Едно подрязване прави auto_edit current: false, тъй като неговите времена са по часовника на сцената; по-стара версия, която не е записала сцената си, чете current: null (неизвестно). Аудио времената се конвертират от файла, върху който са били измерени. Неизвестна секция е 400 unknown_section.
Клипът като един времево сортиран списък от {t, kind, source, …}: cut, shot и faces (когато броят на кадрите или лицата се промени), speaker реплики, sound, loud, quiet, beat, singing и moments от визуалния пропуск. Изброява се само това, което се възпроизвежда — обхвати, изрязани до 0–time.duration, кадър, брой лица или говорител, зададени в подложката, пренесена до 0, всичко останало в подложката е пропуснато — така че всяко t отива до POST …/overlays както е. Анализ на оформлението или аудиото, който вече не съответства на клипа, е пропуснат и наименован в stale. Със summary на сцената, кои анализи са available и analyses. Същият часовник като анализа на клипа.
Заявка
curl "$BASE/projects/123/clips/456/moments" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"clip_id": 456,"time": { "clock": "viewer", "duration": 10.0, "...": "as in …/analysis" },"summary": {"description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming","topic": "basketball","clip_type": "reaction","score": 8},"available": { "layout": true, "audio": true, "transcript": true, "video_moments": true },"stale": [],"analyses": { "...": "as in …/analysis" },"moments": [{ "t": 0.0, "kind": "beat", "source": "audio", "end": 10.0, "tempo_bpm": 120.0 },{ "t": 0.0, "kind": "faces", "source": "layout", "count": 1 },{ "t": 0.0, "kind": "shot", "source": "layout", "detail": "solo_talking_head" },{ "t": 0.0, "kind": "speaker", "source": "transcript", "speaker": "speaker_0", "first_word": "Here" },{ "t": 1.0, "kind": "moment", "source": "video", "end": 3.0, "detail": "action_peak","score": 8, "description": "Rim grab" },{ "t": 3.0, "kind": "sound", "source": "transcript", "end": 4.0, "detail": "laughter" },{ "t": 4.0, "kind": "cut", "source": "layout" },{ "t": 4.0, "kind": "loud", "source": "audio", "end": 4.5, "over_db": 9.0 },{ "t": 4.0, "kind": "shot", "source": "layout", "detail": "screen_share_with_webcam" }]}
Цялото видео, по време на видеото: metadata, transcript по сегменти с говорители, sound_events, video_moments от визуалния пропуск и talk_scenes от пропуска на транскрипцията (всяка с …_status и …_pass блок: статусът и моделът на пропуска, плюс грешката и времето на визуалния пропуск), и всяка сцена с нейната кука, оценка и флаг degraded (вярно: стъпката на AI сцената е неуспешна и това е неоценен резервен вариант с фиксирана дължина). include избира секции; words (всяка дума, с говорител и увереност) идва само когато е наименована. analyses.transcription отчита повторна транскрипция.
Заявка
curl "$BASE/projects/123/analysis" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"time": { "clock": "video", "unit": "seconds", "note": "Seconds from the start of the upload." },"analyses": {"transcription": {"status": null,"...": "same fields as a clip's runs","rest": "POST /api/v1/projects/123/transcription","mcp": "transcribe_video"}},"metadata": { "duration_sec": 693.5, "resolution": "1920x1080", "detected_orientation": "horizontal","...": "the rest of the upload's metadata" },"transcript": {"language": "english","provider": "openai_whisper","duration": 693.5,"no_audio": false,"speakers": [],"segments": [{ "start": 99.0, "end": 106.0, "text": "Here we go.", "speaker": null }]},"sound_events": [{ "t": 103.0, "end": 104.0, "kind": "laughter", "label": "[laughter]","speaker": null, "confidence": null }],"video_moments": [{ "start": 101.0, "end": 103.0, "type": "action_peak", "score": 8,"description": "Rim grab" }],"video_moments_status": "ok","video_moments_pass": { "status": "ok", "error": null, "model": "gemini-3.8-flash","analyzed_at": "2026-10-22T17:40:12+00:00" },"talk_scenes": [{ "start": 95.0, "end": 105.0, "clip_type": "story", "score": 7,"hook": "Why he almost quit", "topic": "basketball","description": "He tells how the season started", "confidence": 0.8 }],"talk_scenes_status": "ok","talk_scenes_pass": { "status": "ok", "model": "gpt-4o-mini" },"scenes": [{ "scene_id": 2265, "start": 100.0, "end": 110.0, "source": "merged","description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming", "topic": "basketball","clip_type": "reaction", "score": 8, "degraded": false }]}
Измерете аудиото на клипа — силни моменти, тихи участъци, ритъм и темпо, пеене — във фонов режим. Проверявайте GET …/analysis, докато analyses.audio_cues.status не стане завършен или неуспешен; резултатът е неговата audio секция. Предложенията и автоматичната редакция го измерват сами; извикайте това, за да прочетете аудиото първо. 409 audio_cues_running, audio_cues_current (съхраненото измерване все още съответства на файла на клипа) или clip_file_missing. Платено: ai_suggestions; без токени; споделя ограничение на честотата с предложенията за ефекти и автоматичната редакция.
Заявка
curl -X POST "$BASE/projects/123/clips/456/audio-cues" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"clip_id": 456,"status": "running"}
Редактиране
Всичко, което прави редакторът в приложението, е скриптуемо: изрязване, субтитри и техния превод, оформления, зуум, екранни ефекти, скорост, емоджита, GIF-ове, стикери, реакционни клипове, звукови ефекти, лого, лента за напредък и ориентация.
Два часовника. Наслагванията, които добавяте (POST …/overlays) и всяко предложение използват времето на зрителя — секунди от началото на клипа, докато се възпроизвежда. Запазените настройки запазват времената спрямо файла на клипа с добавени секунди, няколко секунди по-дълъг в двата края; крайната точка за наслагванията преобразува за вас.
Подрязване — мести началото/края на клип. Всички клипове в сцената се обновяват автоматично.
Заявка
curl -X PUT "$BASE/projects/123/scenes/2265/boundaries" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"new_start_time": 12.0,"new_end_time": 27.5}
Отговор
{"scene_id": 2265,"project_id": 123,"old_start_time": 0.0,"old_end_time": 42.3,"new_start_time": 12.0,"new_end_time": 27.5,"message": "Scene boundaries updated successfully."}
Прочетете или актуализирайте пълното състояние на редактора: субтитри (с secondary за втори ред), емоджита, GIF-ове, стикери и реакционни клипове (gifs, разграничени по kind), sfx, зуум, екранни ефекти, кадриране, лого, лента за напредък, ориентация, speed и speedRanges. PUT замества целия обект — изпратете обратно всичко, което GET е върнал, с вашите промени; всичко пропуснато се изчиства.
Заявка
curl -X PUT "$BASE/projects/123/clips/456/settings" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"orientation": "vertical","captions": {"enabled": true,"style": "hormozi","karaoke": true},"speed": 1.25}
Отговор
{"clip_id": 456,"settings": {"captions": { "enabled": true, "style": "hormozi", "karaoke": true },"zoom": null,"screenEffects": null,"logo": null,"progressBar": null,"smartCrop": null,"gifs": null,"orientation": "vertical","speed": 1.25,"speedRanges": null}}
Зуум е една форма: {type: "zoom", start, end, scale, glide, target, center} — влиза в start (glide секунди, за да стигне до там, 0 щраква), задържа се на scale (1.05–2.5), връща се на end, или се задържа до края на клипа, когато end е null. По-старите punch и slow зуум ефекти се конвертират.
Чете или заменя думите в субтитрите с тайминг на ниво дума.
Заявка
curl -X PUT "$BASE/projects/123/clips/456/captions" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"words": [{ "text": "Use", "start": 28.06, "end": 28.14 },{ "text": "correct", "start": 28.14, "end": 28.22 }]}
Отговор
{"words": [{ "text": "Use", "start": 28.06, "end": 28.14, "highlight": null },{ "text": "correct", "start": 28.14, "end": 28.22, "highlight": null }]}
Преименува клип. Празен низ връща автоматично генерираното име.
Заявка
curl -X PATCH "$BASE/projects/123/clips/456/name" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"name": "Best hook"}
Отговор
{"clip_id": 456,"display_name": "Best hook"}
Транскрибирайте аудиото на този клип отново и направете резултата негови субтитри. Замества редактираните думи; отговаря с новите думи. Без токени; с ограничение на честотата.
Заявка
curl -X POST "$BASE/projects/123/clips/456/transcribe" \-H "Authorization: Bearer $KEY"
Добавете наслагвания във времето, което зрителят вижда: emojis, inline_emojis, gifs, stickers, reaction_clips, sfx, zooms, screen_effects и speed_ranges. Преобразуването на времето на редактора и настройките по подразбиране се прилагат за вас, а AI предложенията могат да бъдат изпратени такива, каквито са. Добавя само.
Заявка
curl -X POST "$BASE/projects/123/clips/456/overlays" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"emojis": [{ "emoji": "🔥", "timestamp": 12.0 }],"inline_emojis": [{ "emoji": "💰", "word_index": 5 }],"gifs": [{ "source_id": "k1", "slug": "mind-blown", "mp4_url": "https://…","width": 480, "height": 270, "timestamp": 8.0 }],"sfx": [{ "sfx_id": 3, "timestamp": 3.0, "volume": 0.4 }],"zooms": [{ "start": 20.0, "length": 1.0, "scale": 1.3 }],"screen_effects": [{ "look": "flash", "start": 20.0 }],"speed_ranges": [{ "start": 31.0, "length": 2.5, "speed": 2.0 }]}
Отговор
{"clip_id": 456,"settings": {"emojis": [{ "type": "floating", "emoji": "🔥", "timestamp": 14.0, "duration": 1.0,"position": { "x": 0.5, "y": 0.694 }, "scale": 1.0 }],"zoom": [{ "type": "zoom", "start": 22.0, "end": 23.0, "scale": 1.3, "glide": 0,"target": "frame", "center": { "x": 0.5, "y": 0.5 } }]}}
Един клип съдържа до 5 GIF файла, 5 стикера и 5 реакционни клипа. spot на емоджи или стикер следва основното лице, а target: "face" на зуум увеличава върху него — платено (smart_crop), след анализ на оформлението на клипа.
Втори ред субтитри на друг език. GET изброява езиците, които този клип вече има, и поддържаните; POST {"language": "es"} го превежда — 1 токен, безплатно, когато клипът вече го има. Платено: caption_translation. Показва се, след като captions.secondary е зададен в настройките.
Заявка
curl -X POST "$BASE/projects/123/clips/456/translations" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"language": "es"}'
Отговор
{"project_id": 123,"language": "es","lines": [{ "text": "Usa la palabra correcta", "start": 28.06, "end": 29.4 }],"created": true,"tokens_charged": 1}
Анализирайте какво показва всеки момент от клипа — типове кадри, лица, панели на екран и уебкамера — във фонов режим. Необходимо е, преди наслагванията да могат да следват лице. Запитвайте клипа за features.vision_analysis.layout_rerun_status или GET …/analysis за analyses.layout.status; всеки кадър е неговата layout секция. Платено: smart_crop; без токени.
Заявка
curl -X POST "$BASE/projects/123/clips/456/layout-analysis" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"clip_id": 456,"status": "running"}
Качете (multipart, поле file) или премахнете лого за всеки клип. Без браузър, подгответе го с POST /uploads/assets и го прикачете на …/logo/from-upload.
Заявка
curl -X POST "$BASE/projects/123/clips/456/logo/from-upload" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"asset_key": "originals/staging/42/9f1c2b7e.png"}'
AI предложения и Auto-edit
Предложенията са само за четене: те връщат разположения във времето на зрителя, готови за изпращане до POST …/overlays такива, каквито са. Платено: ai_suggestions. Без токени; с ограничение на честотата.
Предложения за един клип. kind е gifs, stickers, reaction-clips, emojis, sfx, effects (рецепти за зуум и екранни ефекти) или speed (ускорено мъртво време, забавен каданс). Параметър на заявката max_suggestions.
Заявка
curl -X POST "$BASE/projects/123/clips/456/gifs/suggest?max_suggestions=3" \-H "Authorization: Bearer $KEY"
Отговор
{"clip_id": 456,"suggestions": [{"source_id": "k1","slug": "mind-blown","title": "Mind Blown","mp4_url": "https://…","width": 480,"height": 270,"preview_url": "https://…","timestamp": 8.0,"duration": 2.0,"query": "mind blown","reason": "Reacts to the reveal"}]}
effects и speed отговарят с audio_cues_ready: false, докато аудиото на клипа все още се измерва — попитайте отново няколко секунди по-късно. Предложение за скорост е {start, end, speed}: изпратете го с length = end − start.
Планирайте цяла редакция за клипа — зуум, екранни ефекти, стикери, звуци и диапазони на скорост — във фонов режим. Запитвайте клипа за features.vision_analysis.auto_edit_rerun_status; редакцията е features.vision_analysis.auto_edit ({effects, stickers, sfx, speed}, също и auto_edit секцията на GET …/analysis). Нищо не е приложено: изпратете частите му на POST …/overlays. Платено: ai_suggestions; без токени.
Заявка
curl -X POST "$BASE/projects/123/clips/456/auto-edit" \-H "Authorization: Bearer $KEY"
Отговор
{"project_id": 123,"clip_id": 456,"status": "running"}
Експорт
Рендерира клип със запазените му настройки. Връща export id за проверка; таксува токени.
Заявка
curl -X POST "$BASE/projects/123/clips/456/export" \-H "Authorization: Bearer $KEY"
Отговор
{"export_id": 37,"status": "rendering","message": "Export render triggered"}
Проверява експорт. Когато приключи, download_url е временен линк, който изтича — изтеглете файла веднага.
Заявка
curl "$BASE/exports/37/status" \-H "Authorization: Bearer $KEY"
Отговор
{"export_id": 37,"status": "completed","download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:48:42Z"}
Списък с експортите ви, най-новите първи. Филтрирайте с clip_id или project_id. Така се изтегля клип: вземете най-новия експорт със статус completed и изтеглете неговия download_url.
Заявка
curl "$BASE/exports?clip_id=456" \-H "Authorization: Bearer $KEY"
Отговор
{"exports": [{"export_id": 37,"clip_id": 456,"project_id": 123,"status": "completed","progress": null,"export_number": 2,"tokens_charged": 1,"clip_duration_sec": 42.3,"download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:48:42Z"}],"total": 2,"limit": 20,"offset": 0}
Компилации
Компилацията е един монтаж, изграден от клипове от всеки от вашите видеоклипове. Създаването, подреждането и експортирането на такава е платено: compilation.
Списък на компилациите ви (колекции от клипове от различни проекти).
Заявка
curl "$BASE/compilations" -H "Authorization: Bearer $KEY"
Отговор
{"items": [{"id": 10,"name": "Funny Personal Anecdotes","clip_count": 5,"total_duration_sec": 149.9,"output": { "width": 1920, "height": 1080, "fps": 30 },"format": null,"latest_export": null,"created_at": "2026-08-10T19:05:41Z"}]}
Създайте празна компилация. Платено: compilation.
Заявка
curl -X POST "$BASE/compilations" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"name": "Best of March","output": { "width": 1080, "height": 1920, "fps": 30 }}
Прочетете една компилация — нейните клипове, estimated_tokens за експорт, плана за монтаж в arrangement_metadata.edit_plan и файловете, които възпроизвежда в media — или променете нейното name, output, logo_config или progress_bar_config.
Заявка
curl "$BASE/compilations/10" -H "Authorization: Bearer $KEY"
Какво би премахнало изтриването: качвания, които съществуват само за тази компилация, и чакащи публикации.
Заявка
curl "$BASE/compilations/10/deletion-preview" -H "Authorization: Bearer $KEY"
Отговор
{"compilation_id": 10,"source_project_ids": [],"scheduled_posts_pending": 0}
Изтрийте компилация; нейните чакащи публикации се отменят. delete_sources=true също изтрива качванията от прегледа; предайте ги като expected_project_ids и изтриването се отказва (409), ако този набор се е променил.
Заявка
curl -X DELETE "$BASE/compilations/10" \-H "Authorization: Bearer $KEY"
Отговор
{"compilation_id": 10,"deleted_project_ids": [],"scheduled_posts_cancelled": 0}
Вашите клипове от всички видеа, за добавяне. Параметри на заявката q, limit, offset.
Заявка
curl "$BASE/compilations/available-clips?q=pivot&limit=50" \-H "Authorization: Bearer $KEY"
Добавяне на клип (clip_id, по избор position). DELETE /compilations/{id}/clips/{compilation_clip_id} премахва един.
Заявка
curl -X POST "$BASE/compilations/10/clips" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"clip_id": 456}'
Още клипове от вашата библиотека, които пасват на тази компилация, най-добрите първи.
Заявка
curl -X POST "$BASE/compilations/10/clips/suggest" \-H "Authorization: Bearer $KEY"
Идеи за компилации от вашата библиотека за кратък преглед. Превърнете една в компилация с POST /compilations/from-suggestion (name, clip_ids).
Заявка
curl -X POST "$BASE/compilations/suggest" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"prompt": "funny moments", "max_suggestions": 3}'
Отговор
{"suggestions": [{"theme": "Funny moments","reason": "Five clips where the audience laughs","clip_ids": [456, 457, 461],"total_duration_sec": 94.2}]}
Рендиране на компилацията. Таксува токени за изходните секунди, които възпроизвежда (estimated_tokens на компилацията).
Заявка
curl -X POST "$BASE/compilations/10/export" \-H "Authorization: Bearer $KEY"
Отговор
{"export_id": 5,"compilation_id": 10,"status": "pending","estimated_tokens": 3,"message": "Export started"}
Проверете статуса на експорт на компилация; download_url работи както за експорт на клип. GET /compilations/{id}/exports ги изброява.
Заявка
curl "$BASE/compilations/10/exports/5/status" \-H "Authorization: Bearer $KEY"
Отговор
{"export_id": 5,"compilation_id": 10,"status": "completed","progress": null,"download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:50:02Z"}
Редактиране на компилации
Компилацията е план за монтаж: сцени от един до три панела (клип или файл) с преходи и текстови карти, плюс наслагвания, музика и озвучаване върху целия монтаж. Времената са секунди в компилацията.
Пренарежете компилацията с AI в нов план от сцени. format: custom (монтаж; изисква prompt), best_of, countdown, trailer, hook_loop, tutorial, qa_highlights или auto. Заменя сцените и емоджитата и GIF файловете, закачени към тях; надписите, музиката и разказът остават.
Заявка
curl -X POST "$BASE/compilations/10/arrange" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"format": "hook_loop"}
Отговор
{"id": 10,"name": "Funny Personal Anecdotes","format": "hook_loop","total_duration_sec": 58.2,"estimated_tokens": 1,"clips": [{ "compilation_clip_id": 88, "position": 0, "clip_id": 456, "duration_sec": 12.4, "missing": false }],"arrangement_metadata": {"resolved_format": "hook_loop","degraded": false,"edit_plan": {"version": "2.0","scenes": [{"id": "1","layout": "full","sources": [{ "clip_id": 456, "slot": 0, "audio": "primary","start_offset_sec": 3.0, "end_offset_sec": 9.5, "speed": 1.0 }],"text": []}]}}}
degraded: true означава, че стъпката на AI е неуспешна и клиповете са запазени в ред.
plan/undo се връща към преди последното подреждане, нулиране или поставяне (отново повтаря); plan/reset прави обикновен разрез, всеки клип цял; plan/place-added-clips вмъква добавени клипове от AI редакцията в него. Без тяло.
Заявка
curl -X POST "$BASE/compilations/10/plan/undo" \-H "Authorization: Bearer $KEY"
Пренарежете една сцена с AI, оставяйки останалите. По избор prompt. Идентификаторите на сцените са текст.
Заявка
curl -X POST "$BASE/compilations/10/scenes/3/regenerate" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"prompt": "use the boat clip instead"}'
Задава ритмичен модел на една сцена: кратки беззвучни повторения на клипа ѝ в такт с музиката, точно преди нея. pattern: stutter, quick_stutter, build_up, jump_cut, teaser или null, за да го премахнете. Изисква измерена музика (дотогава 409 music_not_measured).
Заявка
curl -X PUT "$BASE/compilations/10/scenes/3/beat-pattern" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"pattern": "stutter"}'
Заменете плана за редактиране. Оформления: full (1 панел), stack2 / cols2 / pip (2), stack3 / cols3 (3). Източник възпроизвежда clip_id или media_key; неговите отмествания са началото и края на прозореца в секунди от сцената на клипа; най-много един източник на сцена е primary аудио. Преходи: cut, fade, slide, wipe. Пропуснатите наслагвания се запазват; пропуснатата music се премахва.
Заявка
curl -X PUT "$BASE/compilations/10/plan" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"version": "2.0","scenes": [{"id": "1","layout": "full","sources": [{ "clip_id": 456, "audio": "primary","start_offset_sec": 2.0, "end_offset_sec": 14.5 }],"text": [{ "text": "Day one", "role": "title", "start_ms": 0, "duration_ms": 2000 }]},{"id": "2","layout": "stack2","transition_in": { "kind": "fade", "duration_ms": 400 },"sources": [{ "clip_id": 457, "slot": 0, "audio": "primary", "speed": 1.5 },{ "clip_id": 458, "slot": 1 }]}],"music": { "track_id": "a1b2c3", "volume": 0.3 }}
POST добавя емоджита, GIF файлове, стикери, зуум ефекти, екранни ефекти и звукови ефекти върху целия монтаж, във формите на наслагванията на клипа. PATCH заменя цял съхранен набор вместо това (captions, emojis, gifs, screenEffects, zoom, sfx); променя се само това, което изпращате.
Заявка
curl -X POST "$BASE/compilations/10/plan/overlays" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"emojis": [{ "emoji": "🎉", "timestamp": 3.0 }],"screen_effects": [{ "look": "bw", "start": 10.0, "length": 2.0 }]}
Отговор
{"id": 10,"arrangement_metadata": {"edit_plan": {"emojis": [{ "type": "floating", "emoji": "🎉", "timestamp": 3.0, "duration": 1.0,"position": { "x": 0.5, "y": 0.694 }, "scale": 1.0 }]}}}
Редактирайте цялата компилация наведнъж и я приложете, като се попълва само празното: как се появява всяка сцена (всеки наличен преход), текстови карти (думи, шрифт, размер, позиция, време), песен от библиотеката, диапазони на скоростта на клипове с нормална скорост и лентата за напредък, плюс зуум, екранни ефекти, стикери, GIF-ове, емоджита, звукови ефекти и до 2 сцени с реакционни клипове. direction (по избор, до 300 знака) насочва всичко това и се запазва за следващото изпълнение. Изпратете върнатия take до …/auto-edit/undo, за да го премахнете, или обратно тук като replace_take, за да го замените с нов. Платено: compilation; без токени.
Заявка
curl -X POST "$BASE/compilations/10/auto-edit" \-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \-d '{"direction": "hype energy, big bold text"}'
Отговор
{"compilation": { "id": 10, "...": "as GET /compilations/{id}" },"take": {"scene_ids": ["r1"],"effect_ids": ["e1", "e2"],"sticker_ids": ["g1"],"emoji_ids": ["m1"],"zoom_ids": ["z1"],"sfx_ids": ["s1"],"transitions": [{ "scene_id": "2", "kind": "slide", "duration_ms": 400 }],"text_cards": [{ "scene_id": "1", "text": "Best of the year" }],"music_track_id": "lib-42","speed_ranges": [{ "scene_id": "2", "slot": 0, "start": 24.0, "end": 25.2, "speed": 0.5 }],"progress_bar": true},"counts": { "effects": 2, "stickers": 0, "gifs": 1, "emojis": 1,"reaction_clips": 1, "zooms": 1, "sounds": 1, "transitions": 1,"texts": 1, "music": 1, "speed_ranges": 1, "progress_bar": 1 }}
Измереният звук на монтажа по собствения му часовник: ритъмът на музиката (или на чут клип), силните моменти, тихите участъци и пеенето; onsets=true добавя всяко начало на звук. Всеки звук се измерва веднъж, на заден план, първия път, когато бъде прочетен или влезе в монтажа — sources показва кои са измерени, а measuring остава true, докато не бъдат измерени всички. Парти светлините вземат beat_first, beat_period и beat_clock оттук. Платено: compilation; без токени.
Заявка
curl "$BASE/compilations/10/audio" \-H "Authorization: Bearer $KEY"
Отговор
{"compilation_id": 10,"duration_sec": 37.4,"measuring": false,"sources": [{ "kind": "music", "status": "measured", "track_id": "lib-42" },{ "kind": "clip", "status": "measured", "scene_id": "1", "clip_id": 1621 }],"beat": [{ "start": 12.0, "end": 37.4, "first_beat": 12.02, "period": 0.38,"tempo_bpm": 157.9, "clock": "edit" }],"loud": [{ "t": 33.0, "end": 33.4, "over_db": 11.0 }],"quiet": [{ "start": 3.4, "end": 9.0, "level_db": -38.0 }],"singing": [],"onsets": null}
Добавете сцена, която възпроизвежда файл вместо клип: реакционен клип от Klipy (klipy) или качено видео или изображение (upload_key). Тя се поставя след after_scene_id, или последна; into_scene_id я прави още един панел до клиповете на тази сцена. Каченото видео се отчита към токените за експорт; реакционните клипове и изображения са безплатни. Платено: compilation.
Заявка
curl -X POST "$BASE/compilations/10/media-scenes" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"klipy": { "source_id": "c3", "slug": "emotional-damage","title": "Emotional Damage", "mp4_url": "https://…" },"after_scene_id": "2"}
Гласов коментар върху целия монтаж, транскрибиран за надписи. POST го качва (multipart, поле file) или прикачва подготвен такъв на …/narration/from-upload; PATCH задава volume и duck; DELETE го премахва.
Заявка
curl -X POST "$BASE/compilations/10/narration/from-upload" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"asset_key": "originals/staging/42/5d8e1a.mp3"}'
Отговор
{"url": "https://clipmaster-media.s3.amazonaws.com/...mp3?...","volume": 1.0,"duck": true,"duration_sec": 61.4,"word_count": 152}
Песни, които пасват на монтажа, всяка с причина. Вземете една с POST /music/tracks/{track_id}/select, след това задайте music.track_id в плана.
Заявка
curl -X POST "$BASE/compilations/10/music/suggest" \-H "Authorization: Bearer $KEY"
Предложения за целия монтаж, на собствените му секунди: kind е gifs, stickers или emojis. Изпратете ги на POST …/plan/overlays. Платено: compilation.
Заявка
curl -X POST "$BASE/compilations/10/emojis/suggest" \-H "Authorization: Bearer $KEY"
Отговор
{"compilation_id": 10,"suggestions": [{ "emoji": "😂", "timestamp": 14.2, "duration": 1.5, "reason": "The punchline lands" }]}
Заглавие и етикети за една сцена.
Заявка
curl -X POST "$BASE/compilations/10/scenes/1/text/suggest" \-H "Authorization: Bearer $KEY"
Отговор
{"suggestions": [{ "text": "Day one", "role": "title" }]}
Насрочване
Публикувайте клипове и компилации в свързан канал. За насрочване ви трябва план с насрочване на публикации.
Свързаните ви канали. Първо ги свържете в уеб приложението.
Заявка
curl "$BASE/social/accounts" -H "Authorization: Bearer $KEY"
Отговор
{"platforms_available": ["youtube"],"accounts": [{"id": 2,"platform": "youtube","account_name": "MyChannel","status": "active"}]}
Насрочва публикуване на експорт на клип или компилация. Идемпотентно — повторна заявка със същия акаунт, експорт и час връща съществуващата публикация.
Заявка
curl -X POST "$BASE/scheduled-posts" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
Тяло на заявката
{"social_account_id": 2,"clip_id": 456,"export_id": 37,"scheduled_at": "2026-08-20T16:00:00Z","title": "The pivot that saved us","hashtags": ["startup", "founder"],"privacy": "public"}
Отговор
{"id": 12,"clip_id": 456,"export_id": 37,"social_account_id": 2,"platform": "youtube","account_name": "MyChannel","status": "scheduled","scheduled_at": "2026-08-20T16:00:00","title": "The pivot that saved us"}
Насрочените и публикуваните постове за период от календара.
Заявка
curl "$BASE/scheduled-posts?from_date=2026-08-01T00:00:00Z&to_date=2026-08-31T23:59:59Z" \-H "Authorization: Bearer $KEY"
Отговор
{"posts": [{"id": 12,"status": "scheduled","scheduled_at": "2026-08-20T16:00:00","title": "The pivot that saved us"}]}
Променете времето или редактирайте публикация, преди да бъде публикувана (scheduled_at, title, description, hashtags, privacy), или я отменете.
Заявка
curl -X PATCH "$BASE/scheduled-posts/12" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"scheduled_at": "2026-08-21T16:00:00Z"}'
AI заглавие, описание и хаштагове от транскрипция на клип.
Заявка
curl -X POST "$BASE/scheduled-posts/metadata-suggest" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"clip_id": 456, "platform": "youtube"}'
Отговор
{"title": "The pivot that saved us","description": "How one decision turned the company around.","hashtags": ["startup", "founder"]}
Прекъснете връзката с канал. Историята на публикациите му, чакащи и публикувани, изчезва с него.
Заявка
curl -X DELETE "$BASE/social/accounts/2" \-H "Authorization: Bearer $KEY"
Библиотека
Списък на 15-те стила субтитри и настройките им по подразбиране.
Заявка
curl "$BASE/export/styles" \-H "Authorization: Bearer $KEY"
Отговор
[{"key": "clean","name": "Clean","category": "social","fontFamily": "Inter","fontSize": 56,"color": "#FFFFFF","highlightColor": "#9DC34F"}]
Библиотеката със звукови ефекти; нейните идентификатори отиват в sfx наслагвания. По избор category.
Заявка
curl "$BASE/sfx" -H "Authorization: Bearer $KEY"
Търсете в Klipy или избройте актуалните. kind е gif, sticker или clip (реакционни клипове). Поставете резултат с id като source_id и mp4.url като mp4_url; стикер също се нуждае от image.url като image_url.
Заявка
curl "$BASE/gifs/search?q=mind%20blown&kind=sticker&per_page=10" \-H "Authorization: Bearer $KEY"
Отговор
{"items": [{"id": "s9","slug": "mind-blown-sticker","title": "Mind Blown","kind": "sticker","mp4": { "url": "https://….webm", "width": 320, "height": 320 },"preview": { "url": "https://….webp", "width": 160, "height": 160 },"image": { "url": "https://….webp", "width": 320, "height": 320 }}],"page": 1,"per_page": 10,"has_next": true}
Търсене на фонова музика. По избор genre, duration_min, duration_max.
Заявка
curl "$BASE/music/search?q=upbeat" -H "Authorization: Bearer $KEY"
Вземете песен във вашата библиотека, за да може компилация да я използва.
Заявка
curl -X POST "$BASE/music/tracks/a1b2c3/select" \-H "Authorization: Bearer $KEY"
Акаунт
Вашият баланс на токени: общо, запазени от текущи задачи и налични.
Заявка
curl "$BASE/billing/balance" -H "Authorization: Bearer $KEY"
Отговор
{"balance": 120,"reserved": 3,"available": 117,"total_purchased": 200,"total_spent": 80}
Какво сте използвали през последните period дни (1–365).
Заявка
curl "$BASE/billing/usage?period=30" -H "Authorization: Bearer $KEY"
Отговор
{"period_days": 30,"tokens_spent": 42,"tokens_purchased": 0,"uploads_count": 6,"exports_count": 11,"minutes_processed": 38.5,"minutes_exported": 7.9}
Грешки
Грешките съдържат машинно четим код:
{"detail": {"error": "insufficient_tokens","message": "Not enough tokens for this operation"}}
Често срещани кодове: api_access_required / session_auth_required (403), subscription_required (403, назовава плана feature), insufficient_tokens (402), export_in_progress / export_expired (409). Лош или отменен ключ връща 401; надхвърляне на лимит на честотата връща 429.
Цена в токени
Таксува се точно като приложението — 1 токен = 1 минута източник за обработка на качване или импортиране от YouTube; експортирането се таксува според правилата на приложението (компилация по изходните секунди, които възпроизвежда); превод на надпис на клип струва 1 токен. Предложения, Автоматична редакция, подреждане, анализ на оформлението, измерване на аудио и повторно транскрибиране не изразходват токени. Няма отделно API таксуване.