Проекты
Эндпоинты проектов Slicer API — запуск монтажа с подтверждением цены, статус и этапы, версии ролика, пересборка, повтор, остановка, история и скачивание.
На этой странице
Проект — ролик и всё, что с ним происходило: материалы, запуски монтажа и экспорта, версии, история. Платные операции
(создание с ИИ-монтажом, пересборка, повтор) сначала отвечают ценой и запускаются только с confirmCost — см.
Монтаж и цена. Проект без ИИ-режиссёра (mode: "manual") создаётся бесплатно и без подтверждения —
см. Проект без ИИ-режиссёра.
Создать проект и запустить монтаж
/v1/projectsБез confirmCost возвращает Quote и ничего не создаёт. С confirmCost, равным текущей цене, создаёт проект и запускает монтаж: одна версия, которую режиссёр после рендера сам проверяет и поправляет. Первый ролик бесплатный (cost: 0). С mode: "manual" проект бесплатный: материалы ложатся на таймлайн по порядку, проект становится черновиком draft — confirmCost не нужен.
Тело запроса CreateProjectRequest
| Поле | Тип | Описание |
|---|---|---|
uploadIdsобязательное | string (uuid)[] | Готовые загрузки source в порядке материалов1–20 |
mode | string | ai (по умолчанию) — монтаж ИИ-режиссёром, платно; manual — материалы ложатся на таймлайн по порядку, проект — бесплатный черновик draft, его правят и экспортируют самиai · manual |
format | string | Формат кадра проекта manual (по умолчанию 9:16)9:16 · 4:5 · 1:1 · 16:9 |
settings | MontageSettingsInput | |
title | string | ≤ 120 |
brief | string | Пожелания режиссёру≤ 600 |
confirmCost | integer | Цена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается |
Запрос
curl -X POST "https://api.slicer.media/v1/projects" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"uploadIds":["6f1c2a4e-8b3d-4c1a-9e2f-3b5d7a9c1e20"]}'const response = await fetch('https://api.slicer.media/v1/projects', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"uploadIds": [
"6f1c2a4e-8b3d-4c1a-9e2f-3b5d7a9c1e20"
]
}),
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
json={
"uploadIds": ["6f1c2a4e-8b3d-4c1a-9e2f-3b5d7a9c1e20"],
},
)
body = response.json()Ответ
Один из вариантов: Quote, ProjectDetails
Поля ответа: Quote (8)
| Поле | Тип | Описание |
|---|---|---|
statusобязательное | "quote" | |
costобязательное | integer | Цена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше |
freeобязательное | boolean | Операция бесплатна (первый ролик, бесплатный повтор) |
estimate | number | Операция по себестоимости: ожидаемая цена в токенах (дробно) |
atCost | boolean | Цена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost |
availableобязательное | integer | Сколько токенов доступно сейчас |
enoughобязательное | boolean | Токенов хватает |
spendLimitLeftобязательное | integer | null | Остаток месячного лимита расходов токена; null — без лимита |
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"ok": true,
"data": {
"status": "quote",
"cost": 24,
"free": true,
"estimate": 1.5,
"atCost": true,
"available": 240,
"enough": true,
"spendLimitLeft": 200
}
}Список проектов
/v1/projectsПараметры запроса
| Поле | Тип | Описание |
|---|---|---|
limit | integer | 1–100 |
cursor | string | ≤ 200 |
status | string | all · ready · active · failed · draft |
q | string | ≤ 100 |
Запрос
curl "https://api.slicer.media/v1/projects" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
Поля ответа: object (2)
| Поле | Тип | Описание |
|---|---|---|
itemsобязательное | Project[] | |
nextCursorобязательное | string | null |
{
"ok": true,
"data": {
"items": [
{
"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": null,
"message": null
},
"durationSec": 42.5,
"versionChoice": [
null
],
"result": {
"url": null,
"posterUrl": null,
"container": null,
"info": null
},
"appUrl": "https://api.slicer.media/v1/…",
"sourcesAvailable": true,
"createdAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z"
}
],
"nextCursor": "eyJpZCI6NDJ9"
}
}Проект
/v1/projects/{id}Параметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl "https://api.slicer.media/v1/projects/42" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects/42",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"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",
"stages": [
{
"stage": "string",
"status": "pending",
"inRun": true,
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z",
"durationSec": 42.5,
"progress": 0.5,
"tokens": 24
}
],
"run": {
"kind": "string",
"status": "string",
"tokens": 24,
"tokensState": "free",
"queuedAt": "2026-10-16T09:30:00Z",
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z"
},
"versions": [
{
"id": 42,
"version": null,
"idea": "string",
"durationSec": 42.5,
"current": true,
"awaitingChoice": true,
"hasFile": true,
"createdAt": "2026-10-16T09:30:00Z"
}
]
}
}Переименовать проект
/v1/projects/{id}Параметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Тело запроса RenameRequest
| Поле | Тип | Описание |
|---|---|---|
titleобязательное | string | ≤ 120 |
Запрос
curl -X PATCH "https://api.slicer.media/v1/projects/42" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Монтаж за 3 минуты"}'const response = await fetch('https://api.slicer.media/v1/projects/42', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Монтаж за 3 минуты"
}),
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.patch(
"https://api.slicer.media/v1/projects/42",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
json={
"title": "Монтаж за 3 минуты",
},
)
body = response.json()Ответ
Поля ответа: Project (26)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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"
}
}Удалить проект и файлы
/v1/projects/{id}Параметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl -X DELETE "https://api.slicer.media/v1/projects/42" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.delete(
"https://api.slicer.media/v1/projects/42",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
Поля ответа: object (2)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
deletedобязательное | boolean |
{
"ok": true,
"data": {
"id": 42,
"deleted": true
}
}Запуски
Пересобрать с новыми параметрами
/v1/projects/{id}/remountПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Тело запроса RemountRequest
| Поле | Тип | Описание |
|---|---|---|
settingsобязательное | MontageSettingsInput | |
brief | string | ≤ 600 |
confirmCost | integer | Цена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается |
Запрос
curl -X POST "https://api.slicer.media/v1/projects/42/remount" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"settings":{"templateId":"string","fontId":"string","colorId":"string","subtitles":{"enabled":true,"design":"dynamic","size":"small","position":"auto","speakerColors":true,"highlight":"auto","animation":"auto","words":"auto","letterCase":"auto"},"params":{"emoji":true,"soundEffects":true,"mediaCards":true,"plaques":true,"cameraMotion":true,"introZoom":true,"hook":true},"smartCut":true,"targetDurationSec":15,"language":"auto","direction":{"mode":"auto","pace":"calm","effects":"off","narration":true,"voice":"warm"}}}'const response = await fetch('https://api.slicer.media/v1/projects/42/remount', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"settings": {
"templateId": "string",
"fontId": "string",
"colorId": "string",
"subtitles": {
"enabled": true,
"design": "dynamic",
"size": "small",
"position": "auto",
"speakerColors": true,
"highlight": "auto",
"animation": "auto",
"words": "auto",
"letterCase": "auto"
},
"params": {
"emoji": true,
"soundEffects": true,
"mediaCards": true,
"plaques": true,
"cameraMotion": true,
"introZoom": true,
"hook": true
},
"smartCut": true,
"targetDurationSec": 15,
"language": "auto",
"direction": {
"mode": "auto",
"pace": "calm",
"effects": "off",
"narration": true,
"voice": "warm"
}
}
}),
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects/42/remount",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
json={
"settings": {
"templateId": "string",
"fontId": "string",
"colorId": "string",
"subtitles": {
"enabled": True,
"design": "dynamic",
"size": "small",
"position": "auto",
"speakerColors": True,
"highlight": "auto",
"animation": "auto",
"words": "auto",
"letterCase": "auto",
},
"params": {
"emoji": True,
"soundEffects": True,
"mediaCards": True,
"plaques": True,
"cameraMotion": True,
"introZoom": True,
"hook": True,
},
"smartCut": True,
"targetDurationSec": 15,
"language": "auto",
"direction": {
"mode": "auto",
"pace": "calm",
"effects": "off",
"narration": True,
"voice": "warm",
},
},
},
)
body = response.json()Ответ
Один из вариантов: Quote, ProjectDetails
Поля ответа: Quote (8)
| Поле | Тип | Описание |
|---|---|---|
statusобязательное | "quote" | |
costобязательное | integer | Цена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше |
freeобязательное | boolean | Операция бесплатна (первый ролик, бесплатный повтор) |
estimate | number | Операция по себестоимости: ожидаемая цена в токенах (дробно) |
atCost | boolean | Цена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost |
availableобязательное | integer | Сколько токенов доступно сейчас |
enoughобязательное | boolean | Токенов хватает |
spendLimitLeftобязательное | integer | null | Остаток месячного лимита расходов токена; null — без лимита |
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"ok": true,
"data": {
"status": "quote",
"cost": 24,
"free": true,
"estimate": 1.5,
"atCost": true,
"available": 240,
"enough": true,
"spendLimitLeft": 200
}
}Повторить неудачный запуск
/v1/projects/{id}/retryПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Тело запроса RetryRequest
| Поле | Тип | Описание |
|---|---|---|
confirmCost | integer | Цена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается |
Запрос
curl -X POST "https://api.slicer.media/v1/projects/42/retry" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'const response = await fetch('https://api.slicer.media/v1/projects/42/retry', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects/42/retry",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
json={},
)
body = response.json()Ответ
Один из вариантов: Quote, ProjectDetails
Поля ответа: Quote (8)
| Поле | Тип | Описание |
|---|---|---|
statusобязательное | "quote" | |
costобязательное | integer | Цена в токенах; повторите запрос с confirmCost, равным ей. У операции по себестоимости (atCost) — предельная: спишется фактическая себестоимость, не больше |
freeобязательное | boolean | Операция бесплатна (первый ролик, бесплатный повтор) |
estimate | number | Операция по себестоимости: ожидаемая цена в токенах (дробно) |
atCost | boolean | Цена — себестоимость ИИ-сервисов без наценки: списывается фактическая, не больше cost |
availableобязательное | integer | Сколько токенов доступно сейчас |
enoughобязательное | boolean | Токенов хватает |
spendLimitLeftобязательное | integer | null | Остаток месячного лимита расходов токена; null — без лимита |
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"ok": true,
"data": {
"status": "quote",
"cost": 24,
"free": true,
"estimate": 1.5,
"atCost": true,
"available": 240,
"enough": true,
"spendLimitLeft": 200
}
}Остановить запуск
/v1/projects/{id}/cancelПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl -X POST "https://api.slicer.media/v1/projects/42/cancel" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42/cancel', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects/42/cancel",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"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",
"stages": [
{
"stage": "string",
"status": "pending",
"inRun": true,
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z",
"durationSec": 42.5,
"progress": 0.5,
"tokens": 24
}
],
"run": {
"kind": "string",
"status": "string",
"tokens": 24,
"tokensState": "free",
"queuedAt": "2026-10-16T09:30:00Z",
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z"
},
"versions": [
{
"id": 42,
"version": null,
"idea": "string",
"durationSec": 42.5,
"current": true,
"awaitingChoice": true,
"hasFile": true,
"createdAt": "2026-10-16T09:30:00Z"
}
]
}
}Версии и история
Версии ролика
/v1/projects/{id}/versionsПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl "https://api.slicer.media/v1/projects/42/versions" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42/versions', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects/42/versions",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
{
"ok": true,
"data": [
{
"id": 42,
"version": 1,
"idea": "string",
"durationSec": 42.5,
"current": true,
"awaitingChoice": true,
"hasFile": true,
"createdAt": "2026-10-16T09:30:00Z"
}
]
}Выбрать версию
/v1/projects/{id}/versions/{versionId}/chooseДелает версию текущей: ждущую выбора (versionChoice) или любую версию из истории, файл которой хранится (hasFile), — как «Сделать текущей» в приложении. Прежний ролик остаётся в истории.
Параметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
versionIdобязательное | integer | ≥ 1 |
Запрос
curl -X POST "https://api.slicer.media/v1/projects/42/versions/42/choose" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42/versions/42/choose', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects/42/versions/42/choose",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
Поля ответа: ProjectDetails (44)
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
{
"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",
"stages": [
{
"stage": "string",
"status": "pending",
"inRun": true,
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z",
"durationSec": 42.5,
"progress": 0.5,
"tokens": 24
}
],
"run": {
"kind": "string",
"status": "string",
"tokens": 24,
"tokensState": "free",
"queuedAt": "2026-10-16T09:30:00Z",
"startedAt": "2026-10-16T09:30:00Z",
"finishedAt": "2026-10-16T09:30:00Z"
},
"versions": [
{
"id": 42,
"version": null,
"idea": "string",
"durationSec": 42.5,
"current": true,
"awaitingChoice": true,
"hasFile": true,
"createdAt": "2026-10-16T09:30:00Z"
}
]
}
}История проекта
/v1/projects/{id}/historyПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl "https://api.slicer.media/v1/projects/42/history" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42/history', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects/42/history",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Ответ
{
"ok": true,
"data": [
{
"id": 42,
"kind": "string",
"status": "string",
"title": "Монтаж за 3 минуты",
"version": 1,
"createdAt": "2026-10-16T09:30:00Z"
}
]
}Файлы
Скачать ролик
/v1/projects/{id}/resultПоддерживаются Range-запросы. ?version={versionId} — файл версии.
Параметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Параметры запроса
| Поле | Тип | Описание |
|---|---|---|
version | integer | ≥ 1 |
Запрос
curl "https://api.slicer.media/v1/projects/42/result" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-o video.mp4import { writeFile } from 'node:fs/promises';
const response = await fetch('https://api.slicer.media/v1/projects/42/result', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
await writeFile('video.mp4', Buffer.from(await response.arrayBuffer()));import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects/42/result",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
stream=True,
)
with open("video.mp4", "wb") as out:
for chunk in response.iter_content(chunk_size=1 << 20):
out.write(chunk)Ответ
Файл (application/octet-stream), поддерживаются Range-запросы.
Скачать обложку (JPEG)
/v1/projects/{id}/posterПараметры пути
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | ≥ 1 |
Запрос
curl "https://api.slicer.media/v1/projects/42/poster" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-o poster.jpgimport { writeFile } from 'node:fs/promises';
const response = await fetch('https://api.slicer.media/v1/projects/42/poster', {
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
},
});
await writeFile('poster.jpg', Buffer.from(await response.arrayBuffer()));import os
import requests
response = requests.get(
"https://api.slicer.media/v1/projects/42/poster",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
stream=True,
)
with open("poster.jpg", "wb") as out:
for chunk in response.iter_content(chunk_size=1 << 20):
out.write(chunk)Ответ
Файл (application/octet-stream), поддерживаются Range-запросы.
Схемы
Project
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 |
ProjectDetails
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
titleобязательное | string | |
statusобязательное | string | draft — проект «Сам в редакторе» до первого экспорта: правьте операциями и экспортируйтеqueued · processing · succeeded · failed · cancelled · draft |
modeобязательное | string | ai — монтаж ИИ-режиссёром; 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[] | null | Id версий, ждущих выбора; монтаж отдаёт одну версию, поэтому обычно 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 | |
stagesобязательное | object[] | |
stages[].stageобязательное | string | |
stages[].statusобязательное | string | pending · running · succeeded · failed · skipped |
stages[].inRunобязательное | boolean | Часть текущего запуска (не взят готовым) |
stages[].startedAtобязательное | string | null | |
stages[].finishedAtобязательное | string | null | |
stages[].durationSecобязательное | number | null | |
stages[].progressобязательное | integer | |
stages[].tokensобязательное | integer | Доля цены запуска |
runобязательное | object | |
run.kindобязательное | string | |
run.statusобязательное | string | |
run.tokensобязательное | integer | |
run.tokensStateобязательное | string | free · reserved · charged · refunded |
run.queuedAtобязательное | string | Дата и время ISO 8601, UTC |
run.startedAtобязательное | string | null | |
run.finishedAtобязательное | string | null | |
versionsобязательное | ProjectVersion[] |
ProjectVersion
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | Id версии (записи истории) |
versionобязательное | integer | null | |
ideaобязательное | string | null | Чем версия отличается |
durationSecобязательное | number | null | |
currentобязательное | boolean | |
awaitingChoiceобязательное | boolean | Предложена на выбор после последнего монтажа |
hasFileобязательное | boolean | Файл хранится (последние 10 версий) |
createdAtобязательное | string | Дата и время ISO 8601, UTC |
CreateProjectRequest
| Поле | Тип | Описание |
|---|---|---|
uploadIdsобязательное | string (uuid)[] | Готовые загрузки source в порядке материалов1–20 |
mode | string | ai (по умолчанию) — монтаж ИИ-режиссёром, платно; manual — материалы ложатся на таймлайн по порядку, проект — бесплатный черновик draft, его правят и экспортируют самиai · manual |
format | string | Формат кадра проекта manual (по умолчанию 9:16)9:16 · 4:5 · 1:1 · 16:9 |
settings | MontageSettingsInput | |
title | string | ≤ 120 |
brief | string | Пожелания режиссёру≤ 600 |
confirmCost | integer | Цена, на которую вы согласны. Без неё ответ — Quote, ничего не запускается |
HistoryEvent
| Поле | Тип | Описание |
|---|---|---|
idобязательное | integer | |
kindобязательное | string | |
statusобязательное | string | |
titleобязательное | string | null | |
versionобязательное | integer | null | |
createdAtобязательное | string | Дата и время ISO 8601, UTC |