<!-- /docs/utilities-api (ru) -->

# API утилит: медиа, субтитры и C2PA

Девять модулей: C2PA Signer Profiles, FORSAJ, HOLST, INDEXLIFT, KLEY, OVERLAY, PLASTINKA, SPEKTR и SUFLER. Контракты сверены с исходниками 8 сентября 2026 года; доступ зависит от аккаунта и выбранной операции.


## Подключение и загрузка

Сохраните API-ключ в переменной окружения `FRANKLAB_KEY`. База примеров — `https://apergrex.ru`; пути ниже уже включают полный `/franklab/api`. Повтор `franklab` в `/franklab/api/franklab/jobs` обязателен. Для SPEKTR/Recraft используется `X-API-Key`, для остальных примеров — `Authorization: Bearer`. Не передавайте partnerId.

```bash
export FRANKLAB_ORIGIN="https://apergrex.ru"
# FRANKLAB_KEY is supplied by your secret manager
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/upload" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -F "file=@synthetic.mp4;type=video/mp4"
```

Возьмите `data.url` ответа загрузки и замените им `https://example.com/synthetic.*` в примерах; это адреса-заполнители, не готовые медиа. Максимум 150 MiB, срок хранения источника 7 дней. MIME: video/mp4, video/webm, video/quicktime, video/x-msvideo; audio/mpeg, audio/mp3, audio/wav, audio/ogg, audio/pcm, audio/l16, audio/x-pcm; image/png, image/jpeg, image/gif, image/webp. Загрузка не преобразует формат. URL должны быть доступны серверу; локальные/частные адреса и запрещённые перенаправления не подходят. Сохраняйте готовый результат до expiresAt, если поле присутствует.


Проверка подключения: GET /franklab/api/franklab/integrations/text-sticker/auth/stats с ключом. Для SPEKTR Make читает GET /franklab/api/v1/images/omni-image?pageNum=1&pageSize=1. Это чтение истории и проверка ключа, не тест генерации.

## Статус, результат и списание

Успешная отправка возвращает HTTP 200 и `success:true`, но это ещё не готовый файл. Для задач jobs храните `data.taskId`, опрашивайте свой маршрут каждые 5 секунд до `data.status=completed` или `failed`. `queued` и `processing` — промежуточные состояния. Ограничьте время ожидания; при таймауте продолжайте читать существующий ID. Не повторяйте POST автоматически после сетевой ошибки.

| Семейство | Опрос | Результат / ошибка |
| --- | --- | --- |
| FORSAJ, HOLST, KLEY, PLASTINKA, SUFLER, SPEKTR jobs | `GET /franklab/api/franklab/jobs/{taskId}` | `data.downloadUrl`, метаданные; `data.error` |
| OVERLAY | `GET /franklab/api/make/jobs/{taskId}` | `data.result.downloadUrl`; `data.error` / `data.result.error` |
| INDEXLIFT async | `GET /franklab/api/franklab/jobs/audit-landing/async/{taskId}` | `data.result.data.seo_report`, `data.result.data.brief_suggestions`, `data.phase`, `data.error_message` |
| SPEKTR Recraft | `GET /franklab/api/v1/recraft/record-info?taskId=...` | `data.state`, разберите `data.resultJson` → `resultUrls[]`; `data.failMsg` |
| C2PA, ресурсы аудиосэмплов | Без опроса задач | `data` с профилем или аудиосэмплом |

Для задач jobs `final_cost_franks` сопровождается `cost_currency=FRANK`, `cost_status` и `cost_unit`. Пока `cost_status=reserved`, сумма — резерв; `final` означает итог, `refunded` — возврат, `unavailable` — отсутствие достоверной цены. Франк — внутренняя учётная единица, не валюта. Не считайте отсутствие поля нулевой ценой. Тариф и разрешённые функции проверяются сервером. Для обычных утилит отдельный REST-маршрут оценки стоимости не подтверждён; оценка стоимости Studio не является универсальной оценкой утилит. Операция list C2PA бесплатна в исходном контракте; остальные операции профилей могут тарифицироваться. Прямая передача запросов Recraft и синхронный INDEXLIFT не доказывают этот договор списания.

Ошибки HTTP 400 обычно означают параметры/несовместимую комбинацию, 401 — ключ, 404 — ресурс, 429 — ограничение частоты; 5xx и ошибки провайдера требуют проверки существующей задачи. `success:true` с `data.status=failed` остаётся неуспехом. Диагностические операции могут возвращать metadataReport/metrics/qcReport без файла; их доступность отмечена отдельно.

## Content Credentials (C2PA)

Поддерживающие jobs принимают `c2paSigningMode=off|franklab|user_profile`, `c2paSignerProfileId` для user_profile, `contentOrigin=not_declared|human_edited|ai_assisted|ai_generated|human_created|camera_captured`. Дополнительные строки: humanAuthorName, humanAuthorUrl, reviewedBy, reviewedAt, reviewMethod, c2paActionDescription, c2paDisclosure. Массивы sourceMaterialUrls и originalEvidenceUrls — до 10 публичных HTTPS URL каждый. Ограниченные заявления human_created/camera_captured требуют активного разрешающего профиля и доказательств. verifiedIncomingC2paIngredient в запросе не служит доказательством: результат проверяет сервер. Успешная подпись не равна доверенной цепочке: читайте отдельно c2paStatus, c2paSigned, c2paCryptographicallyValid, c2paTrustedChainValid, c2paCawgIdentityPresent, c2paPublicVerifierRecognized, c2paManifestUrl и c2paVerificationReport. OVERLAY make/jobs DTO не объявляет C2PA-поля.

## C2PA Signer Profiles

Список возвращает только активные профили партнёра без PEM. Создание и ротация требуют собственного сертификата и ключа; generate_self_signed создаёт самоподписанный профиль. trustLevel=trusted через этот маршрут запрещён. Ротация создаёт новую версию; старый ID нельзя подменять новым. Отзыв меняет действительность профиля. Эти действия здесь не выполнялись.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `list` | `GET /franklab/api/make/c2pa/signer-profiles` | `{}` источник |
| `generate_self_signed` | `POST /franklab/api/make/c2pa/signer-profiles` | `{"action":"generate_self_signed","label":"My signing profile"}` источник |
| `create_from_pem` | `POST /franklab/api/make/c2pa/signer-profiles` | `{"action":"create_from_pem","label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"}` источник |
| `rotate_from_pem` | `POST /franklab/api/make/c2pa/signer-profiles/{profileId}/rotate` | `{"label":"My signing profile","certificateChainPem":"<YOUR_CERTIFICATE_CHAIN_PEM>","privateKeyPem":"<YOUR_PRIVATE_KEY_PEM>"}` источник |
| `revoke` | `POST /franklab/api/make/c2pa/signer-profiles/{profileId}/revoke` | `{}` источник |
| `lookup_signer-profiles` | `GET /franklab/api/make/c2pa/signer-profiles` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/c2pa/signer-profiles" \
  -H "Authorization: Bearer $FRANKLAB_KEY"
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `action` | string | обязательно (generate_self_signed); Обязательное поле в примере этой операции; обязательно (create_from_pem) |
| `label` | string | обязательно (generate_self_signed); Название; обязательно (create_from_pem); обязательно (rotate_from_pem) |
| `allowRestrictedOriginClaims` | boolean | Разрешение заявлений об ограниченных вариантах происхождения;  / true / false |
| `certificateChainPem` | string | обязательно (create_from_pem); Цепочка сертификатов PEM; обязательно (rotate_from_pem) |
| `privateKeyPem` | string | обязательно (create_from_pem); Закрытый ключ PEM; обязательно (rotate_from_pem) |
| `profileId` | string | обязательно (rotate_from_pem); Параметр пути: ID собственного активного профиля подписи; обязательно (revoke) |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `action` |  | list / generate_self_signed / create_from_pem / rotate_from_pem / revoke |
| `profileId` | action=rotate_from_pem | rpc://getC2paSignerProfiles |
| `allowRestrictedOriginClaims` | action=rotate_from_pem |  / true / false |
| `profileId` | action=revoke | rpc://getC2paSignerProfiles |

### Ответ и границы проверки

HTTP 200 {success:true,data:PROFILE[]}; profileId,id,label,status,trustLevel,allowRestrictedOriginClaims,version,profileGroupId,createdAt,updatedAt,rotatedAt,revokedAt; PEM-данные не возвращаются.


При ротации REST принимает необязательный allowRestrictedOriginClaims; отсутствие сохраняет старое значение. Текущая конфигурация communication Make не передаёт этот переключатель для rotate_from_pem.

## FORSAJ

video_speed отправляет videoUrl и speed в jobs/video-speed. audio_speed отправляет аудиоссылку под именем videoUrl, operation=speed в jobs/audio. speed: 0.25–4. audioBitrate: строка 8k–320k; значение custom из Make заменяется реальным битрейтом. Поле mode не передаётся в REST. Для видео duration может отражать исходную длительность; проверяйте выходной файл.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `video_speed` | `POST /franklab/api/franklab/jobs/video-speed` | `{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1}` источник |
| `audio_speed` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","speed":1.1,"operation":"speed","audioBitrate":"64k"}` источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/video-speed" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `c2paSigningMode` | string | off / franklab / user_profile; Режим подписи C2PA |
| `contentOrigin` | string | franklab или user_profile; Ограниченные варианты происхождения требуют разрешающего их профиля user_profile и подтверждающих материалов; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; Происхождение содержимого |
| `humanAuthorName` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Имя автора-человека |
| `humanAuthorUrl` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; URL автора-человека |
| `reviewedBy` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Кто выполнил проверку |
| `reviewedAt` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Время проверки |
| `reviewMethod` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Метод проверки |
| `sourceMaterialUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `originalEvidenceUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `verifiedIncomingC2paIngredient` | boolean | c2paSigningMode=franklab или c2paSigningMode=user_profile; Подтверждённый входной материал C2PA |
| `c2paActionDescription` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Описание действия C2PA |
| `c2paDisclosure` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Раскрытие сведений C2PA |
| `c2paSignerProfileId` | string | обязательно при c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; ID профиля подписи C2PA |
| `videoUrl` | string | обязательно (video_speed); URL; обязательно (audio_speed) |
| `speed` | number | обязательно (video_speed); минимум 0.25; максимум 4; обязательно (audio_speed) |
| `callbackUrl` | string | URL |
| `audioBitrate` | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; Строка от 8k до 320k; custom — элемент управления Make, в REST передавайте выбранное значение |
| `operation` | string | обязательно (audio_speed) |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `mode` |  | video_speed / audio_speed |
| `audioBitrate` | mode=audio_speed | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
| `c2paSigningMode` |  | off / franklab / user_profile |
| `contentOrigin` | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
| `c2paSignerProfileId` | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
| `contentOrigin` | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |

### Ответ и границы проверки

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; опрашивайте статус по полученному taskId.


## HOLST

