Skip to content

Projects

Slicer API project endpoints — starting a montage with price confirmation, status and stages, video versions, rebuild, retry, stop, history and downloads.

On this page

A project is a video and everything that happened to it: materials, montage and export runs, versions, history. Paid operations (create with an AI montage, rebuild, retry) answer with a price first and start only with confirmCost — see Montage and pricing. A project without the AI director (mode: "manual") is created for free and without confirmation — see Project without the AI director.

Create a project and start the montage

POST/v1/projects
Scopes
projects:write
Rate limit
paid operations
Price
spends tokens

Without confirmCost returns a Quote and creates nothing. With confirmCost equal to the current price creates the project and starts the montage: one version that the director checks and fixes after rendering. The first video is free (cost: 0). With mode: "manual" the project is free: materials go to the timeline in order and the project becomes a draft — no confirmCost needed.

Request body CreateProjectRequest

Field Type Description
uploadIdsrequiredstring (uuid)[]Ready source uploads in material order1–20
modestringai (default) — the AI director edits the video, paid; manual — materials go to the timeline in order, the project is a free draft you edit and export yourselfai · manual
formatstringFrame format of a manual project (default 9:16)9:16 · 4:5 · 1:1 · 16:9
settingsMontageSettingsInput
titlestring≤ 120
briefstringWishes for the AI director≤ 600
confirmCostintegerPrice you agree to pay. Without it the response is a Quote and nothing starts

Request

curl
JavaScript
Python
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"]}'

Response

One of: Quote, ProjectDetails

Response fields: Quote (8)
Field Type Description
statusrequired"quote"
costrequiredintegerPrice in tokens; repeat the request with confirmCost equal to it. For an operation at cost (atCost) — the maximum: the actual cost is charged, never more
freerequiredbooleanThe operation is free (first video, free retry)
estimatenumberOperation at cost: expected price in tokens (fractional)
atCostbooleanPriced at the AI providers’ cost, no markup: the wallet is charged the actual cost, at most cost
availablerequiredintegerTokens available now
enoughrequiredbooleanEnough tokens to run
spendLimitLeftrequiredinteger | nullWhat is left of the token's monthly spend limit; null — no limit
Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

List projects

GET/v1/projects
Scopes
projects:read
Rate limit
default

Query parameters

Field Type Description
limitinteger1–100
cursorstring≤ 200
statusstringall · ready · active · failed · draft
qstring≤ 100

Request

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

Response

Response fields: object (2)
Field Type Description
itemsrequiredProject[]
nextCursorrequiredstring | null
Response example
{
  "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"
  }
}

Project details

GET/v1/projects/{id}
Scopes
projects:read
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "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"
      }
    ]
  }
}

Rename a project

PATCH/v1/projects/{id}
Scopes
projects:write
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request body RenameRequest

Field Type Description
titlerequiredstring≤ 120

Request

curl
JavaScript
Python
curl -X PATCH "https://api.slicer.media/v1/projects/42" \
  -H "Authorization: Bearer $SLICER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Монтаж за 3 минуты"}'

Response

Response fields: Project (26)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
Response example
{
  "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"
  }
}

Delete a project and its files

DELETE/v1/projects/{id}
Scopes
projects:write
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

Response fields: object (2)
Field Type Description
idrequiredinteger
deletedrequiredboolean
Response example
{
  "ok": true,
  "data": {
    "id": 42,
    "deleted": true
  }
}

Runs

Rebuild with new settings

POST/v1/projects/{id}/remount
Scopes
montage:run
Rate limit
paid operations
Price
spends tokens

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request body RemountRequest

Field Type Description
settingsrequiredMontageSettingsInput
briefstring≤ 600
confirmCostintegerPrice you agree to pay. Without it the response is a Quote and nothing starts

Request

curl
JavaScript
Python
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"}}}'

Response

One of: Quote, ProjectDetails

Response fields: Quote (8)
Field Type Description
statusrequired"quote"
costrequiredintegerPrice in tokens; repeat the request with confirmCost equal to it. For an operation at cost (atCost) — the maximum: the actual cost is charged, never more
freerequiredbooleanThe operation is free (first video, free retry)
estimatenumberOperation at cost: expected price in tokens (fractional)
atCostbooleanPriced at the AI providers’ cost, no markup: the wallet is charged the actual cost, at most cost
availablerequiredintegerTokens available now
enoughrequiredbooleanEnough tokens to run
spendLimitLeftrequiredinteger | nullWhat is left of the token's monthly spend limit; null — no limit
Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

Retry a failed run

POST/v1/projects/{id}/retry
Scopes
montage:run
Rate limit
paid operations
Price
spends tokens

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request body RetryRequest

Field Type Description
confirmCostintegerPrice you agree to pay. Without it the response is a Quote and nothing starts

Request

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

Response

One of: Quote, ProjectDetails

Response fields: Quote (8)
Field Type Description
statusrequired"quote"
costrequiredintegerPrice in tokens; repeat the request with confirmCost equal to it. For an operation at cost (atCost) — the maximum: the actual cost is charged, never more
freerequiredbooleanThe operation is free (first video, free retry)
estimatenumberOperation at cost: expected price in tokens (fractional)
atCostbooleanPriced at the AI providers’ cost, no markup: the wallet is charged the actual cost, at most cost
availablerequiredintegerTokens available now
enoughrequiredbooleanEnough tokens to run
spendLimitLeftrequiredinteger | nullWhat is left of the token's monthly spend limit; null — no limit
Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "ok": true,
  "data": {
    "status": "quote",
    "cost": 24,
    "free": true,
    "estimate": 1.5,
    "atCost": true,
    "available": 240,
    "enough": true,
    "spendLimitLeft": 200
  }
}

