Export and publishing
Slicer API export endpoints — rendering the video with file settings and publishing, a project's publications and connected social accounts.
Export is free and re-renders the video from the current document. With the publish field the video is published to
connected accounts after rendering — this requires the publish scope. Social accounts can only be connected in the app,
and TikTok can only be published to from the app. Details — Export and publishing.
Render the video (free)
POST
/v1/projects/{id}/exportWith publish — publishes after rendering (needs the publish scope). TikTok — only from the Slicer app.
Path parameters
| Field | Type | Description |
|---|---|---|
idrequired | integer | ≥ 1 |
Request body ExportRequest
| Field | Type | Description |
|---|---|---|
profile | ExportProfile | |
publish | PublishRequestItem[] | 0–8 |
Request
curl -X POST "https://api.slicer.media/v1/projects/42/export" \
-H "Authorization: Bearer $SLICER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"profile":{"container":"mp4","codec":"h264","resolution":"720p","fps":24,"quality":"balanced","colorDepth":8,"audioBitrate":128,"loudness":-14},"publish":[{"accountId":42,"title":"Монтаж за 3 минуты","caption":"string","options":{}}]}'const response = await fetch('https://api.slicer.media/v1/projects/42/export', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SLICER_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"profile": {
"container": "mp4",
"codec": "h264",
"resolution": "720p",
"fps": 24,
"quality": "balanced",
"colorDepth": 8,
"audioBitrate": 128,
"loudness": -14
},
"publish": [
{
"accountId": 42,
"title": "Монтаж за 3 минуты",
"caption": "string",
"options": {}
}
]
}),
});
const { ok, data, error } = await response.json();import os
import requests
response = requests.post(
"https://api.slicer.media/v1/projects/42/export",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
json={
"profile": {
"container": "mp4",
"codec": "h264",
"resolution": "720p",
"fps": 24,
"quality": "balanced",
"colorDepth": 8,
"audioBitrate": 128,
"loudness": -14,
},
"publish": [{
"accountId": 42,
"title": "Монтаж за 3 минуты",
"caption": "string",
"options": {},
}],
},
)
body = response.json()Response
Response fields: ProjectDetails (44)
| Field | Type | Description |
|---|---|---|
idrequired | integer | |
titlerequired | string | |
statusrequired | string | draft — an “edit it myself” project before its first export: edit it with operations, then exportqueued · processing · succeeded · failed · cancelled · draft |
moderequired | string | ai — edited by the AI director; manual — materials on the timeline as is, free (only AI operations cost)ai · manual |
stagerequired | string | null | |
progressrequired | integer | Progress of the current run, % |
clientrequired | string | null | Where it was created: web, mobile, api, mcp |
settingsrequired | object | Montage settings (see MontageSettingsInput) |
briefrequired | string | null | |
isFreerequired | boolean | |
watermarkrequired | boolean | |
tokensCostrequired | integer | |
errorrequired | object | null | |
error.coderequired | string | |
error.messagerequired | string | |
durationSecrequired | number | null | |
versionChoicerequired | integer[] | null | Version ids awaiting your choice; a montage returns one version, so usually null |
resultrequired | object | null | |
result.urlrequired | string (uri) | Download with the token (Range supported) |
result.posterUrlrequired | string (uri) | null | |
result.containerrequired | string | |
result.inforequired | object | null | |
appUrlrequired | string (uri) | The project in the Slicer web app |
sourcesAvailablerequired | boolean | Sources are kept 7 days after the montage |
createdAtrequired | string | ISO 8601 date-time, UTC |
finishedAtrequired | string | null | |
stagesrequired | object[] | |
stages[].stagerequired | string | |
stages[].statusrequired | string | pending · running · succeeded · failed · skipped |
stages[].inRunrequired | boolean | Part of the current run (not reused from a previous one) |
stages[].startedAtrequired | string | null | |
stages[].finishedAtrequired | string | null | |
stages[].durationSecrequired | number | null | |
stages[].progressrequired | integer | |
stages[].tokensrequired | integer | Share of the run price |
runrequired | object | |
run.kindrequired | string | |
run.statusrequired | string | |
run.tokensrequired | integer | |
run.tokensStaterequired | string | free · reserved · charged · refunded |
run.queuedAtrequired | string | ISO 8601 date-time, UTC |
run.startedAtrequired | string | null | |
run.finishedAtrequired | string | null | |
versionsrequired | 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"
}
]
}
}Project publications
GET
/v1/projects/{id}/publicationsPath parameters
| Field | Type | Description |
|---|---|---|
idrequired | integer | ≥ 1 |
Request
curl "https://api.slicer.media/v1/projects/42/publications" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/projects/42/publications', {
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/publications",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Response
{
"ok": true,
"data": [
{
"id": 42,
"platform": "string",
"accountName": "Anna",
"status": "string",
"url": "https://example.com/hook",
"errorCode": "string",
"createdAt": "2026-10-16T09:30:00Z"
}
]
}Connected social accounts
GET
/v1/social/accountsRequest
curl "https://api.slicer.media/v1/social/accounts" \
-H "Authorization: Bearer $SLICER_TOKEN"const response = await fetch('https://api.slicer.media/v1/social/accounts', {
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/social/accounts",
headers={"Authorization": f"Bearer {os.environ['SLICER_TOKEN']}"},
)
body = response.json()Response
{
"ok": true,
"data": [
{
"id": 42,
"platform": "youtube",
"name": "Anna",
"status": "string",
"apiPublishing": true
}
]
}Schemas
ExportRequest
| Field | Type | Description |
|---|---|---|
profile | ExportProfile | |
publish | PublishRequestItem[] | 0–8 |
ExportProfile
| Field | Type | Description |
|---|---|---|
container | string | mp4 · mov |
codec | string | h264 · hevc |
resolution | string | 720p · 1080p · 1440p · 2160p |
fps | 24 | 25 | 30 | |
quality | string | balanced · high · max |
colorDepth | 8 | 10 | 10-bit only with HEVC |
audioBitrate | 128 | 192 | 256 | 320 | |
loudness | -14 | -16 | -23 | Target loudness, LUFS |
PublishRequestItem
| Field | Type | Description |
|---|---|---|
accountIdrequired | integer | Connected account from GET /v1/social/accounts |
title | string | ≤ 150 |
caption | string | ≤ 5000 |
options | object | Platform options: { youtube: { privacy, madeForKids } }, { instagram: { shareToFeed } }, { vk: { privacy, wallpost, groupId } }, aiGenerated |
Publication
| Field | Type | Description |
|---|---|---|
idrequired | integer | |
platformrequired | string | |
accountNamerequired | string | null | |
statusrequired | string | |
urlrequired | string | null | |
errorCoderequired | string | null | |
createdAtrequired | string | ISO 8601 date-time, UTC |
SocialAccount
| Field | Type | Description |
|---|---|---|
idrequired | integer | |
platformrequired | string | youtube · instagram · tiktok · vk |
namerequired | string | null | |
statusrequired | string | |
apiPublishingrequired | boolean | Can publish through the API (TikTok — only from the app) |