Укажите imageUrl и либо operation, либо steps (до 20 шагов, каждый с op). outputFormat: jpeg/jpg/png/webp/avif/gif; outputQuality: 1–100. В текущем DTO верхнего уровня нет ряда полей Make: watermarkPosition/Opacity/Scale, textPosition/fontSize/color/font, brightness/saturation/hue/contrast/gamma, imageUrls/columns/gap/background. Для watermark, text, adjust и collage используйте steps с position/opacity/scale, content/fontSize/color, brightness и imageUrls/columns/gap соответственно. Поле font отсутствует даже в ImageStepDto: выбор шрифта для HOLST не подтверждён. removeBgProvider, alphaMatting, ocrLanguages, metadataEngine и includeGps доступны REST, но Make communication не отправляет их на верхнем уровне. OCR/remove_bg/strip_gps/read_metadata зависят от возможностей worker; info/read_metadata могут блокироваться проверкой обязательного выходного файла.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `resize` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64}` источник |
| `crop` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"crop","aspectRatio":"1:1"}` источник |
| `filter` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"filter","filterPreset":"grayscale"}` источник |
| `watermark` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"watermark","imageUrl":"https://example.com/synthetic.png","position":"bottom-right","opacity":0.5,"scale":0.15}],"outputFormat":"png"}` источник |
| `image_overlay` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"image_overlay","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25}` источник |
| `text` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"text","content":"Synthetic test","fontSize":24,"color":"#FFFFFF","position":"center"}],"outputFormat":"png"}` источник |
| `rotate` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"rotate","angle":90}` источник |
| `flip` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"flip"}` источник |
| `flop` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"flop"}` источник |
| `blur` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"blur","sigma":2}` источник |
| `sharpen` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"sharpen","sigma":1}` источник |
| `info` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"info"}` **блокировано** |
| `strip_meta` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"strip_meta"}` источник |
| `write_exif` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"write_exif","imageDescription":"Synthetic test"}` источник |
| `write_metadata` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"write_metadata","metaTitle":"Synthetic test"}` источник |
| `replace_metadata` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"replace_metadata","metaTitle":"Synthetic test"}` источник |
| `mask` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"mask","shape":"rounded","radius":8}` источник |
| `collage` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"collage","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"columns":2,"gap":4}],"outputFormat":"png"}` источник |
| `adjust` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"adjust","brightness":1.1}],"outputFormat":"png"}` источник |
| `read_metadata` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"read_metadata","metadataEngine":"exiftool"}` **блокировано** |
| `remove_bg` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"remove_bg","removeBgProvider":"local"}` источник |
| `ocr` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"ocr","ocrLanguages":"eng"}` **блокировано** |
| `strip_gps` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","operation":"strip_gps"}` источник |
| `pipeline` | `POST /franklab/api/franklab/jobs/image` | `{"imageUrl":"https://example.com/synthetic.png","steps":[{"op":"resize","width":64,"height":64}],"outputFormat":"png"}` источник |
| `lookup_image-presets` | `GET /franklab/api/franklab/integrations/text-sticker/image-presets` | источник |
| `lookup_image-formats` | `GET /franklab/api/franklab/integrations/text-sticker/image-formats` | источник |
| `lookup_fonts` | `GET /franklab/api/franklab/integrations/text-sticker/fonts` | источник |
| `lookup_signer-profiles` | `GET /franklab/api/make/c2pa/signer-profiles` | источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/image" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"imageUrl":"https://example.com/synthetic.png","operation":"resize","width":64,"height":64}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `imageUrl` | string | обязательно (resize); URL; обязательно (crop); обязательно (filter); обязательно (watermark); обязательно (image_overlay); обязательно (text); обязательно (rotate); обязательно (flip); обязательно (flop); обязательно (blur); обязательно (sharpen); обязательно (info); обязательно (strip_meta); обязательно (write_exif); обязательно (write_metadata); обязательно (replace_metadata); обязательно (mask); обязательно (collage); обязательно (adjust); обязательно (read_metadata); обязательно (remove_bg); обязательно (ocr); обязательно (strip_gps); обязательно (pipeline) |
| `outputFormat` | string | jpeg / png / webp / avif / gif; Выходной формат |
| `outputQuality` | number | минимум 1; максимум 100 |
| `c2paSigningMode` | string | off / franklab / user_profile; Режим подписи C2PA |
| `contentOrigin` | string | franklab или user_profile; Ограниченные варианты происхождения требуют разрешающего их профиля user_profile и подтверждающих материалов; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; Происхождение содержимого |
| `humanAuthorName` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Имя автора-человека |
| `humanAuthorUrl` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; URL автора-человека |
| `reviewedBy` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Кто выполнил проверку |
| `reviewedAt` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Время проверки |
| `reviewMethod` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Метод проверки |
| `sourceMaterialUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `originalEvidenceUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `verifiedIncomingC2paIngredient` | boolean | c2paSigningMode=franklab или c2paSigningMode=user_profile; Подтверждённый входной материал C2PA |
| `c2paActionDescription` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Описание действия C2PA |
| `c2paDisclosure` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Раскрытие сведений C2PA |
| `c2paSignerProfileId` | string | обязательно при c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; ID профиля подписи C2PA |
| `preset` | string | rpc://getImagePresets; Пресет |
| `width` | number | Ширина |
| `height` | number | Высота |
| `fit` | string | cover / contain / fill / inside / outside; Подгонка |
| `operation` | string | обязательно (resize); обязательно (crop); обязательно (filter); обязательно (image_overlay); обязательно (rotate); обязательно (flip); обязательно (flop); обязательно (blur); обязательно (sharpen); обязательно (info); обязательно (strip_meta); обязательно (write_exif); обязательно (write_metadata); обязательно (replace_metadata); обязательно (mask); обязательно (read_metadata); обязательно (remove_bg); обязательно (ocr); обязательно (strip_gps) |
| `aspectRatio` | string | Соотношение сторон |
| `filterPreset` | string | grayscale / sepia / warm / cold / vibrant / muted / dramatic; Пресет фильтра |
| `steps` | array | обязательно (watermark); не более 20 элементов; обязательно (text); обязательно (collage); обязательно (adjust); обязательно (pipeline) |
| `steps[].op` | string | обязательно (watermark); resize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps; Операция; обязательно (text); обязательно (collage); обязательно (adjust); обязательно (pipeline) |
| `steps[].preset` | string | steps[].op=resize или steps[].op=filter; grayscale / sepia / warm / cold / vibrant / muted / dramatic; rpc://getImagePresets; Пресет |
| `steps[].width` | number | steps[].op=resize или steps[].op=crop или steps[].op=collage; Ширина |
| `steps[].height` | number | steps[].op=resize или steps[].op=crop или steps[].op=collage; Высота |
| `steps[].fit` | string | steps[].op=resize; cover / contain / fill / inside / outside; Подгонка |
| `steps[].aspectRatio` | string | steps[].op=crop; Соотношение сторон |
| `steps[].left` | number | steps[].op=crop; Отступ слева |
| `steps[].top` | number | steps[].op=crop; Отступ сверху |
| `steps[].brightness` | number | steps[].op=filter или steps[].op=adjust; Яркость |
| `steps[].saturation` | number | steps[].op=filter или steps[].op=adjust; Насыщенность |
| `steps[].hue` | number | steps[].op=filter или steps[].op=adjust; Оттенок |
| `steps[].imageUrl` | string | steps[].op=watermark; URL изображения |
| `steps[].position` | string | steps[].op=watermark или steps[].op=text; bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; Положение |
| `steps[].opacity` | number | steps[].op=watermark; Непрозрачность |
| `steps[].scale` | number | steps[].op=watermark; Масштаб |
| `steps[].margin` | number | steps[].op=watermark; Внешний отступ |
| `steps[].content` | string | steps[].op=text; Содержимое |
| `steps[].fontSize` | number | steps[].op=text; Размер шрифта |
| `steps[].color` | string | steps[].op=text; Цвет |
| `steps[].bgColor` | string | steps[].op=text; Цвет фона |
| `steps[].bgOpacity` | number | steps[].op=text; Непрозрачность фона |
| `steps[].align` | string | steps[].op=text; center / left / right; Выравнивание |
| `steps[].maxWidth` | number | steps[].op=text; Максимальная ширина |
| `steps[].padding` | number | steps[].op=text; Внутренний отступ |
| `steps[].angle` | number | steps[].op=rotate; Угол |
| `steps[].background` | string | steps[].op=rotate или steps[].op=collage; Фон |
| `steps[].sigma` | number | steps[].op=blur или steps[].op=sharpen; Параметр сигма |
| `steps[].shape` | string | steps[].op=mask; rounded / circle; Форма |
| `steps[].radius` | number | steps[].op=mask; Радиус |
| `steps[].imageUrls` | array | steps[].op=collage; URL изображений |
| `steps[].columns` | number | steps[].op=collage; Число столбцов |
| `steps[].gap` | number | steps[].op=collage; Промежуток |
| `steps[].contrast` | number | steps[].op=adjust; Контрастность |
| `steps[].gamma` | number | steps[].op=adjust; Гамма |
| `steps[].format` | string | steps[].op=format; jpeg / png / webp / avif / gif; Формат |
| `steps[].metadataEngine` | string | steps[].op=read_metadata; sharp / exiftool; Обработчик метаданных |
| `steps[].includeGps` | boolean | steps[].op=read_metadata; Включение координат GPS |
| `steps[].removeBgProvider` | string | steps[].op=remove_bg; local; Провайдер удаления фона |
| `steps[].alphaMatting` | boolean | steps[].op=remove_bg; Уточнение полупрозрачных краёв |
| `steps[].ocrLanguages` | string | steps[].op=ocr; Языки распознавания текста |
| `steps[].metaTitle` | string | steps[].op=write_metadata или steps[].op=replace_metadata; Название в метаданных |
| `steps[].metaDescription` | string | steps[].op=write_metadata или steps[].op=replace_metadata; Описание в метаданных |
| `steps[].metaKeywords` | string | steps[].op=write_metadata; Ключевые слова в метаданных |
| `steps[].altText` | string | steps[].op=write_metadata или steps[].op=replace_metadata; Альтернативный текст |
| `steps[].semanticDescription` | string | steps[].op=write_metadata; Смысловое описание |
| `steps[].semanticTags` | string | steps[].op=write_metadata или steps[].op=replace_metadata; Смысловые теги |
| `watermarkImageUrl` | string | URL |
| `overlayImageUrl` | string | обязательно (image_overlay); URL |
| `overlayPosition` | string | top-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right; Положение наложения |
| `overlayOpacity` | number | минимум 0; максимум 1 |
| `overlayScale` | number | минимум 0.01; максимум 1 |
| `overlayMargin` | number | минимум 0 |
| `content` | string | Содержимое |
| `angle` | number | Угол |
| `sigma` | number | Параметр сигма |
| `imageDescription` | string | Описание изображения |
| `copyright` | string | Авторские права |
| `artist` | string | Исполнитель |
| `metaTitle` | string | Название в метаданных |
| `metaDescription` | string | Описание в метаданных |
| `metaKeywords` | string | Ключевые слова в метаданных |
| `metaAuthor` | string | Автор в метаданных |
| `metaCopyright` | string | Авторские права в метаданных |
| `metaCredit` | string | Указание источника в метаданных |
| `metaSoftware` | string | Программное обеспечение в метаданных |
| `metaLicenseUrl` | string | URL |
| `metaAcquireLicensePage` | string | URL |
| `metaSourceUrl` | string | URL |
| `metaDateCreated` | string | Дата создания в метаданных |
| `metaDigitalSourceType` | string | Тип цифрового источника в метаданных |
| `altText` | string | Альтернативный текст |
| `semanticDescription` | string | Смысловое описание |
| `semanticTags` | string | Смысловые теги |
| `semanticScene` | string | Смысловое описание сцены |
| `semanticStyle` | string | Стилистические характеристики |
| `semanticMood` | string | Настроение |
| `semanticColors` | string | Смысловые характеристики цветов |
| `semanticUseCases` | string | Варианты использования |
| `ocrText` | string | Распознанный текст |
| `shape` | string | rounded / circle; Форма |
| `radius` | number | Радиус |
| `metadataEngine` | string | sharp / exiftool; Обработчик метаданных |
| `includeGps` | boolean | Включение координат GPS |
| `removeBgProvider` | string | local; Провайдер удаления фона |
| `alphaMatting` | boolean | Уточнение полупрозрачных краёв |
| `ocrLanguages` | string | Языки распознавания текста |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `operation` |  | resize / crop / filter / watermark / image_overlay / text / rotate / flip / flop / blur / sharpen / info / strip_meta / write_exif / write_metadata / replace_metadata / mask / collage / adjust / read_metadata / remove_bg / ocr / strip_gps |
| `preset` | operation=resize | rpc://getImagePresets |
| `fit` | operation=resize | cover / contain / fill / inside / outside |
| `filterPreset` | operation=filter | grayscale / sepia / warm / cold / vibrant / muted / dramatic |
| `watermarkPosition` | operation=watermark | bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center |
| `overlayPosition` | operation=image_overlay | top-left / top-center / top-right / center-left / center / center-right / bottom-left / bottom-center / bottom-right |
| `textFont` | operation=text | rpc://getFonts |
| `textPosition` | operation=text | center / top / bottom / top-left / top-right / bottom-left / bottom-right |
| `shape` | operation=mask | rounded / circle |
| `metadataEngine` | operation=read_metadata | sharp / exiftool |
| `removeBgProvider` | operation=remove_bg | local |
| `outputFormat` |  | jpeg / png / webp / avif / gif |
| `c2paSigningMode` |  | off / franklab / user_profile |
| `contentOrigin` | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
| `c2paSignerProfileId` | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
| `contentOrigin` | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
| `steps[].op` |  | resize / crop / filter / watermark / text / rotate / flip / flop / blur / sharpen / mask / collage / adjust / format / info / read_metadata / remove_bg / ocr / strip_meta / write_exif / write_metadata / replace_metadata / strip_gps |
| `steps[].preset` | steps[].op=resize | rpc://getImagePresets |
| `steps[].fit` | steps[].op=resize | cover / contain / fill / inside / outside |
| `steps[].preset` | steps[].op=filter | grayscale / sepia / warm / cold / vibrant / muted / dramatic |
| `steps[].position` | steps[].op=watermark | bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center |
| `steps[].position` | steps[].op=text | center / top-center / bottom-center / top-left / top-right / bottom-left / bottom-right |
| `steps[].align` | steps[].op=text | center / left / right |
| `steps[].shape` | steps[].op=mask | rounded / circle |
| `steps[].format` | steps[].op=format | jpeg / png / webp / avif / gif |
| `steps[].metadataEngine` | steps[].op=read_metadata | sharp / exiftool |
| `steps[].removeBgProvider` | steps[].op=remove_bg | local |

