Перейти к содержанию

Правки

Эндпоинты правок в Slicer API — текст ролика с id слов, операции, документ монтажа, субтитры из речи, ИИ-помощник, перевод, стиль, свой режиссёр.

На этой странице

Правки меняют ролик так же, как редактор приложения, и сохраняются сразу. Бесплатны все, кроме субтитров из речи, ИИ-помощника и перевода субтитров — они стоят по себестоимости ИИ (Субтитры из речи, ИИ-помощник). Каждая правка передаёт ревизию rev: если ролик успели изменить, ответ — 409 stale_document. Как этим пользоваться — в руководстве Правки ролика.

Ролик текстом с id слов

GET/v1/projects/{id}/transcript
Области доступа
projects:read
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Запрос

curl
JavaScript
Python
curl "https://api.slicer.media/v1/projects/42/transcript" \
  -H "Authorization: Bearer $SLICER_TOKEN"

Ответ

Поля ответа: Transcript (90)
Поле Тип Описание
revобязательноеintegerРевизия документа: передайте её в правки
durationSecобязательноеnumber
textобязательноеstringРолик текстом для LLM: фрагменты со словами w<id>, вырезанное — в [скобках], графика
blocksобязательноеobject[]
blocks[].idобязательноеstring
blocks[].positionобязательноеinteger
blocks[].sourceIndexобязательноеinteger
blocks[].kindобязательноеstringwords · range
blocks[].wordsобязательноеobject[]
blocks[].words[].idобязательноеinteger
blocks[].words[].textобязательноеstring
blocks[].words[].cutобязательноеboolean
blocks[].words[].accentобязательноеboolean
elementsобязательноеobject
elements.hookобязательноеstring | null
elements.plaquesобязательноеobject[]
elements.plaques[].idобязательноеstring
elements.plaques[].kindобязательноеstring
elements.plaques[].titleобязательноеstring
elements.plaques[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.plaques[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.plaques[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.plaques[].endnumberГде элемент заканчивается в ролике, с
elements.plaques[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.plaques[].anchor.blockIdобязательноеstring
elements.plaques[].anchor.atобязательноеnumber
elements.plaques[].anchor.durationобязательноеnumber
elements.cardsобязательноеobject[]
elements.cards[].idобязательноеstring
elements.cards[].captionобязательноеstring | null
elements.cards[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.cards[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.cards[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.cards[].endnumberГде элемент заканчивается в ролике, с
elements.cards[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.cards[].anchor.blockIdобязательноеstring
elements.cards[].anchor.atобязательноеnumber
elements.cards[].anchor.durationобязательноеnumber
elements.emojiобязательноеobject[]
elements.emoji[].idобязательноеstring
elements.emoji[].emojiобязательноеstring
elements.emoji[].wordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.emoji[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.emoji[].endnumberГде элемент заканчивается в ролике, с
elements.emoji[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.emoji[].anchor.blockIdобязательноеstring
elements.emoji[].anchor.atобязательноеnumber
elements.emoji[].anchor.durationобязательноеnumber
elements.zoomsобязательноеobject[]
elements.zooms[].idобязательноеstring
elements.zooms[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.zooms[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.zooms[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.zooms[].endnumberГде элемент заканчивается в ролике, с
elements.zooms[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.zooms[].anchor.blockIdобязательноеstring
elements.zooms[].anchor.atобязательноеnumber
elements.zooms[].anchor.durationобязательноеnumber
elements.titlesобязательноеobject[]Свободные текстовые слои (титры)
elements.titles[].idобязательноеstring
elements.titles[].textобязательноеstring
elements.titles[].fontобязательноеstring
elements.titles[].sizeобязательноеnumber
elements.titles[].colorобязательноеstring
elements.titles[].backgroundобязательноеstringnone · box · pill
elements.titles[].backgroundColorstring
elements.titles[].outlineboolean
elements.titles[].shadowboolean
elements.titles[].alignобязательноеstringleft · center · right
elements.titles[].xобязательноеnumber
elements.titles[].yобязательноеnumber
elements.titles[].animInstringfade · slide · pop · typewriter
elements.titles[].animOutstringfade · slide · pop
elements.titles[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.titles[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.titles[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.titles[].endnumberГде элемент заканчивается в ролике, с
elements.titles[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.titles[].anchor.blockIdобязательноеstring
elements.titles[].anchor.atобязательноеnumber
elements.titles[].anchor.durationобязательноеnumber
elements.markersобязательноеobject[]Маркеры автора на таймлайне (в ролик не попадают); отрезанные не показываются
elements.markers[].idобязательноеstring
elements.markers[].timeобязательноеnumber
elements.markers[].labelобязательноеstring | null
elements.markers[].colorобязательноеstringcyan · yellow · red · green · violet
elements.soundsобязательноеobject[]Звуковые эффекты, которые поставил автор; отрезанные не показываются
elements.sounds[].idобязательноеstring
elements.sounds[].kindобязательноеstringwhoosh · pop · ding · click · swipe · rise · boom · chime
elements.sounds[].timeобязательноеnumber
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "durationSec": 42.5,
    "text": "string",
    "blocks": [
      {
        "id": "string",
        "position": 1,
        "sourceIndex": 1,
        "kind": "words",
        "words": [
          {
            "id": null,
            "text": null,
            "cut": null,
            "accent": null
          }
        ]
      }
    ],
    "elements": {
      "hook": "string",
      "plaques": [
        {
          "id": "string",
          "kind": "string",
          "title": "Монтаж за 3 минуты",
          "fromWordId": null,
          "toWordId": null,
          "start": 1.5,
          "end": 1.5,
          "anchor": {
            "blockId": null,
            "at": null,
            "duration": null
          }
        }
      ],
      "cards": [
        {
          "id": "string",
          "caption": "string",
          "fromWordId": null,
          "toWordId": null,
          "start": 1.5,
          "end": 1.5,
          "anchor": {
            "blockId": null,
            "at": null,
            "duration": null
          }
        }
      ],
      "emoji": [
        {
          "id": "string",
          "emoji": "string",
          "wordId": null,
          "start": 1.5,
          "end": 1.5,
          "anchor": {
            "blockId": null,
            "at": null,
            "duration": null
          }
        }
      ],
      "zooms": [
        {
          "id": "string",
          "fromWordId": null,
          "toWordId": null,
          "start": 1.5,
          "end": 1.5,
          "anchor": {
            "blockId": null,
            "at": null,
            "duration": null
          }
        }
      ],
      "titles": [
        {
          "id": "string",
          "text": "string",
          "font": "string",
          "size": 104857600,
          "color": "string",
          "background": "none",
          "backgroundColor": "string",
          "outline": true,
          "shadow": true,
          "align": "left",
          "x": 1.5,
          "y": 1.5,
          "animIn": "fade",
          "animOut": "fade",
          "fromWordId": null,
          "toWordId": null,
          "start": 1.5,
          "end": 1.5,
          "anchor": {
            "blockId": null,
            "at": null,
            "duration": null
          }
        }
      ],
      "markers": [
        {
          "id": "string",
          "time": 1.5,
          "label": "string",
          "color": "cyan"
        }
      ],
      "sounds": [
        {
          "id": "string",
          "kind": "whoosh",
          "time": 1.5
        }
      ]
    }
  }
}

Применить правки

POST/v1/projects/{id}/edits
Области доступа
projects:write
Лимит
обычный

Бесплатно. Id слов — из GET …/transcript. Неприменимые операции пропускаются и перечисляются в skipped.

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса EditsRequest

Поле Тип Описание
revобязательноеintegerРевизия из GET …/transcript или …/document
operationsобязательноеEditOperation[]1–80

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/edits" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rev":7,"operations":[{"op":"cut_words","fromWordId":42,"toWordId":42}]}'

Ответ

Поля ответа: EditsResult (7)
Поле Тип Описание
revобязательноеinteger
appliedобязательноеinteger
skippedобязательноеobject[]
skipped[].indexобязательноеinteger
skipped[].opобязательноеstring
skipped[].reasonобязательноеstring
durationSecобязательноеnumber
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "applied": 1,
    "skipped": [
      {
        "index": 1,
        "op": "string",
        "reason": "string"
      }
    ],
    "durationSec": 42.5
  }
}

Субтитры из речи

POST/v1/projects/{id}/transcribe
Области доступа
montage:run
Лимит
платные операции
Цена
тратит токены

Распознаёт речь исходников проекта (ручной проект или новые исходники) — по себестоимости ИИ за минуту звука. Без confirmCost — цена. Идёт в фоне: ход — GET …/transcribe; когда готово, слова — в тексте ролика, субтитры идут за речью.

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса TranscribeRequest

Поле Тип Описание
sourcesinteger[]Номера исходников (по умолчанию — все со звуком, где речь ещё не распознана)1–40
languagestringЯзык речи: auto или двухбуквенный код
confirmCostintegerЦена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/transcribe" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sources":[1],"language":"ru"}'

Ответ

Один из вариантов: Quote, TranscribeJob

Поля ответа: Quote (8)
Поле Тип Описание
statusобязательное"quote"
costобязательноеintegerЦена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше
freeобязательноеbooleanОперация бесплатна (первый ролик, бесплатный повтор)
estimatenumberОперация по себестоимости: ожидаемая цена в токенах (дробно)
atCostbooleanЦена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost
availableобязательноеintegerСколько токенов доступно сейчас
enoughобязательноеbooleanТокенов хватает
spendLimitLeftобязательноеinteger | nullОстаток месячного лимита расходов токена; null — без лимита
Поля ответа: TranscribeJob (5)
Поле Тип Описание
idобязательноеstring
statusобязательноеstringprocessing · ready · failed
sourcesобязательноеinteger[]
createdAtобязательноеstring
errorstring
Пример ответа
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

Задачи распознавания речи

GET/v1/projects/{id}/transcribe
Области доступа
projects:read
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Запрос

curl
JavaScript
Python
curl "https://api.slicer.media/v1/projects/42/transcribe" \
  -H "Authorization: Bearer $SLICER_TOKEN"

Ответ

Пример ответа
{
  "ok": true,
  "data": [
    {
      "id": "string",
      "status": "processing",
      "sources": [
        1
      ],
      "createdAt": "2026-10-16T09:30:00Z",
      "error": "string"
    }
  ]
}

Команда ИИ-помощнику

POST/v1/projects/{id}/assistant
Области доступа
montage:run
Лимит
платные операции
Цена
тратит токены

Списывается, только если что-то изменилось. Результат сохраняется.

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса AssistantRequest

Поле Тип Описание
commandобязательноеstringЧто поменять, на любом языке≤ 500
revобязательноеinteger
confirmCostintegerЦена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/assistant" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command":"Сделай субтитры крупнее","rev":7}'

Ответ

Один из вариантов: Quote, AssistantResult

Поля ответа: Quote (8)
Поле Тип Описание
statusобязательное"quote"
costобязательноеintegerЦена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше
freeобязательноеbooleanОперация бесплатна (первый ролик, бесплатный повтор)
estimatenumberОперация по себестоимости: ожидаемая цена в токенах (дробно)
atCostbooleanЦена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost
availableобязательноеintegerСколько токенов доступно сейчас
enoughобязательноеbooleanТокенов хватает
spendLimitLeftобязательноеinteger | nullОстаток месячного лимита расходов токена; null — без лимита
Поля ответа: AssistantResult (6)
Поле Тип Описание
revобязательноеinteger
summaryобязательноеstring
appliedобязательноеinteger
chargedобязательноеintegerСписано токенов с кошелька (целые)
costTokensnumberФактическая себестоимость команды в токенах (дробно); остаток копится у проекта
durationSecобязательноеnumber
Пример ответа
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

Перевести субтитры

POST/v1/projects/{id}/translate
Области доступа
montage:run
Лимит
платные операции
Цена
тратит токены

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса TranslateRequest

Поле Тип Описание
languageобязательноеstringen · es · pt · de · fr · it · pl · tr · id · uk · ru
revобязательноеinteger
confirmCostintegerЦена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/translate" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"language":"en","rev":7}'

Ответ

Один из вариантов: Quote, TranslateResult

Поля ответа: Quote (8)
Поле Тип Описание
statusобязательное"quote"
costобязательноеintegerЦена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше
freeобязательноеbooleanОперация бесплатна (первый ролик, бесплатный повтор)
estimatenumberОперация по себестоимости: ожидаемая цена в токенах (дробно)
atCostbooleanЦена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost
availableобязательноеintegerСколько токенов доступно сейчас
enoughобязательноеbooleanТокенов хватает
spendLimitLeftобязательноеinteger | nullОстаток месячного лимита расходов токена; null — без лимита
Поля ответа: TranslateResult (4)
Поле Тип Описание
revобязательноеinteger
phrasesобязательноеinteger
chargedобязательноеintegerСписано токенов с кошелька (целые)
costTokensnumberФактическая себестоимость перевода в токенах (дробно)
Пример ответа
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

Автобаланс и подбор цвета (бесплатно)

POST/v1/projects/{id}/auto-color
Области доступа
projects:write
Лимит
обычный

Без ИИ: статистика 10 кадров фрагмента → значения «Настроить» (экспозиция, контраст, насыщенность, баланс белого). Результат применяется и сохраняется.

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса AutoColorRequest

Поле Тип Описание
revобязательноеintegerРевизия из GET …/transcript или …/document
blockIdобязательноеstringId фрагмента: который поправить (auto) или образец (match)≤ 64
modeобязательноеstringauto — выровнять этот фрагмент; match — сделать остальные похожими на него (с его фильтром и LUT)auto · match

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/auto-color" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rev":7,"blockId":"string","mode":"auto"}'

Ответ

Поля ответа: AutoColorResult (5)
Поле Тип Описание
revобязательноеinteger
modeобязательноеstringauto · match
adjustобязательноеRecord<string, object>Новые значения «Настроить» по id фрагмента
appliedобязательноеinteger
durationSecобязательноеnumber
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "mode": "auto",
    "adjust": {},
    "applied": 1,
    "durationSec": 42.5
  }
}

Сменить стиль

PATCH/v1/projects/{id}/style
Области доступа
projects:write
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса StyleRequest

Поле Тип Описание
templateIdstring
fontIdstring
colorIdstring
subtitlesobjectВид субтитров; частичная правка сохраняет остальные поля. Новое design без highlight/animation/words возвращает их к auto
subtitles.enabledboolean
subtitles.designstringdynamic · karaoke · classic · minimal · pop · box · word
subtitles.sizestringsmall · medium · large
subtitles.positionstringauto — каждая фраза там, где в кадре свободнее (не на лице, хуке, плашках, титрах)auto · top · center · bottom
subtitles.speakerColorsbooleanСлова каждого говорящего — своим цветом
subtitles.highlightstringСлово, которое звучит: цвет, увеличение, плашка, подчёркивание; auto — как задумано оформлениемauto · none · color · pop · box · underline
subtitles.animationstringПоявление фразы; words — по словам, по мере речиauto · none · fade · pop · slide · words
subtitles.wordsstringСколько слов на экране сразуauto · one · few · line · phrase
subtitles.letterCasestringРегистр; auto — как задумано шрифтомauto · upper · normal
paramsobject
params.soundEffectsboolean
params.introZoomboolean

Запрос

curl
JavaScript
Python
curl -X PATCH "https://api.slicer.media/v1/projects/42/style" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"templateId":"string","fontId":"string"}'

Ответ

Поля ответа: Project (26)
Поле Тип Описание
idобязательноеinteger
titleобязательноеstring
statusобязательноеstringdraft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft
modeобязательноеstringai — монтаж ИИ-режиссёром; manual — материалы на таймлайне как есть, бесплатно (платны только ИИ-операции)ai · manual
stageобязательноеstring | null
progressобязательноеintegerПрогресс текущего запуска, %
clientобязательноеstring | nullГде создан: web, mobile, api, mcp
settingsобязательноеobjectНастройки монтажа (см. MontageSettingsInput)
briefобязательноеstring | null
isFreeобязательноеboolean
watermarkобязательноеboolean
tokensCostобязательноеinteger
errorобязательноеobject | null
error.codeобязательноеstring
error.messageобязательноеstring
durationSecобязательноеnumber | null
versionChoiceобязательноеinteger[] | nullId версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно null
resultобязательноеobject | null
result.urlобязательноеstring (uri)Скачать с токеном (поддерживается Range)
result.posterUrlобязательноеstring (uri) | null
result.containerобязательноеstring
result.infoобязательноеobject | null
appUrlобязательноеstring (uri)Проект в веб-приложении Slicer
sourcesAvailableобязательноеbooleanИсходники хранятся 7 дней после монтажа
createdAtобязательноеstringДата и время ISO 8601, UTC
finishedAtобязательноеstring | null
Пример ответа
{
  "ok": true,
  "data": {
    "id": 42,
    "title": "Монтаж за 3 минуты",
    "status": "queued",
    "mode": "ai",
    "stage": "string",
    "progress": 0.5,
    "client": "string",
    "settings": {},
    "brief": "Динамично, с акцентом на главные мысли",
    "isFree": true,
    "watermark": true,
    "tokensCost": 24,
    "error": {
      "code": "string",
      "message": "string"
    },
    "durationSec": 42.5,
    "versionChoice": [
      1
    ],
    "result": {
      "url": "https://example.com/hook",
      "posterUrl": "https://api.slicer.media/v1/…",
      "container": "string",
      "info": {}
    },
    "appUrl": "https://api.slicer.media/v1/…",
    "sourcesAvailable": true,
    "createdAt": "2026-10-16T09:30:00Z",
    "finishedAt": "2026-10-16T09:30:00Z"
  }
}

Свой режиссёр

Ваш ИИ-агент монтирует ролик сам — бесплатно: бриф с материалом и схемами плана и наблюдений, кадры исходников и приём плана с наблюдениями по кадрам. Правила ИИ-режиссёра Slicer применяются к плану на сервере, в ответе — исправления и замечания. Как этим пользоваться — Свой режиссёр.

Бриф режиссёра для вашего ИИ-ассистента (бесплатно)

POST/v1/projects/{id}/director/brief
Области доступа
projects:write
Лимит
обычный

Материал (речь по id слов, паузы, дубли, пожелания), общие советы и схемы плана и наблюдений по кадрам. Ассистент смотрит кадры через sourceFrames и присылает план вместе с тем, что увидел, в submitDirectorPlan — правила режиссёра Slicer работают там, на сервере. Настройки, если переданы, сохраняются в проекте.

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса DirectorBriefRequest

Поле Тип Описание
modestringТип роликаauto · talking · story · product · aesthetic
pacestringcalm · balanced · dynamic
effectsstringoff · light · bold
targetDurationSecinteger | nullДлина ролика, с; null — решает режиссёр (до 90 с)10–180
hookbooleanХук и заголовок в начале
plaquesboolean
emojiboolean
cameraMotionbooleanНаезды и движение камеры

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/director/brief" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"auto","pace":"calm"}'

Ответ

Поля ответа: DirectorBrief (15)
Поле Тип Описание
projectIdобязательноеinteger
revобязательноеinteger
settingsобязательноеRecord<string, object>
sourcesобязательноеobject[]
sources[].indexобязательноеinteger
sources[].kindобязательноеstring
sources[].durationSecобязательноеnumber
sources[].fileNameобязательноеstring | null
sources[].wordsобязательноеinteger
speechRecognizedобязательноеboolean
materialобязательноеstringМатериал: исходники, речь по id слов, паузы, дубли, пожелания
guideобязательноеstring[]Общие советы (правила режиссёра Slicer работают на сервере при приёме плана)
planSchemaобязательноеRecord<string, object>JSON-схема плана для submitDirectorPlan
scenesSchemaобязательноеRecord<string, object>JSON-схема того, что вы увидели в кадрах
nextобязательноеstring[]
Пример ответа
{
  "ok": true,
  "data": {
    "projectId": 42,
    "rev": 7,
    "settings": {},
    "sources": [
      {
        "index": 1,
        "kind": "string",
        "durationSec": 42.5,
        "fileName": "interview.mp4",
        "words": 1
      }
    ],
    "speechRecognized": true,
    "material": "string",
    "guide": [
      "string"
    ],
    "planSchema": {},
    "scenesSchema": {},
    "next": [
      "string"
    ]
  }
}

Кадры исходника (бесплатно)

GET/v1/projects/{id}/sources/{index}/frames
Области доступа
projects:read
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1
indexобязательноеinteger

Параметры запроса

Поле Тип Описание
timesstring
fromnumber
tonumber
countinteger1–16

Запрос

curl
JavaScript
Python
curl "https://api.slicer.media/v1/projects/42/sources/1/frames" \
  -H "Authorization: Bearer $SLICER_TOKEN"

Ответ

Поля ответа: SourceFrames (6)
Поле Тип Описание
sourceIndexобязательноеinteger
durationSecобязательноеnumber
framesобязательноеobject[]
frames[].timeобязательноеnumber
frames[].mimeTypeобязательное"image/jpeg"
frames[].dataобязательноеstringJPEG, base64, 512 px по большей стороне
Пример ответа
{
  "ok": true,
  "data": {
    "sourceIndex": 1,
    "durationSec": 42.5,
    "frames": [
      {
        "time": 1.5,
        "mimeType": "image/jpeg",
        "data": "string"
      }
    ]
  }
}

Применить план режиссёра (бесплатно)

POST/v1/projects/{id}/director/plan
Области доступа
projects:write
Лимит
обычный

К плану на сервере применяются правила режиссёра Slicer (границы слов, дубли, видеоряд по вашим наблюдениям, сдержанность, длительность): план становится документом ролика — новая ревизия, видна в редакторе, — в ответе исправления и замечания. Медиа-карточки по описанию не принимаются (их картинка — платная генерация).

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса DirectorPlanRequest

Поле Тип Описание
revобязательноеintegerrev из directorBrief или текста ролика
planобязательноеRecord<string, object>План в схеме DirectorBrief.planSchema
scenesRecord<string, object>[]Что вы увидели в кадрах, в схеме DirectorBrief.scenesSchema0–400

Запрос

curl
JavaScript
Python
curl -X POST "https://api.slicer.media/v1/projects/42/director/plan" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rev":7,"plan":{}}'

Ответ

Поля ответа: DirectorPlanResult (10)
Поле Тип Описание
revобязательноеinteger
durationSecобязательноеnumber
planSegmentsобязательноеinteger
fragmentsобязательноеinteger
fixesобязательноеstring[]Что Slicer поправил по своим правилам режиссёра
issuesобязательноеobject[]Что поправить и прислать план снова
issues[].codeобязательноеstring
issues[].segmentinteger
issues[].messageобязательноеstring
videoобязательноеstringПолучившийся ролик текстом (фрагменты, слова, элементы) — сверьте с замыслом
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "durationSec": 42.5,
    "planSegments": 1,
    "fragments": 1,
    "fixes": [
      "string"
    ],
    "issues": [
      {
        "code": "string",
        "segment": 1,
        "message": "string"
      }
    ],
    "video": "string"
  }
}

Документ монтажа

Документ монтажа

GET/v1/projects/{id}/document
Области доступа
projects:read
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Запрос

curl
JavaScript
Python
curl "https://api.slicer.media/v1/projects/42/document" \
  -H "Authorization: Bearer $SLICER_TOKEN"

Ответ

Поля ответа: DocumentState (3)
Поле Тип Описание
revобязательноеinteger
durationSecобязательноеnumber
documentобязательноеobjectДокумент монтажа (EditDocument v1). Внутри v1 поля только добавляются
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "durationSec": 42.5,
    "document": {}
  }
}

Заменить документ монтажа (для продвинутых)

PUT/v1/projects/{id}/document
Области доступа
projects:write
Лимит
обычный

Параметры пути

Поле Тип Описание
idобязательноеinteger≥ 1

Тело запроса PutDocumentRequest

Поле Тип Описание
revобязательноеinteger
documentобязательноеobject

Запрос

curl
JavaScript
Python
curl -X PUT "https://api.slicer.media/v1/projects/42/document" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rev":7,"document":{}}'

Ответ

Поля ответа: DocumentState (3)
Поле Тип Описание
revобязательноеinteger
durationSecобязательноеnumber
documentобязательноеobjectДокумент монтажа (EditDocument v1). Внутри v1 поля только добавляются
Пример ответа
{
  "ok": true,
  "data": {
    "rev": 7,
    "durationSec": 42.5,
    "document": {}
  }
}

Схемы

Transcript

Поле Тип Описание
revобязательноеintegerРевизия документа: передайте её в правки
durationSecобязательноеnumber
textобязательноеstringРолик текстом для LLM: фрагменты со словами w<id>, вырезанное — в [скобках], графика
blocksобязательноеobject[]
blocks[].idобязательноеstring
blocks[].positionобязательноеinteger
blocks[].sourceIndexобязательноеinteger
blocks[].kindобязательноеstringwords · range
blocks[].wordsобязательноеobject[]
blocks[].words[].idобязательноеinteger
blocks[].words[].textобязательноеstring
blocks[].words[].cutобязательноеboolean
blocks[].words[].accentобязательноеboolean
elementsобязательноеobject
elements.hookобязательноеstring | null
elements.plaquesобязательноеobject[]
elements.plaques[].idобязательноеstring
elements.plaques[].kindобязательноеstring
elements.plaques[].titleобязательноеstring
elements.plaques[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.plaques[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.plaques[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.plaques[].endnumberГде элемент заканчивается в ролике, с
elements.plaques[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.plaques[].anchor.blockIdобязательноеstring
elements.plaques[].anchor.atобязательноеnumber
elements.plaques[].anchor.durationобязательноеnumber
elements.cardsобязательноеobject[]
elements.cards[].idобязательноеstring
elements.cards[].captionобязательноеstring | null
elements.cards[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.cards[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.cards[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.cards[].endnumberГде элемент заканчивается в ролике, с
elements.cards[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.cards[].anchor.blockIdобязательноеstring
elements.cards[].anchor.atобязательноеnumber
elements.cards[].anchor.durationобязательноеnumber
elements.emojiобязательноеobject[]
elements.emoji[].idобязательноеstring
elements.emoji[].emojiобязательноеstring
elements.emoji[].wordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.emoji[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.emoji[].endnumberГде элемент заканчивается в ролике, с
elements.emoji[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.emoji[].anchor.blockIdобязательноеstring
elements.emoji[].anchor.atобязательноеnumber
elements.emoji[].anchor.durationобязательноеnumber
elements.zoomsобязательноеobject[]
elements.zooms[].idобязательноеstring
elements.zooms[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.zooms[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.zooms[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.zooms[].endnumberГде элемент заканчивается в ролике, с
elements.zooms[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.zooms[].anchor.blockIdобязательноеstring
elements.zooms[].anchor.atобязательноеnumber
elements.zooms[].anchor.durationобязательноеnumber
elements.titlesобязательноеobject[]Свободные текстовые слои (титры)
elements.titles[].idобязательноеstring
elements.titles[].textобязательноеstring
elements.titles[].fontобязательноеstring
elements.titles[].sizeобязательноеnumber
elements.titles[].colorобязательноеstring
elements.titles[].backgroundобязательноеstringnone · box · pill
elements.titles[].backgroundColorstring
elements.titles[].outlineboolean
elements.titles[].shadowboolean
elements.titles[].alignобязательноеstringleft · center · right
elements.titles[].xобязательноеnumber
elements.titles[].yобязательноеnumber
elements.titles[].animInstringfade · slide · pop · typewriter
elements.titles[].animOutstringfade · slide · pop
elements.titles[].fromWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.titles[].toWordIdобязательноеinteger | nullId слова; null — элемент стоит по времени (anchor)
elements.titles[].startnumberГде элемент начинается в ролике, с; нет — не показывается (его слова вырезаны)
elements.titles[].endnumberГде элемент заканчивается в ролике, с
elements.titles[].anchorobjectПривязка ко времени: фрагмент, секунда его исходника и длительность в ролике, с
elements.titles[].anchor.blockIdобязательноеstring
elements.titles[].anchor.atобязательноеnumber
elements.titles[].anchor.durationобязательноеnumber
elements.markersобязательноеobject[]Маркеры автора на таймлайне (в ролик не попадают); отрезанные не показываются
elements.markers[].idобязательноеstring
elements.markers[].timeобязательноеnumber
elements.markers[].labelобязательноеstring | null
elements.markers[].colorобязательноеstringcyan · yellow · red · green · violet
elements.soundsобязательноеobject[]Звуковые эффекты, которые поставил автор; отрезанные не показываются
elements.sounds[].idобязательноеstring
elements.sounds[].kindобязательноеstringwhoosh · pop · ding · click · swipe · rise · boom · chime
elements.sounds[].timeобязательноеnumber

EditOperation

Поле Тип Описание

EditsResult

Поле Тип Описание
revобязательноеinteger
appliedобязательноеinteger
skippedобязательноеobject[]
skipped[].indexобязательноеinteger
skipped[].opобязательноеstring
skipped[].reasonобязательноеstring
durationSecобязательноеnumber

TranscribeRequest

Поле Тип Описание
sourcesinteger[]Номера исходников (по умолчанию — все со звуком, где речь ещё не распознана)1–40
languagestringЯзык речи: auto или двухбуквенный код
confirmCostintegerЦена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается

TranscribeJob

Поле Тип Описание
idобязательноеstring
statusобязательноеstringprocessing · ready · failed
sourcesобязательноеinteger[]
createdAtобязательноеstring
errorstring

AssistantResult

Поле Тип Описание
revобязательноеinteger
summaryобязательноеstring
appliedобязательноеinteger
chargedобязательноеintegerСписано токенов с кошелька (целые)
costTokensnumberФактическая себестоимость команды в токенах (дробно); остаток копится у проекта
durationSecобязательноеnumber

TranslateResult

Поле Тип Описание
revобязательноеinteger
phrasesобязательноеinteger
chargedобязательноеintegerСписано токенов с кошелька (целые)
costTokensnumberФактическая себестоимость перевода в токенах (дробно)

StyleRequest

Поле Тип Описание
templateIdstring
fontIdstring
colorIdstring
subtitlesobjectВид субтитров; частичная правка сохраняет остальные поля. Новое design без highlight/animation/words возвращает их к auto
subtitles.enabledboolean
subtitles.designstringdynamic · karaoke · classic · minimal · pop · box · word
subtitles.sizestringsmall · medium · large
subtitles.positionstringauto — каждая фраза там, где в кадре свободнее (не на лице, хуке, плашках, титрах)auto · top · center · bottom
subtitles.speakerColorsbooleanСлова каждого говорящего — своим цветом
subtitles.highlightstringСлово, которое звучит: цвет, увеличение, плашка, подчёркивание; auto — как задумано оформлениемauto · none · color · pop · box · underline
subtitles.animationstringПоявление фразы; words — по словам, по мере речиauto · none · fade · pop · slide · words
subtitles.wordsstringСколько слов на экране сразуauto · one · few · line · phrase
subtitles.letterCasestringРегистр; auto — как задумано шрифтомauto · upper · normal
paramsobject
params.soundEffectsboolean
params.introZoomboolean

DirectorBriefRequest

Поле Тип Описание
modestringТип роликаauto · talking · story · product · aesthetic
pacestringcalm · balanced · dynamic
effectsstringoff · light · bold
targetDurationSecinteger | nullДлина ролика, с; null — решает режиссёр (до 90 с)10–180
hookbooleanХук и заголовок в начале
plaquesboolean
emojiboolean
cameraMotionbooleanНаезды и движение камеры

DirectorBrief

Поле Тип Описание
projectIdобязательноеinteger
revобязательноеinteger
settingsобязательноеRecord<string, object>
sourcesобязательноеobject[]
sources[].indexобязательноеinteger
sources[].kindобязательноеstring
sources[].durationSecобязательноеnumber
sources[].fileNameобязательноеstring | null
sources[].wordsобязательноеinteger
speechRecognizedобязательноеboolean
materialобязательноеstringМатериал: исходники, речь по id слов, паузы, дубли, пожелания
guideобязательноеstring[]Общие советы (правила режиссёра Slicer работают на сервере при приёме плана)
planSchemaобязательноеRecord<string, object>JSON-схема плана для submitDirectorPlan
scenesSchemaобязательноеRecord<string, object>JSON-схема того, что вы увидели в кадрах
nextобязательноеstring[]

SourceFrames

Поле Тип Описание
sourceIndexобязательноеinteger
durationSecобязательноеnumber
framesобязательноеobject[]
frames[].timeобязательноеnumber
frames[].mimeTypeобязательное"image/jpeg"
frames[].dataобязательноеstringJPEG, base64, 512 px по большей стороне

DirectorPlanRequest

Поле Тип Описание
revобязательноеintegerrev из directorBrief или текста ролика
planобязательноеRecord<string, object>План в схеме DirectorBrief.planSchema
scenesRecord<string, object>[]Что вы увидели в кадрах, в схеме DirectorBrief.scenesSchema0–400

DirectorPlanResult

Поле Тип Описание
revобязательноеinteger
durationSecобязательноеnumber
planSegmentsобязательноеinteger
fragmentsобязательноеinteger
fixesобязательноеstring[]Что Slicer поправил по своим правилам режиссёра
issuesобязательноеobject[]Что поправить и прислать план снова
issues[].codeобязательноеstring
issues[].segmentinteger
issues[].messageобязательноеstring
videoобязательноеstringПолучившийся ролик текстом (фрагменты, слова, элементы) — сверьте с замыслом

DocumentState

Поле Тип Описание
revобязательноеinteger
durationSecобязательноеnumber
documentобязательноеobjectДокумент монтажа (EditDocument v1). Внутри v1 поля только добавляются