Stop the run

POST/v1/projects/{id}/cancel
Scopes
projects:write
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "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"
      }
    ]
  }
}

Versions and history

Video versions

GET/v1/projects/{id}/versions
Scopes
projects:read
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

Response example
{
  "ok": true,
  "data": [
    {
      "id": 42,
      "version": 1,
      "idea": "string",
      "durationSec": 42.5,
      "current": true,
      "awaitingChoice": true,
      "hasFile": true,
      "createdAt": "2026-10-16T09:30:00Z"
    }
  ]
}

Choose a version

POST/v1/projects/{id}/versions/{versionId}/choose
Scopes
projects:write
Rate limit
default

Makes a version current: one awaiting choice (versionChoice) or any version from the history whose file is kept (hasFile) — like «Make current» in the app. The previous video stays in the history.

Path parameters

Field Type Description
idrequiredinteger≥ 1
versionIdrequiredinteger≥ 1

Request

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

Response

Response fields: ProjectDetails (44)
Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]
Response example
{
  "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"
      }
    ]
  }
}

Project history

GET/v1/projects/{id}/history
Scopes
projects:read
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

Response example
{
  "ok": true,
  "data": [
    {
      "id": 42,
      "kind": "string",
      "status": "string",
      "title": "Монтаж за 3 минуты",
      "version": 1,
      "createdAt": "2026-10-16T09:30:00Z"
    }
  ]
}

Files

Download the video

GET/v1/projects/{id}/result
Scopes
projects:read
Rate limit
default

Range requests are supported. ?version={versionId} — a kept version file.

Path parameters

Field Type Description
idrequiredinteger≥ 1

Query parameters

Field Type Description
versioninteger≥ 1

Request

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

Response

A file (application/octet-stream); Range requests are supported.

Download the cover (JPEG)

GET/v1/projects/{id}/poster
Scopes
projects:read
Rate limit
default

Path parameters

Field Type Description
idrequiredinteger≥ 1

Request

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

Response

A file (application/octet-stream); Range requests are supported.

Schemas

Project

Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null

ProjectDetails

Field Type Description
idrequiredinteger
titlerequiredstring
statusrequiredstringdraft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft
moderequiredstringai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual
stagerequiredstring | null
progressrequiredintegerProgress of the current run, %
clientrequiredstring | nullWhere it was created: web, mobile, api, mcp
settingsrequiredobjectMontage settings (see MontageSettingsInput)
briefrequiredstring | null
isFreerequiredboolean
watermarkrequiredboolean
tokensCostrequiredinteger
errorrequiredobject | null
error.coderequiredstring
error.messagerequiredstring
durationSecrequirednumber | null
versionChoicerequiredinteger[] | nullVersion ids awaiting your choice; a montage returns one version, so usually null
resultrequiredobject | null
result.urlrequiredstring (uri)Download with the token (Range supported)
result.posterUrlrequiredstring (uri) | null
result.containerrequiredstring
result.inforequiredobject | null
appUrlrequiredstring (uri)The project in the Slicer web app
sourcesAvailablerequiredbooleanSources are kept 7 days after the montage
createdAtrequiredstringISO 8601 date-time, UTC
finishedAtrequiredstring | null
stagesrequiredobject[]
stages[].stagerequiredstring
stages[].statusrequiredstringpending · running · succeeded · failed · skipped
stages[].inRunrequiredbooleanPart of the current run (not reused from a previous one)
stages[].startedAtrequiredstring | null
stages[].finishedAtrequiredstring | null
stages[].durationSecrequirednumber | null
stages[].progressrequiredinteger
stages[].tokensrequiredintegerShare of the run price
runrequiredobject
run.kindrequiredstring
run.statusrequiredstring
run.tokensrequiredinteger
run.tokensStaterequiredstringfree · reserved · charged · refunded
run.queuedAtrequiredstringISO 8601 date-time, UTC
run.startedAtrequiredstring | null
run.finishedAtrequiredstring | null
versionsrequiredProjectVersion[]

ProjectVersion

Field Type Description
idrequiredintegerVersion id (history event)
versionrequiredinteger | null
idearequiredstring | nullWhat makes this version different
durationSecrequirednumber | null
currentrequiredboolean
awaitingChoicerequiredbooleanOffered for choice after the last montage
hasFilerequiredbooleanThe file is kept (last 10 versions)
createdAtrequiredstringISO 8601 date-time, UTC

CreateProjectRequest

Field Type Description
uploadIdsrequiredstring (uuid)[]Ready source uploads in material order1–20
modestringai (default) — the AI director edits the video, paid; manual — materials go to the timeline in order, the project is a free draft you edit and export yourselfai · manual
formatstringFrame format of a manual project (default 9:16)9:16 · 4:5 · 1:1 · 16:9
settingsMontageSettingsInput
titlestring≤ 120
briefstringWishes for the AI director≤ 600
confirmCostintegerPrice you agree to pay. Without it the response is a Quote and nothing starts

HistoryEvent

Field Type Description
idrequiredinteger
kindrequiredstring
statusrequiredstring
titlerequiredstring | null
versionrequiredinteger | null
createdAtrequiredstringISO 8601 date-time, UTC