### Ответ и границы проверки

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; опрашивайте статус по полученному taskId.


Шаги sharpen принимают sigma; flat/jagged из Make не входят в REST DTO. Шаги write_exif не объявляют imageDescription/copyright/artist: используйте одиночную operation=write_exif.

Известное ограничение REST: `info`, `read_metadata`, `ocr`. Worker возвращает данные без основного файла, а контур задач требует его для завершения. Эти функции блокированы до отдельного исправления; не используйте их для пробного списания.

## INDEXLIFT

execution_mode=sync вызывает audit-landing с {url,mode}; async_wait вызывает audit-landing/async и отдельный маршрут status. pageUrl из Make превращается в url. mode: single-page или crawl. Для повторного чтения используйте сохранённый taskId, не создавайте новую задачу. idempotency_key отсутствует в DTO: передавайте Idempotency-Key заголовком только для асинхронного режима. Синхронный маршрут передаёт ответ SEO-службы; он не доказывает единый биллинг или схему задач обработки медиа.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `async_wait` | `POST /franklab/api/franklab/jobs/audit-landing/async` | `{"url":"https://example.com/","mode":"single-page"}` источник |
| `sync` | `POST /franklab/api/franklab/jobs/audit-landing` | `{"url":"https://example.com/","mode":"single-page"}` источник |
| `get_task` | `GET /franklab/api/franklab/jobs/audit-landing/async/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audit-landing/async" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com/","mode":"single-page"}'
```

Для асинхронного POST добавьте `-H "Idempotency-Key: your-unique-request-id"`. Одинаковый ключ используйте только для того же запроса.

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `url` | string | обязательно (async_wait); Публичный HTTP(S) URL; обязательно (sync) |
| `mode` | string | single-page / crawl |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `execution_mode` |  | async_wait / sync |
| `mode` |  | single-page / crawl |

### Ответ и границы проверки

Синхронный режим передаёт ответ SEO-сервиса; асинхронный режим: {success:true,data:{taskId,task_id,status:"queued",phase,idempotency_key,idempotency_hit,final_cost_franks,cost_currency,cost_status:"reserved",cost_unit}}.


Асинхронный INDEXLIFT использует zeroCost в исходниках и не открывает резерв. Это отдельная бесплатная схема выполнения, не платная задача обработки медиа; фактическое выполнение всё равно требует проверки. Проверка родительской задачи 8 сентября 2026 года обнаружила отчёт по пути `data.result.data.seo_report`: `data.result` сохраняет оболочку SEO-сервиса. Рекомендации, если присутствуют, читайте в `data.result.data.brief_suggestions`. Make сейчас читает верхний `body.data.seo_report` и может пропустить результат. При успешном асинхронном выполнении `cost_status=confirmed` с нулевой стоимостью, а не `final` обычного JobsFacade.

## KLEY

Выбор operation определяет маршрут: speed → video-speed; subtitles → subtitles; overlay/image_on_video → overlay; остальные → montage. concat принимает videos[] с url и параметрами перехода к следующему клипу; поля перехода последнего элемента игнорируются. transitionSoundMode=none/auto/manual; manual требует transitionSoundPreset, громкость 0–1.5. Не передавайте отдельную строку transitionType на верхнем уровне. slideshow требует минимум 2 изображения; slideTransitionDuration меньше slideDuration. quality_compare требует referenceVideoUrl. Сравнения и анализ не гарантируют downloadUrl и требуют отдельной проверки выполнения.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `concat` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]}` источник |
| `frame` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"frame","position":"start","format":"png"}` источник |
| `trim` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"trim","startTime":0,"duration":1}` источник |
| `reverse` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"reverse"}` источник |
| `crop` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"crop","aspectRatio":"1:1"}` источник |
| `resize` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"resize","width":160,"height":160}` источник |
| `probe` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"probe"}` **блокировано** |
| `write_tags` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"write_tags","tagTitle":"Synthetic test"}` источник |
| `replace_tags` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"replace_tags","tagTitle":"Synthetic test"}` источник |
| `strip_tags` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"strip_tags"}` источник |
| `gif` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"gif","duration":1,"fps":5,"width":160}` источник |
| `fade` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"fade","fadeInDuration":0.2}` источник |
| `thumbnail_smart` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"thumbnail_smart"}` источник |
| `transcode` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"transcode","videoCodec":"libx264","crf":28}` источник |
| `pip` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"pip","overlayVideoUrl":"https://example.com/synthetic.mp4","pipScale":0.25}` источник |
| `image_on_video` | `POST /franklab/api/franklab/jobs/overlay` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"image_on_video","overlayImageUrl":"https://example.com/synthetic.png","overlayScale":0.25}` источник |
| `video_on_image` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"video_on_image","imageUrl":"https://example.com/synthetic.png","overlayVideoUrl":"https://example.com/synthetic.mp4","durationMode":"overlay"}` источник |
| `slideshow` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"slideshow","imageUrls":["https://example.com/synthetic.png","https://example.com/synthetic.png"],"slideDuration":1,"slideTransition":"none"}` источник |
| `speed` | `POST /franklab/api/franklab/jobs/video-speed` | `{"videoUrl":"https://example.com/synthetic.mp4","speed":1.1}` источник |
| `subtitles` | `POST /franklab/api/franklab/jobs/subtitles` | `{"videoUrl":"https://example.com/synthetic.mp4","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}]}` источник |
| `overlay` | `POST /franklab/api/franklab/jobs/overlay` | `{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50}]}` источник |
| `quality_compare` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"quality_compare","referenceVideoUrl":"https://example.com/synthetic.mp4"}` **блокировано** |
| `stabilize` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"stabilize"}` источник |
| `scenes` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"scenes"}` **блокировано** |
| `qc_report` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"qc_report"}` **блокировано** |
| `split_screen` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"split_screen","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}],"splitLayout":"horizontal"}` источник |
| `slow_motion` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"slow_motion","slowFactor":2,"slowFps":30}` источник |
| `denoise` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"denoise","denoiseMethod":"hqdn3d","denoiseStrength":"low"}` источник |
| `hdr_to_sdr` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"hdr_to_sdr","tonemapMethod":"hable"}` источник |
| `animated` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"animated","animatedFormat":"webp","duration":1,"fps":5,"width":160}` источник |
| `mezzanine` | `POST /franklab/api/franklab/jobs/montage` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"mezzanine","mezzanineCodec":"prores","proresProfile":0}` источник |
| `lookup_transitions` | `GET /franklab/api/franklab/integrations/text-sticker/transitions` | источник |
| `lookup_transition-sounds` | `GET /franklab/api/franklab/integrations/text-sticker/transition-sounds` | источник |
| `lookup_aspect-ratios` | `GET /franklab/api/franklab/integrations/text-sticker/aspect-ratios` | источник |
| `lookup_resize-presets` | `GET /franklab/api/franklab/integrations/text-sticker/resize-presets` | источник |
| `lookup_signer-profiles` | `GET /franklab/api/make/c2pa/signer-profiles` | источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"operation":"concat","videos":[{"url":"https://example.com/synthetic.mp4"},{"url":"https://example.com/synthetic.mp4"}]}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `callbackUrl` | string | URL |
| `videos` | array | не более 20 элементов |
| `maxTransitionRatio` | number | Максимальная доля перехода |
| `operation` | string | обязательно (concat); обязательно (frame); обязательно (trim); обязательно (reverse); обязательно (crop); обязательно (resize); обязательно (probe); обязательно (write_tags); обязательно (replace_tags); обязательно (strip_tags); обязательно (gif); обязательно (fade); обязательно (thumbnail_smart); обязательно (transcode); обязательно (pip); обязательно (image_on_video); обязательно (video_on_image); обязательно (slideshow); обязательно (quality_compare); обязательно (stabilize); обязательно (scenes); обязательно (qc_report); обязательно (split_screen); обязательно (slow_motion); обязательно (denoise); обязательно (hdr_to_sdr); обязательно (animated); обязательно (mezzanine) |
| `videoUrl` | string | обязательно (frame); URL; обязательно (trim); обязательно (reverse); обязательно (crop); обязательно (resize); обязательно (probe); обязательно (write_tags); обязательно (replace_tags); обязательно (strip_tags); обязательно (gif); обязательно (fade); обязательно (thumbnail_smart); обязательно (transcode); обязательно (pip); обязательно (image_on_video); обязательно (video_on_image); обязательно (slideshow); обязательно (speed); обязательно (subtitles); обязательно (overlay); обязательно (quality_compare); обязательно (stabilize); обязательно (scenes); обязательно (qc_report); обязательно (split_screen); обязательно (slow_motion); обязательно (denoise); обязательно (hdr_to_sdr); обязательно (animated); обязательно (mezzanine) |
| `position` | string | first / middle / last / custom; Положение |
| `customTime` | number | Пользовательское время |
| `format` | string | jpg / png; Формат |
| `startTime` | number | Время начала; минимум 0 |
| `duration` | number | Длительность; минимум 0 |
| `aspectRatio` | string | rpc://getAspectRatios; Соотношение сторон |
| `cropW` | number | Ширина области обрезки |
| `cropH` | number | Высота области обрезки |
| `cropX` | number | Координата X области обрезки |
| `cropY` | number | Координата Y области обрезки |
| `preset` | string | rpc://getResizePresets; Пресет; fast / medium / slow / veryslow |
| `width` | number | Ширина |
| `height` | number | Высота |
| `tagTitle` | string | Название в тегах |
| `tagArtist` | string | Исполнитель в тегах |
| `tagDescription` | string | Описание в тегах |
| `tagComment` | string | Комментарий в тегах |
| `tagDate` | string | Дата в тегах |
| `tagKeywords` | string | Ключевые слова в тегах |
| `tagCopyright` | string | Авторские права в тегах |
| `tagSoftware` | string | Программное обеспечение в тегах |
| `tagGenre` | string | Жанр в тегах |
| `tagLanguage` | string | Язык в тегах |
| `tagCreationTime` | string | Время создания в тегах |
| `summary` | string | Краткое содержание |
| `transcript` | string | Транскрипт |
| `thumbnailAltText` | string | Альтернативный текст миниатюры |
| `c2paSigningMode` | string | off / franklab / user_profile; Режим подписи C2PA |
| `c2paSignerProfileId` | string | обязательно при c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; ID профиля подписи C2PA |
| `contentOrigin` | string | franklab или user_profile; Ограниченные варианты происхождения требуют разрешающего их профиля user_profile и подтверждающих материалов; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; Происхождение содержимого |
| `sourceMaterialUrls` | array | не более 10 элементов |
| `originalEvidenceUrls` | array | не более 10 элементов |
| `verifiedIncomingC2paIngredient` | boolean | Подтверждённый входной материал C2PA |
| `c2paActionDescription` | string | Описание действия C2PA |
| `c2paDisclosure` | string | Раскрытие сведений C2PA |
| `fps` | number | Частота кадров |
| `fadeInDuration` | number | Длительность плавного появления |
| `fadeOutDuration` | number | Длительность плавного исчезновения |
| `videoCodec` | string | libx264 / libx265 / libvpx-vp9 / copy; Видеокодек |
| `crf` | number | crf |
| `audioBitrate` | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; Строка от 8k до 320k; custom — элемент управления Make, в REST передавайте выбранное значение |
| `overlayVideoUrl` | string | обязательно (pip); URL; обязательно (video_on_image) |
| `pipPosition` | string | top-left / top-right / bottom-left / bottom-right / center; Положение картинки в картинке |
| `pipScale` | number | Масштаб картинки в картинке |
| `includeBaseAudio` | boolean | Включение исходной звуковой дорожки |
| `baseAudioVolume` | number | Громкость исходной звуковой дорожки |
| `includeOverlayAudio` | boolean | Включение звука наложения |
| `overlayAudioVolume` | number | Громкость звука наложения |
| `overlayImageUrl` | string | обязательно (image_on_video); URL |
| `overlayPosition` | string | top-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right; Положение наложения |
| `overlayScale` | number | минимум 0.01; максимум 1 |
| `overlayOpacity` | number | минимум 0; максимум 1 |
| `overlayMargin` | number | минимум 0 |
| `endTime` | number | минимум 0 |
| `imageUrl` | string | обязательно (video_on_image); URL |
| `durationMode` | string | overlay / fixed; Режим длительности |
| `imageUrls` | array | не более 20 элементов |
| `slideDuration` | number | Длительность слайда |
| `slideTransition` | string | rpc://getTransitions; Переход между слайдами |
| `slideTransitionDuration` | number | Длительность перехода между слайдами |
| `speed` | number | обязательно (speed); минимум 0.25; максимум 4 |
| `templateId` | string | ID шаблона |
| `language` | string | ru / en / auto; Язык |
| `highlightMode` | string | none / keywords / karaoke; Режим выделения |
| `platform` | string | none / tiktok / instagram_reels / youtube_shorts; Платформа |
| `safeZonePreset` | string | Пресет безопасной зоны |
| `subtitles` | array | не более 500 элементов |
| `overlays` | array | не более 20 элементов |
| `configId` | string | ID конфигурации |
| `referenceVideoUrl` | string | обязательно (quality_compare); URL |
| `shakiness` | number | минимум 1; максимум 10 |
| `smoothing` | number | минимум 1; максимум 100 |
| `sceneThreshold` | number | минимум 1; максимум 100 |
| `sceneThumbnails` | boolean | Миниатюры сцен |
| `splitLayout` | string | horizontal / vertical / grid_2x2; Схема разделения |
| `slowFactor` | number | 2 / 4; Коэффициент замедления |
| `slowFps` | number | 30 / 60; Частота кадров при замедлении |
| `denoiseMethod` | string | hqdn3d / nlmeans; Метод шумоподавления |
| `denoiseStrength` | string | low / medium / high; Интенсивность шумоподавления |
| `tonemapMethod` | string | hable / mobius / reinhard; Метод тонального отображения |
| `animatedFormat` | string | webp / avif; Формат анимации |
| `mezzanineCodec` | string | prores / dnxhd; Промежуточный кодек |
| `proresProfile` | number | 0 / 1 / 2 / 3; Профиль ProRes |
| `dnxhdProfile` | string | dnxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx; Профиль DNxHD |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `operation` |  | concat / frame / trim / reverse / crop / resize / probe / write_tags / replace_tags / strip_tags / gif / fade / thumbnail_smart / transcode / pip / image_on_video / video_on_image / slideshow / speed / subtitles / overlay / quality_compare / stabilize / scenes / qc_report / split_screen / slow_motion / denoise / hdr_to_sdr / animated / mezzanine |
| `position` | operation=frame | first / middle / last / custom |
| `format` | operation=frame | jpg / png |
| `aspectRatio` | operation=crop | rpc://getAspectRatios |
| `preset` | operation=resize | rpc://getResizePresets |
| `c2paSigningMode` | operation=write_tags | off / franklab / user_profile |
| `c2paSignerProfileId` | operation=write_tags | rpc://getC2paSignerProfiles |
| `contentOrigin` | operation=write_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
| `c2paSigningMode` | operation=replace_tags | off / franklab / user_profile |
| `c2paSignerProfileId` | operation=replace_tags | rpc://getC2paSignerProfiles |
| `contentOrigin` | operation=replace_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
| `format` | operation=thumbnail_smart | jpg / png |
| `videoCodec` | operation=transcode | libx264 / libx265 / libvpx-vp9 / copy |
| `preset` | operation=transcode | fast / medium / slow / veryslow |
| `pipPosition` | operation=pip | top-left / top-right / bottom-left / bottom-right / center |
| `overlayPosition` | operation=image_on_video | top-left / top-center / top-right / center / bottom-left / bottom-center / bottom-right |
| `pipPosition` | operation=video_on_image | top-left / top-right / bottom-left / bottom-right / center |
| `durationMode` | operation=video_on_image | overlay / fixed |
| `slideTransition` | operation=slideshow | rpc://getTransitions |
| `subtitleLanguage` | operation=subtitles | ru / en / auto |
| `highlightMode` | operation=subtitles | none / keywords / karaoke |
| `subtitlePlatform` | operation=subtitles | none / tiktok / instagram_reels / youtube_shorts |
| `splitLayout` | operation=split_screen | horizontal / vertical / grid_2x2 |
| `slowFactor` | operation=slow_motion | 2 / 4 |
| `slowFps` | operation=slow_motion | 30 / 60 |
| `denoiseMethod` | operation=denoise | hqdn3d / nlmeans |
| `denoiseStrength` | operation=denoise | low / medium / high |
| `tonemapMethod` | operation=hdr_to_sdr | hable / mobius / reinhard |
| `animatedFormat` | operation=animated | webp / avif |
| `mezzanineCodec` | operation=mezzanine | prores / dnxhd |
| `proresProfile` | operation=mezzanine | 0 / 1 / 2 / 3 |
| `dnxhdProfile` | operation=mezzanine | dnxhr_lb / dnxhr_sq / dnxhr_hq / dnxhr_hqx |

### Ответ и границы проверки

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; опрашивайте статус по полученному taskId.


Известное ограничение REST: `probe`, `quality_compare`, `qc_report`, `scenes`. Worker возвращает данные без основного файла, а контур задач требует его для завершения. Эти функции блокированы до отдельного исправления; не используйте их для пробного списания.

## OVERLAY

Создание и опрос идут через make/jobs. Ссылка результата находится в data.result.downloadUrl. overlays — массив до 20 объектов: type=text/sticker/animated_sticker/emoji/watermark, параметры зависят от type. Используйте ID справочников. Для текстового слоя content — текст, для watermark — imageUrl; не передавайте оба представления как один тип. platform и configId задают размещение.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `overlay` | `POST /franklab/api/make/jobs/overlay` | `{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]}` источник |
| `lookup_stickers_animated_true` | `GET /franklab/api/franklab/integrations/text-sticker/stickers?animated=true` | источник |
| `lookup_emojis` | `GET /franklab/api/franklab/integrations/text-sticker/emojis` | источник |
| `lookup_fonts` | `GET /franklab/api/franklab/integrations/text-sticker/fonts` | источник |
| `lookup_stickers_animated_false` | `GET /franklab/api/franklab/integrations/text-sticker/stickers?animated=false` | источник |
| `lookup_safe-zone-options` | `GET /franklab/api/franklab/integrations/text-sticker/safe-zone-options` | источник |
| `lookup_subtitle-templates` | `GET /franklab/api/franklab/integrations/text-sticker/subtitle-templates` | источник |
| `lookup_transitions` | `GET /franklab/api/franklab/integrations/text-sticker/transitions` | источник |
| `lookup_video-effects` | `GET /franklab/api/franklab/integrations/text-sticker/video-effects` | источник |
| `get_task` | `GET /franklab/api/make/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/make/jobs/overlay" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","overlays":[{"type":"text","content":"Synthetic test","x":50,"y":50,"fontSize":24,"color":"#FFFFFF"}]}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `videoUrl` | string | обязательно (overlay); URL |
| `platform` | string | none / tiktok / instagram_reels / youtube_shorts; Платформа |
| `configId` | string | ID конфигурации |
| `overlays` | array | не более 20 элементов |
| `overlays[].type` | string | обязательно (overlay); text / emoji / sticker / animated_sticker / watermark; Тип |
| `overlays[].content` | string | Содержимое |
| `overlays[].stickerId` | string | rpc://getOverlayStickers; ID стикера |
| `overlays[].animatedStickerId` | string | rpc://getOverlayAnimatedStickers; ID анимированного стикера |
| `overlays[].imageUrl` | string | URL изображения |
| `overlays[].opacity` | number | Непрозрачность |
| `overlays[].scale` | number | Масштаб |
| `overlays[].position` | string |  / bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center; Положение |
| `overlays[].margin` | number | Внешний отступ |
| `overlays[].emojiId` | string | rpc://getOverlayEmojis; ID эмодзи |
| `overlays[].placement` | string | custom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe; Размещение |
| `overlays[].x` | number | overlays[].x |
| `overlays[].y` | number | overlays[].y |
| `overlays[].startTime` | number | Время начала |
| `overlays[].endTime` | number | Время окончания |
| `overlays[].fontSize` | number | Размер шрифта |
| `overlays[].color` | string | Цвет |
| `overlays[].font` | string | rpc://getOverlayFonts; Шрифт |
| `overlays[].shadowColor` | string | Цвет тени |
| `overlays[].shadowX` | number | Смещение тени по X |
| `overlays[].shadowY` | number | Смещение тени по Y |
| `overlays[].width` | number | Ширина |
| `overlays[].height` | number | Высота |
| `callbackUrl` | string | URL |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `platform` |  | none / tiktok / instagram_reels / youtube_shorts |
| `overlays[].type` |  | text / emoji / sticker / animated_sticker / watermark |
| `overlays[].stickerId` |  | rpc://getOverlayStickers |
| `overlays[].animatedStickerId` |  | rpc://getOverlayAnimatedStickers |
| `overlays[].position` |  |  / bottom-right / bottom-left / top-right / top-left / center / top-center / bottom-center |
| `overlays[].emojiId` |  | rpc://getOverlayEmojis |
| `overlays[].placement` |  | custom / center / top_safe / bottom_safe / top_left_safe / top_right_safe / bottom_left_safe / bottom_right_safe |
| `overlays[].font` |  | rpc://getOverlayFonts |

### Ответ и границы проверки

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; опрашивайте статус по полученному taskId.


## PLASTINKA

Проверка 8 сентября 2026 года: в примере `trim` с исходным WAV получен контейнер MP4 с копированием аудиопотока без перекодирования. Локальный декодер не распознал кодек результата, поэтому пригодность этого файла к воспроизведению не подтверждена. Наблюдение относится к этому сочетанию операции и входного формата.

Для аудиообработки исходная аудиоссылка называется videoUrl. Для overlay/replace/fit добавьте audioUrl либо sampleId; apply_sample из Make превращается в operation=sampleOperation (overlay/replace). merge принимает audioUrls[] и videoUrl, равный первому URL. save_sample возвращает ресурс с id, а не задачу: JSON {name,sampleUrl} либо multipart name+sampleFile, ровно один источник, до 50 MiB, mp3/wav/aac/m4a/ogg/flac. sampleEndTime должен быть больше sampleStartTime. sampleSourceMode=file показан в Make, но communication отправляет JSON без sampleFile; используйте прямой multipart REST.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `save_sample` | `POST /franklab/api/franklab/audio-samples` | `{"name":"Synthetic sample","sampleUrl":"https://example.com/synthetic.wav"}` источник |
| `apply_sample` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"}` источник |
| `overlay` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"overlay","audioUrl":"https://example.com/synthetic.wav"}` источник |
| `replace` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"replace","audioUrl":"https://example.com/synthetic.wav"}` источник |
| `fit` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"fit","audioUrl":"https://example.com/synthetic.wav","fitStrategy":"trim_pad","fitAudioMode":"replace"}` источник |
| `extract` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"extract"}` источник |
| `speed` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"speed","speed":1.1}` источник |
| `remove` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"remove"}` источник |
| `probe` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"probe"}` **блокировано** |
| `write_tags` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"write_tags","tagTitle":"Synthetic test"}` источник |
| `replace_tags` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"replace_tags","tagTitle":"Synthetic test"}` источник |
| `strip_tags` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"strip_tags"}` источник |
| `normalize` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"normalize","targetLoudness":-16}` источник |
| `trim` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"trim","startTime":0,"duration":1}` источник |
| `convert` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"convert","targetFormat":"mp3","audioBitrate":"64k"}` источник |
| `fade` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"fade","fadeInDuration":0.2}` источник |
| `merge` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"merge","audioUrls":["https://example.com/synthetic.wav","https://example.com/synthetic.wav"]}` источник |
| `quality_compare` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"quality_compare","referenceAudioUrl":"https://example.com/synthetic.wav"}` **блокировано** |
| `analyze` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"analyze"}` **блокировано** |
| `spectrogram` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"spectrogram","imageWidth":320,"imageHeight":240}` источник |
| `waveform_image` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"waveform_image","imageWidth":320,"imageHeight":240}` источник |
| `fingerprint` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"fingerprint"}` **блокировано** |
| `enhance_dialogue` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"enhance_dialogue","enhanceOriginal":1,"enhanceAmount":1}` источник |
| `stereo_tools` | `POST /franklab/api/franklab/jobs/audio` | `{"videoUrl":"https://example.com/synthetic.wav","operation":"stereo_tools","stereoPreset":"mono"}` источник |
| `lookup_audio-samples` | `GET /franklab/api/franklab/integrations/text-sticker/audio-samples` | источник |
| `lookup_signer-profiles` | `GET /franklab/api/make/c2pa/signer-profiles` | источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `save_sample_file` | `POST /franklab/api/franklab/audio-samples` | источник |
| `list_samples` | `GET /franklab/api/franklab/audio-samples` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/audio" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","operation":"overlay","sampleId":"<SAMPLE_UUID>"}'
```

```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/audio-samples" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -F "name=Synthetic sample" -F "sampleFile=@synthetic.wav;type=audio/wav"
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `name` | string | обязательно (save_sample); не более 120 символов; обязательно (save_sample_file); Non-empty, maximum 120 characters |
| `sampleUrl` | string | обязательно при sampleSourceMode=url; URL |
| `sampleStartTime` | number | минимум 0; Seconds >=0 |
| `sampleEndTime` | number | минимум 0; Время в секундах, больше времени начала |
| `videoUrl` | string | обязательно (apply_sample); URL; обязательно (overlay); обязательно (replace); обязательно (fit); обязательно (extract); обязательно (speed); обязательно (remove); обязательно (probe); обязательно (write_tags); обязательно (replace_tags); обязательно (strip_tags); обязательно (normalize); обязательно (trim); обязательно (convert); обязательно (fade); обязательно (merge); обязательно (quality_compare); обязательно (analyze); обязательно (spectrogram); обязательно (waveform_image); обязательно (fingerprint); обязательно (enhance_dialogue); обязательно (stereo_tools) |
| `sampleId` | string | обязательно (apply_sample); rpc://getAudioSamples; ID аудиосэмпла |
| `operation` | string | обязательно (apply_sample); overlay / replace / fit; Операция; обязательно (overlay); обязательно (replace); обязательно (fit); обязательно (extract); обязательно (speed); обязательно (remove); обязательно (probe); обязательно (write_tags); обязательно (replace_tags); обязательно (strip_tags); обязательно (normalize); обязательно (trim); обязательно (convert); обязательно (fade); обязательно (merge); обязательно (quality_compare); обязательно (analyze); обязательно (spectrogram); обязательно (waveform_image); обязательно (fingerprint); обязательно (enhance_dialogue); обязательно (stereo_tools) |
| `insertAtTime` | number | минимум 0 |
| `audioStartTime` | number | минимум 0 |
| `audioEndTime` | number | минимум 0 |
| `audioVolume` | number | минимум 0; максимум 2 |
| `videoVolume` | number | минимум 0; максимум 2; fitAudioMode=mix |
| `loopIfShort` | boolean | Зацикливание при недостаточной длительности; fitStrategy=trim_pad |
| `callbackUrl` | string | URL |
| `audioUrl` | string | обязательно (overlay); URL; обязательно (replace); обязательно (fit) |
| `audioFadeOut` | boolean | Плавное затухание звука |
| `fitAudioMode` | string | обязательно (fit); replace / mix; Режим подгонки аудио |
| `fitStrategy` | string | обязательно (fit); trim_pad / stretch; Способ подгонки |
| `speedMode` | string | обязательно при fitStrategy=stretch; standard / voice_natural; Режим скорости; обязательно (speed) |
| `speed` | number | обязательно (speed); минимум 0.25; максимум 4 |
| `audioBitrate` | string | 64k / 96k / 128k / 160k / 192k / 256k / 320k; Строка от 8k до 320k; custom — элемент управления Make, в REST передавайте выбранное значение |
| `tagTitle` | string | Название в тегах |
| `tagArtist` | string | Исполнитель в тегах |
| `tagAlbum` | string | Альбом в тегах |
| `tagGenre` | string | Жанр в тегах |
| `tagComment` | string | Комментарий в тегах |
| `tagDate` | string | Дата в тегах |
| `tagDescription` | string | Описание в тегах |
| `tagKeywords` | string | Ключевые слова в тегах |
| `tagCopyright` | string | Авторские права в тегах |
| `tagComposer` | string | Композитор в тегах |
| `tagAlbumArtist` | string | Исполнитель альбома в тегах |
| `tagTrack` | string | Номер дорожки в тегах |
| `tagDisc` | string | Номер диска в тегах |
| `tagPublisher` | string | Издатель в тегах |
| `tagBpm` | string | Темп в тегах |
| `tagLanguage` | string | Язык в тегах |
| `tagSoftware` | string | Программное обеспечение в тегах |
| `summary` | string | Краткое содержание |
| `transcript` | string | Транскрипт |
| `c2paSigningMode` | string | off / franklab / user_profile; Режим подписи C2PA |
| `c2paSignerProfileId` | string | обязательно при c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; ID профиля подписи C2PA |
| `contentOrigin` | string | franklab или user_profile; Ограниченные варианты происхождения требуют разрешающего их профиля user_profile и подтверждающих материалов; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; Происхождение содержимого |
| `sourceMaterialUrls` | array | не более 10 элементов |
| `originalEvidenceUrls` | array | не более 10 элементов |
| `verifiedIncomingC2paIngredient` | boolean | Подтверждённый входной материал C2PA |
| `c2paActionDescription` | string | Описание действия C2PA |
| `c2paDisclosure` | string | Раскрытие сведений C2PA |
| `targetLoudness` | number | Целевая громкость |
| `targetTruePeak` | number | Целевой истинный пиковый уровень |
| `startTime` | number | минимум 0 |
| `duration` | number | обязательно (trim); минимум 0 |
| `targetFormat` | string | обязательно (convert); mp3 / aac / wav / ogg / flac / alac / opus; Целевой формат |
| `fadeInDuration` | number | минимум 0 |
| `fadeOutDuration` | number | минимум 0 |
| `audioUrls` | array | не более 20 элементов |
| `referenceAudioUrl` | string | обязательно (quality_compare); URL |
| `imageWidth` | number | минимум 160; максимум 4096 |
| `imageHeight` | number | минимум 120; максимум 2160 |
| `spectrogramColor` | string | intensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain; Цвет спектрограммы |
| `spectrogramScale` | string | log / lin / sqrt / cbrt / 4thrt / 5thrt; Шкала спектрограммы |
| `spectrogramLegend` | boolean | Легенда спектрограммы |
| `waveformColor` | string | Цвет волновой формы |
| `waveformBgColor` | string | Цвет фона волновой формы |
| `waveformSplitChannels` | boolean | Раздельное отображение каналов |
| `enhanceOriginal` | number | минимум 0; максимум 1 |
| `enhanceAmount` | number | минимум 0; максимум 3 |
| `stereoPreset` | string | widen / narrow / mono; Стереопресет |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |
| `sampleFile` | binary | обязательно (save_sample_file); multipart/form-data; <=50 MiB; mp3/wav/aac/m4a/ogg/flac |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `operation` |  | save_sample / apply_sample / overlay / replace / fit / extract / speed / remove / probe / write_tags / replace_tags / strip_tags / normalize / trim / convert / fade / merge / quality_compare / analyze / spectrogram / waveform_image / fingerprint / enhance_dialogue / stereo_tools |
| `sampleSourceMode` | operation=save_sample | url / file |
| `sampleId` | operation=apply_sample | rpc://getAudioSamples |
| `sampleOperation` | operation=apply_sample | overlay / replace / fit |
| `fitAudioMode` | operation=fit | replace / mix |
| `fitStrategy` | operation=fit | trim_pad / stretch |
| `speedMode` | operation=fit; fitStrategy=stretch | standard / voice_natural |
| `speedMode` | operation=speed | standard / voice_natural |
| `audioBitrate` | operation=speed | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
| `c2paSigningMode` | operation=write_tags | off / franklab / user_profile |
| `c2paSignerProfileId` | operation=write_tags | rpc://getC2paSignerProfiles |
| `contentOrigin` | operation=write_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
| `c2paSigningMode` | operation=replace_tags | off / franklab / user_profile |
| `c2paSignerProfileId` | operation=replace_tags | rpc://getC2paSignerProfiles |
| `contentOrigin` | operation=replace_tags | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |
| `targetFormat` | operation=convert | mp3 / aac / wav / ogg / flac / alac / opus |
| `audioBitrate` | operation=convert | 64k / 96k / 128k / 160k / 192k / 256k / 320k / custom |
| `spectrogramColor` | operation=spectrogram | intensity / channel / rainbow / moreland / nebulae / fire / fiery / fruit / cool / magma / green / viridis / plasma / cividis / terrain |
| `spectrogramScale` | operation=spectrogram | log / lin / sqrt / cbrt / 4thrt / 5thrt |
| `stereoPreset` | operation=stereo_tools | widen / narrow / mono |

### Ответ и границы проверки

HTTP 200 {success:true,data:{id,name,sourceUrl,mimeType,format,durationMs,clipStartTime,clipEndTime,isSystem,createdAt}}; опрос статуса задачи не требуется.


Известное ограничение REST: `probe`, `quality_compare`, `analyze`, `fingerprint`. Worker возвращает данные без основного файла, а контур задач требует его для завершения. Эти функции блокированы до отдельного исправления; не используйте их для пробного списания.

## SPEKTR

Проверка 8 сентября 2026 года: тестовая задача `waveform` завершилась со статусом `failed` и возвратом средств (`cost_status=refunded`). Успешный результат этой операции не подтверждён; наблюдение не определяет состояние остальных операций SPEKTR.

background_remove использует X-API-Key и Recraft {model:"recraft/remove-background",input:{image:URL}}. Ответ провайдера: code/data.taskId; status — data.state, результат — JSON.parse(data.resultJson).resultUrls[]. Это прямая передача запроса без подтверждённого клиентского списания FrankLab. Остальные операции используют Bearer и jobs. waveform: audioUrl из Make → videoUrl; video_round → operation=round; video_remove_bg → operation=remove_bg. Bria replace image требует ровно одно из prompt/refImages; erase_by_text — objectName; lifestyle — sceneDescription. Для Bria video erase >5 секунд нужен autoTrim=true, фактическую длительность проверяет сервер. При возобновлении jobs через Make task_id возможен ошибочный выбор маршрута опроса Recraft; в REST сохраняйте маршрут вместе с ID.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `background_remove` | `POST /franklab/api/v1/recraft/create-task` | `{"model":"recraft/remove-background","input":{"image":"https://example.com/synthetic.png"}}` **блокировано** |
| `bria_image_remove_bg` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_image_remove_bg","imageUrl":"https://example.com/synthetic.png"}` источник |
| `bria_image_replace_bg` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_image_replace_bg","imageUrl":"https://example.com/synthetic.png","prompt":"Plain studio background"}` источник |
| `bria_erase_foreground` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_erase_foreground","imageUrl":"https://example.com/synthetic.png"}` источник |
| `bria_erase_by_text` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_erase_by_text","imageUrl":"https://example.com/synthetic.png","objectName":"lamp"}` источник |
| `bria_product_lifestyle_by_text` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_product_lifestyle_by_text","imageUrl":"https://example.com/synthetic.png","sceneDescription":"Product on a plain table","placementType":"automatic_aspect_ratio","briaAspectRatio":"1:1"}` источник |
| `bria_product_cutout` | `POST /franklab/api/franklab/jobs/image` | `{"operation":"bria_product_cutout","imageUrl":"https://example.com/synthetic.png"}` источник |
| `waveform` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240}` источник |
| `video_round` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"round","videoUrl":"https://example.com/synthetic.mp4","shape":"rounded","radius":8,"backgroundColor":"#000000"}` источник |
| `video_remove_bg` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"remove_bg","videoUrl":"https://example.com/synthetic.mp4","removeBgProvider":"bria","removeBgOutputCodec":"webm_vp9"}` источник |
| `bria_video_replace_bg` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"bria_video_replace_bg","videoUrl":"https://example.com/synthetic.mp4","backgroundUrl":"https://example.com/synthetic.png","duration":1}` источник |
| `bria_video_erase_object` | `POST /franklab/api/franklab/jobs/montage` | `{"operation":"bria_video_erase_object","videoUrl":"https://example.com/synthetic.mp4","maskUrl":"https://example.com/synthetic.mp4","duration":1}` источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `get_recraft_task` | `GET /franklab/api/v1/recraft/record-info` | **блокировано** |
| `check_connection` | `GET /franklab/api/v1/images/omni-image` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/montage" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"operation":"waveform","videoUrl":"https://example.com/synthetic.wav","width":320,"height":240}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `model` | string | обязательно (background_remove); recraft/remove-background |
| `input` | object | обязательно (background_remove); Входной объект |
| `input.image` | string | обязательно (background_remove); URL изображения; В Make указаны png/jpg/webp, до 5 МБ, до 16 Мп, 256–4096 пикселей |
| `callBackUrl` | string | Необязательный URL обратного вызова провайдера |
| `callbackUrl` | string | URL |
| `imageUrl` | string | обязательно (bria_image_remove_bg); URL; обязательно (bria_image_replace_bg); обязательно (bria_erase_foreground); обязательно (bria_erase_by_text); обязательно (bria_product_lifestyle_by_text); обязательно (bria_product_cutout) |
| `preserveAlpha` | boolean | Сохранение альфа-канала |
| `operation` | string | обязательно (bria_image_remove_bg); обязательно (bria_image_replace_bg); обязательно (bria_erase_foreground); обязательно (bria_erase_by_text); обязательно (bria_product_lifestyle_by_text); обязательно (bria_product_cutout); обязательно (waveform); обязательно (video_round); обязательно (video_remove_bg); обязательно (bria_video_replace_bg); обязательно (bria_video_erase_object) |
| `prompt` | string | Промпт |
| `refImages` | array | Референсные изображения |
| `briaMode` | string | high_control / base / fast; Режим Bria |
| `negativePrompt` | string | Негативный промпт |
| `refinePrompt` | boolean | Уточнение промпта |
| `originalQuality` | boolean | Исходное качество |
| `forceBackgroundDetection` | boolean | Принудительное определение фона |
| `seed` | number | Начальное значение генератора |
| `objectName` | string | обязательно (bria_erase_by_text); Название объекта |
| `sceneDescription` | string | обязательно (bria_product_lifestyle_by_text); Описание сцены |
| `optimizeDescription` | boolean | Оптимизация описания |
| `placementType` | string | automatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates; Тип размещения |
| `briaAspectRatio` | string | 1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3; Соотношение сторон Bria |
| `forceRmbg` | boolean | Принудительное удаление фона |
| `sku` | string | sku |
| `videoUrl` | string | обязательно (waveform); URL; обязательно (video_round); обязательно (video_remove_bg); обязательно (bria_video_replace_bg); обязательно (bria_video_erase_object) |
| `width` | number | Ширина |
| `height` | number | Высота |
| `waveformColor` | string | Цвет волновой формы |
| `waveformBgColor` | string | Цвет фона волновой формы |
| `shape` | string | rounded / circle; Форма |
| `radius` | number | Радиус |
| `backgroundColor` | string | Цвет фона |
| `removeBgProvider` | string | bria / auto / replicate; Провайдер удаления фона |
| `removeBgBackgroundColor` | string | Transparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange; Цвет фона после удаления |
| `removeBgOutputCodec` | string | webm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265; Кодек после удаления фона |
| `removeBgPreserveAudio` | boolean | Сохранение звука при удалении фона |
| `backgroundUrl` | string | обязательно (bria_video_replace_bg); URL |
| `duration` | number | Длительность |
| `briaOutputCodec` | string | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif; Выходной кодек Bria |
| `briaPreserveAudio` | boolean | Сохранение звука Bria |
| `maskUrl` | string | обязательно (bria_video_erase_object); URL |
| `autoTrim` | boolean | Автоматическая обрезка |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра; обязательно (get_recraft_task); Параметр запроса, полученный от recraft/create-task |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |
| `pageNum` | number | Пагинация через параметры запроса; Проверка соединения использует 1 |
| `pageSize` | number | Пагинация через параметры запроса; Проверка соединения использует 1 |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `operation` |  | background_remove / bria_image_remove_bg / bria_image_replace_bg / bria_erase_foreground / bria_erase_by_text / bria_product_lifestyle_by_text / bria_product_cutout / waveform / video_round / video_remove_bg / bria_video_replace_bg / bria_video_erase_object |
| `briaMode` | operation=bria_image_replace_bg | high_control / base / fast |
| `briaMode` | operation=bria_product_lifestyle_by_text | high_control / base / fast |
| `placementType` | operation=bria_product_lifestyle_by_text | automatic_aspect_ratio / original / manual_placement / manual_padding / custom_coordinates |
| `briaAspectRatio` | operation=bria_product_lifestyle_by_text | 1:1 / 4:5 / 9:16 / 16:9 / 3:2 / 2:3 |
| `shape` | operation=video_round | rounded / circle |
| `removeBgProvider` | operation=video_remove_bg | bria / auto / replicate |
| `removeBgBackgroundColor` | operation=video_remove_bg | Transparent / Black / White / Gray / Red / Green / Blue / Yellow / Cyan / Magenta / Orange |
| `removeBgOutputCodec` | operation=video_remove_bg | webm_vp9 / mov_h265 / mov_proresks / mkv_vp9 / gif / mp4_h264 / mp4_h265 / mkv_h264 / mkv_h265 |
| `briaOutputCodec` | operation=bria_video_replace_bg | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif |
| `briaOutputCodec` | operation=bria_video_erase_object | mp4_h264 / mp4_h265 / webm_vp9 / mov_h265 / mov_proresks / mkv_h264 / mkv_h265 / mkv_vp9 / gif |

### Ответ и границы проверки

HTTP-ответ с JSON провайдера {code:200,data:{taskId}}; проверяйте code и msg отдельно от статуса HTTP.


Recraft: завершение определяется `data.state=success|fail`. Цикл Make проверяет другие поля и может продолжать опрос после завершения; прямой REST-клиент должен проверять `state`.

## SUFLER

videoUrl обязателен. Автораспознавание: не передавайте subtitles; transcriptionEngine выбирает whisper/xai_grok_transcribe/gemini/local_whisper/elevenlabs_scribe. Ручной режим: subtitles[] с text,startTime,endTime; 0 ≤ startTime < endTime. words[] использует word,start,end, без перекрытия и внутри реплики. До 500 реплик. Make v1*/v2* — имена формы, REST принимает templateId,fontSize,color,positionX и др. Для v2 ручные настройки требуют presetOverrideMode=manual. Для перевода — translateTo и при необходимости dualLanguage. outputMode: burn/srt/vtt/ass/burn+srt/burn+vtt. v1 использует highlightMode; v2 — renderMode и emphasisMode.

### Операции и минимальные JSON-запросы

Каждый пример ниже задаёт полный JSON для указанного POST; замените URL/ID собственными значениями. Опции поля `operation` или режима выбирают разные функции, а не разные модели генерации. Статус «источник» означает проверку кода без проверки работающего API и полного цикла выполнения; «блокировано» — известное ограничение.

| Операция | HTTP и путь | Минимальный JSON / статус |
| --- | --- | --- |
| `v1` | `POST /franklab/api/franklab/jobs/subtitles` | `{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"}` источник |
| `v2` | `POST /franklab/api/franklab/jobs/subtitles` | `{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v2","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn","templateId":"shorts_pro"}` источник |
| `lookup_fonts` | `GET /franklab/api/franklab/integrations/text-sticker/fonts` | источник |
| `lookup_subtitle-templates` | `GET /franklab/api/franklab/integrations/text-sticker/subtitle-templates` | источник |
| `lookup_video-effects` | `GET /franklab/api/franklab/integrations/text-sticker/video-effects` | источник |
| `lookup_safe-zone-platform-options` | `GET /franklab/api/franklab/integrations/text-sticker/safe-zone-platform-options` | источник |
| `lookup_safe-zone-placement-options` | `GET /franklab/api/franklab/integrations/text-sticker/safe-zone-placement-options` | источник |
| `get_task` | `GET /franklab/api/franklab/jobs/{taskId}` | источник |
| `upload_source` | `POST /franklab/api/franklab/jobs/upload` | источник |
| `check_connection` | `GET /franklab/api/franklab/integrations/text-sticker/auth/stats` | источник |


```bash
curl --fail-with-body "$FRANKLAB_ORIGIN/franklab/api/franklab/jobs/subtitles" \
  -H "Authorization: Bearer $FRANKLAB_KEY" \
  -H "Content-Type: application/json" \
  --data '{"videoUrl":"https://example.com/synthetic.mp4","captionEngine":"v1","subtitles":[{"text":"Synthetic test","startTime":0,"endTime":1}],"outputMode":"burn"}'
```

### Поля REST

Поля относятся к выбранной операции; обязательность уточняется условием и минимальным примером. `[]` — элемент массива.

| Поле | Тип | Условия и допустимые значения |
| --- | --- | --- |
| `videoUrl` | string | обязательно (v1); URL; обязательно (v2) |
| `language` | string | auto / ru / en; Язык |
| `transcriptionEngine` | string | subtitleSourceMode=auto; whisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper; Система транскрибации |
| `diarize` | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe или subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe; Разделение по говорящим |
| `transcriptionFormat` | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; Формат транскрибации |
| `fillerWords` | boolean | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; Слова-паразиты |
| `keyterm` | array | subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe или subtitleSourceMode=auto; transcriptionEngine=elevenlabs_scribe или subtitleSourceMode=auto; transcriptionEngine=local_whisper; не более 100 элементов; не более 50 символов |
| `keyterm[]` | string | обязательно при subtitleSourceMode=auto; transcriptionEngine=xai_grok_transcribe; keyterm[] |
| `subtitles` | array | обязательно при subtitleSourceMode=manual; не более 500 элементов |
| `subtitles[].text` | string | обязательно при subtitleSourceMode=manual; Текст |
| `subtitles[].startTime` | number | обязательно при subtitleSourceMode=manual; Время начала |
| `subtitles[].endTime` | number | обязательно при subtitleSourceMode=manual; Время окончания |
| `subtitles[].words` | array | subtitleSourceMode=manual; Слова |
| `subtitles[].words[].word` | string | обязательно при subtitleSourceMode=manual; Слово |
| `subtitles[].words[].start` | number | обязательно при subtitleSourceMode=manual; Начало |
| `subtitles[].words[].end` | number | обязательно при subtitleSourceMode=manual; Окончание |
| `translateTo` | string | translationMode=translate; en / ru / de / fr / es / it / pt / zh / ja / ko / ar; Язык перевода |
| `dualLanguage` | boolean | translationMode=translate; Два языка |
| `videoEffects` | array | effectsMode=custom; не более 20 элементов |
| `videoEffects[].effectId` | string | обязательно при effectsMode=custom; rpc://getVideoEffects; ID эффекта |
| `videoEffects[].scope` | string | effectsMode=custom; clip / range; Область применения |
| `videoEffects[].startTime` | number | effectsMode=custom; Время начала |
| `videoEffects[].endTime` | number | effectsMode=custom; Время окончания |
| `videoEffects[].intensity` | number | effectsMode=custom; Интенсивность |
| `outputMode` | string | burn / srt / vtt / ass / burn+srt / burn+vtt; Режим вывода |
| `c2paSigningMode` | string | off / franklab / user_profile; Режим подписи C2PA |
| `contentOrigin` | string | franklab или user_profile; Ограниченные варианты происхождения требуют разрешающего их профиля user_profile и подтверждающих материалов; not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured; Происхождение содержимого |
| `humanAuthorName` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Имя автора-человека |
| `humanAuthorUrl` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; URL автора-человека |
| `reviewedBy` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Кто выполнил проверку |
| `reviewedAt` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Время проверки |
| `reviewMethod` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Метод проверки |
| `sourceMaterialUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `originalEvidenceUrls` | array | c2paSigningMode=franklab или c2paSigningMode=user_profile; не более 10 элементов |
| `verifiedIncomingC2paIngredient` | boolean | c2paSigningMode=franklab или c2paSigningMode=user_profile; Подтверждённый входной материал C2PA |
| `c2paActionDescription` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Описание действия C2PA |
| `c2paDisclosure` | string | c2paSigningMode=franklab или c2paSigningMode=user_profile; Раскрытие сведений C2PA |
| `c2paSignerProfileId` | string | обязательно при c2paSigningMode=user_profile; rpc://getC2paSignerProfiles; ID профиля подписи C2PA |
| `callbackUrl` | string | URL |
| `templateId` | string | clean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative; ID шаблона; shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2 |
| `highlightMode` | string |  / none / keywords / karaoke / emoji; Режим выделения |
| `platform` | string | v1PlacementMode=exact_preset; rpc://getSafeZonePlatforms; Платформа; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset; Параметр запроса; Используйте platform из справочника платформ безопасных зон |
| `safeZonePreset` | string | v1PlacementMode=exact_preset; rpc://getSafeZonePlacements; Пресет безопасной зоны; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset |
| `positionX` | number | v1PlacementMode=exact_coordinates; минимум 0; максимум 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates |
| `positionY` | number | v1PlacementMode=exact_coordinates; минимум 0; максимум 100; v2TemplateId=shorts_pro; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=product_demo_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=cta_product_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; v2PlacementMode=exact_coordinates |
| `fontSize` | number | v1TextStyleMode=custom; минимум 1; максимум 512; v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
| `font` | string | v1TextStyleMode=custom; rpc://getFonts; не более 64 символов; v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
| `color` | string | v1TextStyleMode=custom; Цвет; v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
| `uppercase` | boolean | v1TextStyleMode=custom; Верхний регистр |
| `displayWords` | number | v1TextStyleMode=custom; минимум 1; максимум 6 |
| `maxLines` | number | v1TextStyleMode=custom; минимум 1; максимум 2; v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
| `maxCharsPerLine` | number | v1TextStyleMode=custom; минимум 8; максимум 42; v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual |
| `gapSplitSec` | number | v1TextStyleMode=custom; минимум 0.15; максимум 2 |
| `lingerMs` | number | v1TextStyleMode=custom; минимум 0; максимум 500 |
| `captionEngine` | string |  |
| `presetOverrideMode` | string | v2TemplateId=shorts_pro или v2TemplateId=creator_hook_v2 или v2TemplateId=product_demo_v2 или v2TemplateId=cta_product_v2 или v2TemplateId=sufler_bold_emoji_stack_v2 или v2TemplateId=sufler_ref_dan_v2 или v2TemplateId=sufler_ref_viktor_v2 или v2TemplateId=sufler_neon_outline_emoji_v2 или v2TemplateId=sufler_orange_active_strip_v2 или v2TemplateId=sufler_minimal_white_pill_v2 или v2TemplateId=sufler_black_shadow_keyword_v2 или v2TemplateId=sufler_neon_banner_v2 или v2TemplateId=sufler_clean_yellow_stack_v2 или v2TemplateId=sufler_compact_yellow_italic_v2 или v2TemplateId=sufler_orange_keyword_stack_v2 или v2TemplateId=frank_bold_orange_box_v2 или v2TemplateId=frank_green_caption_box_v2 или v2TemplateId=frank_bold_yellow_icon_v2 или v2TemplateId=frank_creator_yellow_stack_v2 или v2TemplateId=frank_red_green_active_v2 или v2TemplateId=frank_red_white_active_v2 или v2TemplateId=frank_yellow_keyword_v2 или v2TemplateId=frank_yellow_italic_v2 или v2TemplateId=frank_soft_pill_v2; preset / manual; Режим переопределения пресета |
| `outline` | number | v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; минимум 0; максимум 8 |
| `outlineColor` | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; Цвет обводки |
| `shadow` | number | v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; минимум 0; максимум 8 |
| `renderMode` | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual;  / static / phrase_pop / word_pop / active_word / word_reveal / active_box; Режим рендеринга |
| `animationIntensity` | string | v2TemplateId=shorts_pro; v2PresetControlMode=manual или v2TemplateId=creator_hook_v2; v2PresetControlMode=manual или v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; low / medium / high; Интенсивность анимации |
| `highlightColor` | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; Цвет выделения |
| `revealBaseline` | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual;  / none / dim / full; Базовая линия появления |
| `animationStyle` | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; не более 40 символов |
| `emojiAccentMode` | string | v2TemplateId=product_demo_v2; v2PresetControlMode=manual или v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_bold_emoji_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_dan_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_outline_emoji_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_black_shadow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=sufler_clean_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=sufler_compact_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_keyword_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_yellow_icon_v2; v2PresetControlMode=manual или v2TemplateId=frank_creator_yellow_stack_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_keyword_v2; v2PresetControlMode=manual или v2TemplateId=frank_yellow_italic_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; не более 40 символов |
| `activeColor` | string | v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; Цвет активного элемента |
| `activeBoxColor` | string | v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; Цвет фона активного блока |
| `activeBoxPadding` | number | v2TemplateId=cta_product_v2; v2PresetControlMode=manual или v2TemplateId=sufler_ref_viktor_v2; v2PresetControlMode=manual или v2TemplateId=sufler_orange_active_strip_v2; v2PresetControlMode=manual или v2TemplateId=sufler_minimal_white_pill_v2; v2PresetControlMode=manual или v2TemplateId=sufler_neon_banner_v2; v2PresetControlMode=manual или v2TemplateId=frank_bold_orange_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_green_caption_box_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_green_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_red_white_active_v2; v2PresetControlMode=manual или v2TemplateId=frank_soft_pill_v2; v2PresetControlMode=manual; минимум 4; максимум 48 |
| `qualityMode` | string | standard / pro; Режим качества |
| `emphasisMode` | string | semantic / manual / karaoke / none; Режим выделения |
| `emphasisWords` | array | v2EmphasisMode=manual; не более 50 элементов; не более 40 символов |
| `emphasisWords[]` | string | обязательно при v2EmphasisMode=manual; Слова для выделения |
| `diagnosticsLevel` | string | basic / full; Уровень диагностики |
| `visualQaMode` | string | off / contact_sheet; Режим визуальной проверки качества |
| `glossary` | array | не более 50 элементов |
| `glossary[].from` | string | обязательно (v2); Исходный термин |
| `glossary[].to` | string | обязательно (v2); Термин замены |
| `brandGlossary` | array | не более 50 элементов |
| `brandGlossary[].from` | string | обязательно (v2); Исходный термин |
| `brandGlossary[].to` | string | обязательно (v2); Термин замены |
| `taskId` | string | обязательно (get_task); Параметр пути: полученный taskId того же партнёра |
| `file` | binary | обязательно (upload_source); Файл в multipart/form-data; не более 157286400 байт |

### Опции Make и преобразование в REST

Это справочник выбора в Make; имена интерфейса не всегда совпадают с REST. Поля v1*/v2*, text* и sample* переводятся как описано выше. Вложенные условия относятся к интерфейсу Make.

| Поле формы | Когда | Значения |
| --- | --- | --- |
| `language` |  | auto / ru / en |
| `captionEngine` |  | v1 / v2 |
| `v1TemplateId` | captionEngine=v1 | clean-classic / clean-bold / podcast-lower-third / interview-soft-shadow / reels-punch / tiktok-bold-center / tiktok-keyword-highlight / viral-word-pop / clean-product-demo / boxed-active-word / karaoke-lite / karaoke-pop / gaming-outline / gaming-neon / education-marker / education-clean-center / minimal-modern / boxed-bold / emoji-accent / meme-caption / serif-cinematic / classic-subtitles / creator-hook / news-ticker / documentary-narration / sports-highlight / luxury-minimal / horror-crawl / children-playful / corporate-clean / vlog-casual / music-lyric / creative-handwritten / travel-explorer / tech-review / motivational-impact / cooking-recipe / fitness-energy / wedding-elegant / retro-display / academic-formal / brand-showcase / slavic-decorative |
| `v1HighlightMode` | captionEngine=v1 |  / none / keywords / karaoke / emoji |
| `v1PlacementMode` | captionEngine=v1 | tiktok_bottom_safe / bottom_center / center / top / exact_preset / exact_coordinates |
| `v1Platform` | captionEngine=v1; v1PlacementMode=exact_preset | rpc://getSafeZonePlatforms |
| `v1SafeZonePreset` | captionEngine=v1; v1PlacementMode=exact_preset | rpc://getSafeZonePlacements |
| `v1TextStyleMode` | captionEngine=v1 | template / custom |
| `v1Font` | captionEngine=v1; v1TextStyleMode=custom | rpc://getFonts |
| `v2TemplateId` | captionEngine=v2 | shorts_pro / creator_hook_v2 / product_demo_v2 / cta_product_v2 / sufler_bold_emoji_stack_v2 / sufler_ref_dan_v2 / sufler_ref_viktor_v2 / sufler_neon_outline_emoji_v2 / sufler_orange_active_strip_v2 / sufler_minimal_white_pill_v2 / sufler_black_shadow_keyword_v2 / sufler_neon_banner_v2 / sufler_clean_yellow_stack_v2 / sufler_compact_yellow_italic_v2 / sufler_orange_keyword_stack_v2 / frank_bold_orange_box_v2 / frank_green_caption_box_v2 / frank_bold_yellow_icon_v2 / frank_creator_yellow_stack_v2 / frank_red_green_active_v2 / frank_red_white_active_v2 / frank_yellow_keyword_v2 / frank_yellow_italic_v2 / frank_soft_pill_v2 |
| `v2QualityMode` | captionEngine=v2 | standard / pro |
| `v2EmphasisMode` | captionEngine=v2 | semantic / manual / karaoke / none |
| `v2DiagnosticsLevel` | captionEngine=v2 | basic / full |
| `v2VisualQaMode` | captionEngine=v2 | off / contact_sheet |
| `subtitleSourceMode` |  | auto / manual |
| `transcriptionEngine` | subtitleSourceMode=auto | whisper / xai_grok_transcribe / elevenlabs_scribe / local_whisper |
| `translationMode` |  | none / translate |
| `translateTo` | translationMode=translate | en / ru / de / fr / es / it / pt / zh / ja / ko / ar |
| `effectsMode` |  | none / custom |
| `videoEffects[].effectId` | effectsMode=custom | rpc://getVideoEffects |
| `videoEffects[].scope` | effectsMode=custom | clip / range |
| `outputMode` |  | burn / srt / vtt / ass / burn+srt / burn+vtt |
| `c2paSigningMode` |  | off / franklab / user_profile |
| `contentOrigin` | c2paSigningMode=franklab | not_declared / human_edited / ai_assisted / ai_generated |
| `c2paSignerProfileId` | c2paSigningMode=user_profile | rpc://getC2paSignerProfiles |
| `contentOrigin` | c2paSigningMode=user_profile | not_declared / human_edited / ai_assisted / ai_generated / human_created / camera_captured |

Общие настройки пресетов v2 приведены один раз ниже. «Все 24» означает все значения `v2TemplateId` из таблицы выше; дополнительные условия в строке также обязательны. `v2RevealBaseline` доступен для 22 пресетов: всех перечисленных, кроме `shorts_pro` и `creator_hook_v2`.

| Поле формы | Пресеты v2TemplateId | Когда | Значения |
| --- | --- | --- | --- |
| `v2PresetControlMode` | Все 24 | captionEngine=v2 | preset / manual |
| `v2Font` | Все 24 | captionEngine=v2; v2PresetControlMode=manual | rpc://getFonts |
| `v2PlacementMode` | Все 24 | captionEngine=v2; v2PresetControlMode=manual | / tiktok_bottom_safe / exact_preset / exact_coordinates |
| `v2Platform` | Все 24 | captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset | rpc://getSafeZonePlatforms |
| `v2SafeZonePreset` | Все 24 | captionEngine=v2; v2PresetControlMode=manual; v2PlacementMode=exact_preset | rpc://getSafeZonePlacements |
| `v2RenderMode` | Все 24 | captionEngine=v2; v2PresetControlMode=manual | / static / phrase_pop / word_pop / active_word / word_reveal / active_box |
| `v2AnimationIntensity` | Все 24 | captionEngine=v2; v2PresetControlMode=manual | low / medium / high |
| `v2RevealBaseline` | Все, кроме `shorts_pro`, `creator_hook_v2` | captionEngine=v2; v2PresetControlMode=manual | / none / dim / full |

### Ответ и границы проверки

HTTP 200 {success:true,data:{taskId,status,final_cost_franks,cost_currency,cost_status,cost_unit}}; опрашивайте статус по полученному taskId.

Результат: downloadUrl/subtitleFileUrl, subtitleCount, transcribedText; для v2 также qualityScore, qualityGateStatus, renderMode, animatedWordCount, highlightedWords, visualQaStatus/visualQaUrl, subtitleDiagnostics. Проверяйте captionWarnings, fontRenderWarning, requestedFont/resolvedAssFont, appliedVideoFilters и ignoredVideoEffects. В Make нормализатор удаляет произвольные поля реплик; при cueStyleOverrideMode=cue сохраняет x/y/fontSize/font/color. В прямом REST передавайте только поля DTO.


REST `position`: top-left/top-center/top-right/center/bottom-left/bottom-center/bottom-right. Для v2 пользовательские параметры оформления требуют `presetOverrideMode=manual`. Условия subtitleSourceMode/translationMode/effectsMode/v1*/v2* в справочнике относятся к форме Make, не к полям REST.

## Следующий шаг

Выберите одну операцию, загрузите небольшой собственный файл, проверьте доступ и клиентский тариф, затем отправьте один запрос и сохраните его taskId вместе с маршрутом опроса. Для заблокированных функций сначала требуется отдельная проверка или исправление контракта.
