Документация
FRANKLAB API

Изображения, текст и аудио

JUPITER, Alibaba Image, MOON GPT, KUSOK, ORKESTR и VOLNA: функции и запросы.

Открыть .md
Открыть в AI

Разобраться с AI-ассистентом

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

Cursor и Claude Code откроются с готовым текстом, если он помещается в ссылку. ChatGPT и Antigravity: вставьте скопированный контекст вручную.

Задать вопрос

REST-контракты шести модулей Make; доступ и стоимость зависят от аккаунта и выбранной операции.

Подключение и выполнение запроса

Все пути ниже полные, начиная с /franklab/api. Используйте ключ своего аккаунта в X-API-Key; храните его только в переменной окружения сервера. Пример одного запроса:

bash
export FRANKLAB_BASE_URL='https://apergrex.ru/franklab/api'
# FRANKLAB_KEY уже задан через защищённое окружение
cat > request.json <<'JSON'
{"model_key":"moon_gpt","prompt":"Return the word OK.","max_output_tokens":16,"async_mode":true}
JSON
curl --fail-with-body --max-time 300 -X POST \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your account key}" \
  -H 'Content-Type: application/json' \
  --data-binary @request.json \
  "$FRANKLAB_BASE_URL/make/dola/generate"

Пример вызывает генерацию и может резервировать средства. Для другого действия замените суффикс пути, метод и JSON по таблице. REPLACE_WITH_… и example.com — шаблоны, которые надо заменить собственными ID/медиа; примеры не следует запускать подряд. GET принимает указанные query-параметры, path ID подставляется в URL, тело не отправляется.

Обязательность и варианты относятся к выбранной операции; условия указаны отдельно. «Make default» — значение формы, которое REST-клиент должен передать явно, если хочет повторить поведение Make. Это не обещание серверного default.

Биллинг, ошибки и повторные запросы

Сначала проверьте баланс и тариф. Alibaba предоставляет /make/alibaba/estimate; общий /v1/billing/pricing/estimate принимает modelId из актуального /v1/billing/pricing/catalog и только поддерживаемые параметры. Идентификатор ценового каталога не равен автоматически model_key/model_name. У остальных действий может не быть отдельного публичного estimate; неизвестная цена не равна нулю. Сверяйте резерв, итоговую стоимость и возврат по задаче и транзакциям. Франк (₣) — внутренняя расчётная единица.

Ошибки: 400 — неверные поля/модель/ссылки, 401 — ключ, 403 — доступ, 404 — отсутствующий или недоступный вашему аккаунту ресурс, 429 — ограничение частоты. Недоступность модели, недостаточный баланс и ошибки выполнения также могут быть внутри code, message/msg, data.error/error_message при HTTP 200. Проверяйте HTTP и тело. При неизвестном исходе POST сохраните идентификаторы и обратитесь к истории/поддержке; не повторяйте платную отправку автоматически. Состояния, ошибки и поля результатов зависят от модуля.

FrankLab Alibaba Image

Если оценка недоступна для вашего аккаунта, уточните доступ к модели в поддержке перед отправкой генерации.

Создание изображения Z-Image, генерация и редактирование Qwen Image 3.0 и Qwen Image 3.0 Pro. REST-операции синхронные: сначала разбирайте ответ. Оценка и генерация требуют доступа аккаунта к выбранной операции.

Для редактирования Qwen укажите operation:"image_edit" и editImageUrls: 1–3 прямые публичные HTTPS-ссылки на изображения PNG/JPEG/WebP, до 10 MiB каждое. Сервер импортирует изображения для вашего аккаунта. Альтернатива: загрузите каждое изображение через multipart-поле file в POST /franklab/api/franklab/jobs/upload, затем соберите значения data.storedFileId из ответов в editImageIds. Передавайте ровно одно поле: editImageUrls или editImageIds; ID должны принадлежать вашему аккаунту. Qwen требует width/height: каждая сторона до 2048, площадь от 512² до 2048² пикселей; n от 1 до 6 (по умолчанию 1). prompt_extend_mode=agent работает только для text-to-image. Результат Qwen — PNG. Размер Z-Image записывается через *, например 1024*1024.

В успешном ответе проверяйте data.imageUrl (первое изображение), data.taskId, размеры и estimated_cost_franks/final_cost_franks/cost_status. Кроме HTTP проверяйте code и error_message. Оценка не создаёт изображение. Для оценки Qwen поле называется qwenOperation, для генерации — operation. /make/alibaba/status/:taskId опрашивает видео и не подходит для результата изображения.

ДействиеМетодПуть
z-image-turbo:text_to_imagePOST/franklab/api/make/alibaba/images
qwen-image-3.0-pro:text_to_imagePOST/franklab/api/make/alibaba/images
qwen-image-3.0-pro:image_editPOST/franklab/api/make/alibaba/images
qwen-image-3.0:text_to_imagePOST/franklab/api/make/alibaba/images
qwen-image-3.0:image_editPOST/franklab/api/make/alibaba/images
estimatePOST/franklab/api/make/alibaba/estimate

z-image-turbo:text_to_image

POST /franklab/api/make/alibaba/images

REST-полеТипОбязательноЗначения / условия
modelstringда"z-image-turbo"
promptstringда—
sizestringда["1024*1024","832*1248","1248*832","864*1152","1152*864","896*1152","1152*896","720*1280","576*1344","1280*720","1344*576","1280*1280","1024*1536","1536*1024","1104*1472","1472*1104","1120*1440","1440*1120","864*1536","720*1680","1536*864","1680*720","1536*1536","1248*1872","1872*1248","1296*1728","1728*1296","1344*1728","1728*1344","1152*2048","864*2016","2048*1152","2016*864"]; Make default: "1024*1024"
seedintegerнет—

JSON-шаблон:

json
{
  "model": "z-image-turbo",
  "prompt": "A short calm synthetic test.",
  "size": "1024*1024"
}

qwen-image-3.0-pro:text_to_image

POST /franklab/api/make/alibaba/images

REST-полеТипОбязательноЗначения / условия
modelstringда"qwen-image-3.0-pro"
operationstringда"text_to_image"
promptstringда—
widthintegerдаMake default: 1024
heightintegerдаMake default: 1024
nintegerнетСервер default: 1
seedintegerнет—
negative_promptstringнет—
prompt_extendbooleanнетMake default: false
prompt_extend_modestringнет["direct","agent"]; Make default: "direct"
enable_thinkingbooleanнетMake default: false
watermarkbooleanнетMake default: false

JSON-шаблон:

json
{
  "model": "qwen-image-3.0-pro",
  "operation": "text_to_image",
  "prompt": "A short calm synthetic test.",
  "width": 1024,
  "height": 1024
}

qwen-image-3.0-pro:image_edit

POST /franklab/api/make/alibaba/images

REST-полеТипОбязательноЗначения / условия
modelstringда"qwen-image-3.0-pro"
operationstringда"image_edit"
promptstringда—
widthintegerдаMake default: 1024
heightintegerдаMake default: 1024
nintegerнетСервер default: 1
editImageUrlsstring[]условно1–3 прямых HTTPS URL; PNG/JPEG/WebP, ≤10 MiB каждый; без editImageIds.
editImageIdsstring[]условно1–3 UUID вашего аккаунта из data.storedFileId ответа загрузки; без editImageUrls.
seedintegerнет—
negative_promptstringнет—
prompt_extendbooleanнетMake default: false
enable_thinkingbooleanнетMake default: false
watermarkbooleanнетMake default: false

JSON-шаблон:

json
{
  "model": "qwen-image-3.0-pro",
  "operation": "image_edit",
  "prompt": "Replace the background with a pale blue studio backdrop.",
  "width": 1024,
  "height": 1024,
  "editImageUrls": [
    "https://media.example.com/product-front.png"
  ]
}

qwen-image-3.0:text_to_image

POST /franklab/api/make/alibaba/images

REST-полеТипОбязательноЗначения / условия
modelstringда"qwen-image-3.0"
operationstringда"text_to_image"
promptstringда—
widthintegerдаMake default: 1024
heightintegerдаMake default: 1024
nintegerнетСервер default: 1
seedintegerнет—
negative_promptstringнет—
prompt_extendbooleanнетMake default: false
prompt_extend_modestringнет["direct","agent"]; Make default: "direct"
enable_thinkingbooleanнетMake default: false
watermarkbooleanнетMake default: false

JSON-шаблон:

json
{
  "model": "qwen-image-3.0",
  "operation": "text_to_image",
  "prompt": "A short calm synthetic test.",
  "width": 1024,
  "height": 1024
}

qwen-image-3.0:image_edit

POST /franklab/api/make/alibaba/images

REST-полеТипОбязательноЗначения / условия
modelstringда"qwen-image-3.0"
operationstringда"image_edit"
promptstringда—
widthintegerдаMake default: 1024
heightintegerдаMake default: 1024
nintegerнетСервер default: 1
editImageUrlsstring[]условно1–3 прямых HTTPS URL; PNG/JPEG/WebP, ≤10 MiB каждый; без editImageIds.
editImageIdsstring[]условно1–3 UUID вашего аккаунта из data.storedFileId ответа загрузки; без editImageUrls.
seedintegerнет—
negative_promptstringнет—
prompt_extendbooleanнетMake default: false
enable_thinkingbooleanнетMake default: false
watermarkbooleanнетMake default: false

JSON-шаблон:

json
{
  "model": "qwen-image-3.0",
  "operation": "image_edit",
  "prompt": "Replace the background with a pale blue studio backdrop.",
  "width": 1024,
  "height": 1024,
  "editImageUrls": [
    "https://media.example.com/product-front.png"
  ]
}

estimate

Для оценки редактирования передайте выбранную модель, qwenOperation:"image_edit", imageCount, width, height и n. Оценка не скачивает изображения по URL.

Для оценки изображения передайте model=z-image-turbo|qwen-image-3.0-pro|qwen-image-3.0. Для HappyHorse-видео не передавайте model; для WAN используйте wan3.0-video. happyhorse-1.1 — значение переключателя Make, а не допустимое значение REST DTO.

POST /franklab/api/make/alibaba/estimate

REST-полеТипОбязательноЗначения / условия
mediastringда—
modelstringнет—
operationstringнет—
widthintegerнет—
heightintegerнет—
nintegerнет—
imageCountintegerнет—
resolutionstringнет—
durationSecondsintegerнет—
qwenOperationstringнетtext_to_image / image_edit; только оценка Qwen

JSON-шаблон:

json
{
  "media": "image",
  "model": "z-image-turbo"
}

JUPITER

Сначала выберите маршрут и модель. Поле Make mode выбирает маршрут и не передаётся в REST JSON. MIST использует model_name=mist, Kling — jupiter-v1-5; Gemini/Seedream — model_id; подписочные маршруты — execution_mode. Доступность каждого маршрута проверяется отдельно. Каталог моделей не гарантирует возможность генерации.

Формы референсов различаются: MIST/Kling/Gemini — image_list:[{"image_url":"https://…"}]; Seedream — image:["https://…"]; подписочные маршруты — reference_images:["https://…"]; прежний Nano Banana Pro — image_input:["https://…"]; редактирование Grok — image:{"url":"https://…"}. Подходят прямые публичные HTTPS-ссылки; предварительная загрузка необязательна. Для Kling (model_name:"jupiter-v1-5") укажите каждое изображение из image_list в prompt: <<<image_1>>>, <<<image_2>>> и далее по порядку массива. MIST не требует этих маркеров.

Сохраняйте маршрут отправки вместе с data.task_id/data.taskId. Обычно статус получается добавлением /:taskId; прежний Nano Banana Pro использует /v1/google/:taskId/record-info. Не отправляйте Gemini/Seedream ID в omni-image poller. Опрос — примерно раз в 5 секунд, с ограничением времени. Проверяйте data.status, task_status или state; успешные значения включают completed, succeed, success, succeeded, done. При failed/refunded/cancelled опрос прекращается. Истечение времени ожидания не разрешает повторную генерацию.

Изображения могут находиться в data.images, data.task_result.images, data.result.task_result.images, data.output.images, data.output.imageUrls; старые ответы содержат JSON-строку data.resultJson с resultUrls. Gemini также возвращает output_text, grounding, citations, search_suggestions, interaction_id. Поле Make image_url — производная проекция, а не универсальная форма REST. final_cost_franks при cost_status=reserved ещё означает резерв.

ДействиеМетодПуть
mistPOST/franklab/api/v1/images/omni-image
mist_2_5POST/franklab/api/v1/images/omni-image
gpt_image_codexPOST/franklab/api/v1/images/gpt-image-codex
google_sub_imagePOST/franklab/api/v1/images/google-sub
jupiterPOST/franklab/api/v1/images/omni-image
xai_imagine_image_2POST/franklab/api/v1/images/xai-imagine
xai_imagine_imagePOST/franklab/api/v1/images/xai-imagine
google_gemini_imagePOST/franklab/api/v1/google/gemini-image
seedream_imagePOST/franklab/api/v1/images/seedream-image
google_nano_banana_proPOST/franklab/api/v1/google/nano-banana-pro
poll:v1/google/:taskId/record-infoGET/franklab/api/v1/google/:taskId/record-info
poll:v1/google/gemini-image/:taskIdGET/franklab/api/v1/google/gemini-image/:taskId
poll:v1/images/google-sub/:taskIdGET/franklab/api/v1/images/google-sub/:taskId
poll:v1/images/gpt-image-codex/:taskIdGET/franklab/api/v1/images/gpt-image-codex/:taskId
poll:v1/images/omni-image/:taskIdGET/franklab/api/v1/images/omni-image/:taskId
poll:v1/images/seedream-image/:taskIdGET/franklab/api/v1/images/seedream-image/:taskId
poll:v1/images/xai-imagine/:taskIdGET/franklab/api/v1/images/xai-imagine/:taskId

mist

POST /franklab/api/v1/images/omni-image

Опрос: GET /franklab/api/v1/images/omni-image/:taskId.

REST-полеТипОбязательноЗначения / условия
model_namestringда"mist"
qualitystringнет["auto","low","medium","high"]; Make default: "auto"
output_formatstringнет["png","jpeg","webp"]; Make default: "png"
backgroundstringнет["auto","opaque"]; Make default: "auto"
moderationstringнет["auto","low"]; Make default: "auto"
partial_imagesstringнет[0,1,2,3]; Make default: 0
input_fidelitystringнет["high","auto"]; Make default: "high"
promptstringда—
image_listarrayнетimage_url:string
aspect_ratiostringнет["1:1","16:9","9:16","21:9","custom"]; Make default: "1:1"
custom_aspect_ratiostringнетПри aspect_ratio=custom
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_name": "mist",
  "prompt": "Place this product on a wooden table.",
  "image_list": [{"image_url": "https://media.example.com/product-front.png"}]
}

mist_2_5 (GPT Image 2.5)

POST /franklab/api/v1/images/omni-image — тот же маршрут и поллинг, что mist; модель выбирается значением model_name.

REST-полеТипОбязательноЗначения / условия
model_namestringда"gpt-image-2.5-sunburst" (максимум качества) или "gpt-image-2.5-flare" (~2x быстрее); биллинг вариантов одинаков
qualitystringнет["auto","low","medium","high","xhigh","max"] — xhigh/max новые тиры 2.5; Make default: "auto"
output_formatstringнет["png","jpeg","webp"]; Make default: "png"
backgroundstringнет["auto","opaque","transparent"] — transparent полностью поддержан и требует png/webp; Make default: "auto"
moderationstringнет["auto","low"]; Make default: "auto"
partial_imagesstringнет[0,1,2,3]; Make default: 0
input_fidelity——НЕ поддерживается 2.5 (OpenAI: omit for gpt-image-2 and later) — 400
promptstringда—
image_listarrayнетдо 16 референсов image_url:string (режим правки)
aspect_ratiostringнет["1:1","16:9","9:16","21:9","custom"]; Make default: "1:1"
custom_aspect_ratiostringнетПри aspect_ratio=custom
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_name": "gpt-image-2.5-sunburst",
  "prompt": "Place this product on a wooden table, photorealistic.",
  "quality": "xhigh",
  "output_format": "webp",
  "background": "transparent"
}

gpt_image_codex

POST /franklab/api/v1/images/gpt-image-codex

Опрос: GET /franklab/api/v1/images/gpt-image-codex/:taskId.

REST-полеТипОбязательноЗначения / условия
execution_modestringда"openai_codex"
modelstringнет["gpt-image-2","gpt-image-2.5-flare","gpt-image-2.5-sunburst"]; Make default: "gpt-image-2". Алиас: model_name (приоритет: первое непустое из model/model_name; пустая строка считается отсутствием). Неизвестное значение → 400
qualitystringнет["low","medium","high"]; Make default: "medium"
promptstringда—
reference_imagesarrayнетitems: string
aspect_ratiostringнет["1:1","16:9","9:16","custom"]; Make default: "1:1"
custom_aspect_ratiostringнетПри aspect_ratio=custom
callback_urlstringнет—
external_task_idstringнет—

Примечания к model:

  • Цена не зависит от модели: тариф определяется только тиром quality. Выбор 2.5 не меняет сумму списания.
  • Тиры на этой поверхности — только low/medium/high. xhigh/max не поддерживаются; неизвестный quality молча сводится к medium (сохранённое поведение поверхности).
  • Прозрачный фон на codex-маршруте недоступен ни для одной из 2.5-моделей — ограничение провайдера, а не нашей валидации.
  • size/точный пиксельный размер codex-бэкендом игнорируется: aspect_ratio остаётся рекомендацией.
  • Если подписочный маршрут временно не может исполнить 2.5, приходит типизированный 503 ДО резерва — списания не происходит. Запросы без model этим не затрагиваются.

JSON-шаблон:

json
{
  "execution_mode": "openai_codex",
  "prompt": "A short calm synthetic test."
}

google_sub_image

POST /franklab/api/v1/images/google-sub

Опрос: GET /franklab/api/v1/images/google-sub/:taskId.

REST-полеТипОбязательноЗначения / условия
execution_modestringда"google_subscription"
promptstringда—
reference_imagesarrayнетitems: string
aspect_ratiostringнет["1:1","16:9","9:16","4:3","3:4"]; Make default: "1:1"
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "execution_mode": "google_subscription",
  "prompt": "A short calm synthetic test."
}

jupiter

POST /franklab/api/v1/images/omni-image

Опрос: GET /franklab/api/v1/images/omni-image/:taskId.

REST-полеТипОбязательноЗначения / условия
model_namestringда"jupiter-v1-5"
resolutionstringда["1k","2k","4k"]; Make default: "1k"
result_typestringнет["single","series"]; Make default: "single"
series_amountinteger or stringнет["auto",2,3,4,5,6,7,8,9]; Make default: "auto"; При result_type=series
promptstringда—
nnumberнетMake default: 1
image_listarrayнетimage_url:string
element_listarrayнетelement_id:string
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","21:9","custom"]; Make default: "auto"
custom_aspect_ratiostringнетПри aspect_ratio=custom
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_name": "jupiter-v1-5",
  "resolution": "1k",
  "prompt": "Place the product from <<<image_1>>> on a wooden table.",
  "image_list": [{"image_url": "https://media.example.com/product-front.png"}]
}

xai_imagine_image_2

POST /franklab/api/v1/images/xai-imagine

Опрос: GET /franklab/api/v1/images/xai-imagine/:taskId.

REST-полеТипОбязательноЗначения / условия
model_namestringда"xai-imagine-image-2"
response_formatstringда"url"
promptstringда—
qualitystringда["medium","low"]; Make default: "medium"
aspect_ratiostringда["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","2:1","1:2","19.5:9","9:19.5","20:9","9:20"]; Make default: "auto"
resolutionstringда["1k","2k"]; Make default: "1k"
nnumberдаMake default: 1
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_name": "xai-imagine-image-2",
  "response_format": "url",
  "prompt": "A short calm synthetic test.",
  "quality": "medium",
  "aspect_ratio": "auto",
  "resolution": "1k",
  "n": 1
}

xai_imagine_image

POST /franklab/api/v1/images/xai-imagine

Опрос: GET /franklab/api/v1/images/xai-imagine/:taskId.

REST-полеТипОбязательноЗначения / условия
model_namestringда"xai-imagine-image-quality"
response_formatstringда"url"
execution_modestringнет["xai_api","supergrok"]; Make default: "xai_api"
promptstringда—
imageobjectнетПри image edit requested; url:string
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4"]; Make default: "auto"
resolutionstringнет["1k","2k"]; Make default: "1k"
nnumberнетMake default: 1
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_name": "xai-imagine-image-quality",
  "response_format": "url",
  "prompt": "A short calm synthetic test."
}

google_gemini_image

POST /franklab/api/v1/google/gemini-image

Опрос: GET /franklab/api/v1/google/gemini-image/:taskId.

REST-полеТипОбязательноЗначения / условия
model_idstringда["gemini-3.1-flash-image","gemini-3.1-flash-lite-image","gemini-3-pro-image","gemini-2.5-flash-image"]; Make default: "gemini-3.1-flash-image"
promptstringпо условиюПри model_id=gemini-3.1-flash-image
image_listarrayнетПри model_id=gemini-3.1-flash-image; image_url:string
video_urlstringнетПри model_id=gemini-3.1-flash-image
previous_interaction_idstringнетПри model_id=gemini-3.1-flash-image
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","4:5","5:4","1:4","1:8","4:1","8:1","21:9"]; Make default: "auto"; При model_id=gemini-3.1-flash-image
image_sizestringнет["0.5K","1K","2K","4K"]; Make default: "1K"; При model_id=gemini-3.1-flash-image
output_formatstringнет["png","jpeg","webp"]; Make default: "png"; При model_id=gemini-3.1-flash-image
use_google_searchbooleanнетMake default: false; При model_id=gemini-3.1-flash-image
use_image_searchbooleanнетMake default: false; При model_id=gemini-3.1-flash-image
promptstringпо условиюПри model_id=gemini-3.1-flash-lite-image
image_listarrayнетПри model_id=gemini-3.1-flash-lite-image; image_url:string
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","4:5","5:4","21:9"]; Make default: "auto"; При model_id=gemini-3.1-flash-lite-image
output_formatstringнет["png","jpeg","webp"]; Make default: "png"; При model_id=gemini-3.1-flash-lite-image
promptstringпо условиюПри model_id=gemini-3-pro-image
image_listarrayнетПри model_id=gemini-3-pro-image; image_url:string
previous_interaction_idstringнетПри model_id=gemini-3-pro-image
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","4:5","5:4","21:9"]; Make default: "auto"; При model_id=gemini-3-pro-image
image_sizestringнет["1K","2K","4K"]; Make default: "1K"; При model_id=gemini-3-pro-image
output_formatstringнет["png","jpeg","webp"]; Make default: "png"; При model_id=gemini-3-pro-image
use_google_searchbooleanнетMake default: false; При model_id=gemini-3-pro-image
promptstringпо условиюПри model_id=gemini-2.5-flash-image
image_listarrayнетПри model_id=gemini-2.5-flash-image; image_url:string
aspect_ratiostringнет["auto","1:1","16:9","9:16","4:3","3:4","3:2","2:3","4:5","5:4","21:9"]; Make default: "auto"; При model_id=gemini-2.5-flash-image
output_formatstringнет["png","jpeg","webp"]; Make default: "png"; При model_id=gemini-2.5-flash-image
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_id": "gemini-3.1-flash-image",
  "prompt": "A flat blue circle on white.",
  "image_size": "0.5K"
}

seedream_image

POST /franklab/api/v1/images/seedream-image

Опрос: GET /franklab/api/v1/images/seedream-image/:taskId.

REST-полеТипОбязательноЗначения / условия
model_idstringда["seedream-5-0-lite","seedream-5-0-pro"]; Make default: "seedream-5-0-lite"
promptstringпо условиюПри model_id=seedream-5-0-lite
imagearrayнетПри model_id=seedream-5-0-lite; items: string
sequential_image_generationstringнет["disabled","auto"]; Make default: "disabled"; При model_id=seedream-5-0-lite
max_imagesstringнет[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; Make default: 4; При model_id=seedream-5-0-lite; sequential_image_generation=auto
resolutionstringпо условию["2K","3K","4K"]; Make default: "2K"; При model_id=seedream-5-0-lite
aspect_ratiostringнет["","1:1","4:3","3:4","16:9","9:16","3:2","2:3","21:9"]; Make default: ""; При model_id=seedream-5-0-lite
output_formatstringнет["jpeg","png"]; Make default: "jpeg"; При model_id=seedream-5-0-lite
watermarkbooleanнетMake default: false; При model_id=seedream-5-0-lite
promptstringпо условиюПри model_id=seedream-5-0-pro
imagearrayнетПри model_id=seedream-5-0-pro; items: string
resolutionstringпо условию["1K","2K"]; Make default: "2K"; При model_id=seedream-5-0-pro
aspect_ratiostringнет["","1:1","4:3","3:4","16:9","9:16","3:2","2:3","21:9"]; Make default: ""; При model_id=seedream-5-0-pro
output_formatstringнет["jpeg","png"]; Make default: "jpeg"; При model_id=seedream-5-0-pro
watermarkbooleanнетMake default: false; При model_id=seedream-5-0-pro
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "model_id": "seedream-5-0-lite",
  "prompt": "A flat blue circle on white.",
  "resolution": "2K"
}

google_nano_banana_pro

POST /franklab/api/v1/google/nano-banana-pro

Опрос: GET /franklab/api/v1/google/:taskId/record-info.

REST-полеТипОбязательноЗначения / условия
image_inputarrayнетitems: string
promptstringнет—
aspect_ratiostringнет["1:1","9:16","16:9","3:4","4:3"]
resolutionstringда["1K","2K","4K"]; Make default: "1K"
output_formatstringнет["png","jpg"]; Make default: "png"
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "resolution": "1K",
  "prompt": "A blue circle on white."
}

poll:v1/google/:taskId/record-info

GET /franklab/api/v1/google/:taskId/record-info

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/google/gemini-image/:taskId

GET /franklab/api/v1/google/gemini-image/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/images/google-sub/:taskId

GET /franklab/api/v1/images/google-sub/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/images/gpt-image-codex/:taskId

GET /franklab/api/v1/images/gpt-image-codex/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/images/omni-image/:taskId

GET /franklab/api/v1/images/omni-image/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/images/seedream-image/:taskId

GET /franklab/api/v1/images/seedream-image/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

poll:v1/images/xai-imagine/:taskId

GET /franklab/api/v1/images/xai-imagine/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

KUSOK v.2

Все 16 действий используют POST /make/kusok/operation с backend и action. backend=kusok управляет элементами и голосами, backend=moon — верификацией и Moon assets. Для KUSOK старые сервисные ключи отклоняются. Идентификаторы принадлежат аккаунту; ID задачи, элемента, asset и голоса не взаимозаменяемы.

Создание требует element_name (1–20 символов), element_description (до 100) и reference_type. Для image_refer передайте собственное frontal_image и при необходимости refer_images:[{"image_url":"…","type":"side"}]; для video_refer — refer_videos:[{"video_url":"…"}]. Создание голоса требует аудио/видео, которое вы вправе использовать. Для проверок интеграции используйте синтетические материалы.

Следуйте data.should_poll и data.taskId/task_id: create/recognize могут вернуть async-задачу, остальные действия имеют собственные ответы. Опрос /make/kusok/async/tasks/:taskId — до completed или failed, затем проверка data.result, error_message и пригодного element_id/результата распознавания. Ответ диспетчера poll_task лишь предписывает опрос, а не доказывает состояние очереди.

Moon verify_start запускает H5-верификацию человеком. Полученный токен передаётся в REST как byted_token, а не поле Make verification_token. verify_get_result: HTTP 200 — результат, 202 — ожидание, 409 — ошибка, 410 — срок истёк. Ссылки H5 и токены храните приватно. Для загрузки asset используйте подтверждённый group_id; до использования референса дождитесь Active. Удаление изменяет ресурсы и не служит проверкой подключения.

ДействиеМетодПуть
kusok:createPOST/franklab/api/make/kusok/operation
kusok:getPOST/franklab/api/make/kusok/operation
kusok:listPOST/franklab/api/make/kusok/operation
kusok:deletePOST/franklab/api/make/kusok/operation
kusok:recognizePOST/franklab/api/make/kusok/operation
kusok:poll_taskPOST/franklab/api/make/kusok/operation
kusok:create_voicePOST/franklab/api/make/kusok/operation
kusok:get_voicePOST/franklab/api/make/kusok/operation
kusok:list_voicesPOST/franklab/api/make/kusok/operation
kusok:list_preset_voicesPOST/franklab/api/make/kusok/operation
kusok:delete_voicePOST/franklab/api/make/kusok/operation
moon:verify_startPOST/franklab/api/make/kusok/operation
moon:verify_get_resultPOST/franklab/api/make/kusok/operation
moon:create_assetPOST/franklab/api/make/kusok/operation
moon:get_assetPOST/franklab/api/make/kusok/operation
moon:list_assetsPOST/franklab/api/make/kusok/operation
pollGET/franklab/api/make/kusok/async/tasks/:taskId
getAllKusoks RPCGET/franklab/api/make/kusok/elements

kusok:create

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"create"
element_namestringда—
element_descriptionstringда—
reference_typestringда["image_refer","video_refer"]; Make default: "image_refer"
frontal_imagestringнет—
refer_imagesarrayнетimage_url:string, type:string
refer_videosarrayнетvideo_url:string
element_voice_idstringнет—
tag_listarrayнетtag_id:string
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "create",
  "element_name": "Synthetic circle",
  "element_description": "A blue synthetic circle.",
  "reference_type": "image_refer",
  "frontal_image": "https://example.com/owned-synthetic-image.png"
}

kusok:get

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"get"
element_idstringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "get",
  "element_id": "REPLACE_WITH_OWNED_ELEMENT_ID"
}

kusok:list

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"list"
pageNumintegerнетMake default: 1
pageSizeintegerнетMake default: 200

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "list"
}

kusok:delete

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"delete"
element_idstringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "delete",
  "element_id": "REPLACE_WITH_OWNED_ELEMENT_ID"
}

kusok:recognize

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"recognize"
imagestringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "recognize",
  "image": "https://example.com/owned-synthetic-media.png"
}

kusok:poll_task

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"poll_task"
task_idstringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "poll_task",
  "task_id": "REPLACE_WITH_OWNED_TASK_ID"
}

kusok:create_voice

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"create_voice"
voice_namestringда—
voice_audio_listarrayнетaudio_url:string
voice_urlstringнет—
video_idstringнет—
source_task_idstringнет—
callback_urlstringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "create_voice",
  "voice_name": "Synthetic Voice",
  "voice_url": "https://example.com/owned-synthetic-audio.mp3"
}

kusok:get_voice

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"get_voice"
voice_idstringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "get_voice",
  "voice_id": "REPLACE_WITH_OWNED_VOICE_ID"
}

kusok:list_voices

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"list_voices"
pageNumintegerнетMake default: 1
pageSizeintegerнетMake default: 200

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "list_voices"
}

kusok:list_preset_voices

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"list_preset_voices"
pageNumintegerнетMake default: 1
pageSizeintegerнетMake default: 200

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "list_preset_voices"
}

kusok:delete_voice

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"kusok"
actionstringда"delete_voice"
voice_idstringда—

JSON-шаблон:

json
{
  "backend": "kusok",
  "action": "delete_voice",
  "voice_id": "REPLACE_WITH_OWNED_VOICE_ID"
}

moon:verify_start

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"moon"
actionstringда"verify_start"
callback_urlstringнет—
project_namestringнет—
external_task_idstringнет—

JSON-шаблон:

json
{
  "backend": "moon",
  "action": "verify_start"
}

moon:verify_get_result

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"moon"
actionstringда"verify_get_result"
byted_tokenstringда—
project_namestringнет—

JSON-шаблон:

json
{
  "backend": "moon",
  "action": "verify_get_result",
  "byted_token": "REPLACE_WITH_OWNED_BYTED_TOKEN"
}

moon:create_asset

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"moon"
actionstringда"create_asset"
group_idstringда—
urlstringда—
asset_typestringда["Image","Video","Audio"]; Make default: "Image"
namestringнет—
project_namestringнет—

JSON-шаблон:

json
{
  "backend": "moon",
  "action": "create_asset",
  "group_id": "REPLACE_WITH_OWNED_GROUP_ID",
  "url": "https://example.com/owned-synthetic-media.png",
  "asset_type": "Image"
}

moon:get_asset

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"moon"
actionstringда"get_asset"
asset_idstringда—
project_namestringнет—

JSON-шаблон:

json
{
  "backend": "moon",
  "action": "get_asset",
  "asset_id": "REPLACE_WITH_OWNED_ASSET_ID"
}

moon:list_assets

POST /franklab/api/make/kusok/operation

REST-полеТипОбязательноЗначения / условия
backendstringда"moon"
actionstringда"list_assets"
group_idstringнет—
statusesstringнет["Active","Processing","Failed"]
namestringнет—
pageNumberintegerнетMake default: 1
pageSizeintegerнетMake default: 20

JSON-шаблон:

json
{
  "backend": "moon",
  "action": "list_assets"
}

poll

GET /franklab/api/make/kusok/async/tasks/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

getAllKusoks RPC

GET /franklab/api/make/kusok/elements

REST-полеТипОбязательноЗначения / условия
pageNumintegerнетСервер default: 1; query
pageSizeintegerнетСервер default: 200; query

MOON GPT

Генерация текста, структурированного JSON и мультимодальных ответов через /make/dola. Нужен ключ партнёра; старые сервисные ключи получают 403. Получайте model_key и возможности моделей через GET /make/dola/models. По умолчанию выбирается moon_gpt; статический список ниже описывает исходный контракт, а не права аккаунта.

Обязателен prompt. Без REST async_mode запрос синхронный; передайте true, чтобы получить billing_task_id и опрашивать /make/dola/tasks/:billing_task_id. Пока data.cost_status=pending, продолжайте ограниченный опрос. Результат: output_text/content, parsed_json, json_parse_ok/json_parse_error, usage, conversation_id и поля списания. Завершённый биллинг сам по себе не подтверждает соответствие JSON вашей схеме.

Для response_format=json_schema нужны json_schema_name и JSON-объект json_schema, не строка. Поле Make max_tokens преобразуется в REST max_output_tokens; API принимает и max_tokens, но оба одновременно передавать не следует. Максимум зависит от модели и не превышает 65536. thinking_level и thinking_budget взаимоисключающие. Новые Gemini отклоняют temperature и прежний budget. Продолжение диалога сохраняет модель и собственный conversation_id либо поддерживаемый previous_response_id.

Загрузка URL: /files/from-url; загрузка файла: multipart file вместе с filename в /files/upload, максимум 100 МиБ. Затем запрашивайте /files/:file_id. JSON-вариант: base64 file_data, filename, необязательные mime_type/purpose; файл и base64 вместе запрещены. MIME: PDF, JPEG, PNG, GIF, WebP, MP4, QuickTime, AVI, octet-stream. Встроенные файловые объекты Make ограничены 48 КиБ. image_refs, document_refs, video_refs принимают HTTPS/data URI; ссылки file-* работают только с транспортом MOON GPT. Claude Fable 5.1 и GPT-6 Astra принимают изображения и PDF, но по умолчанию отключены независимыми rollout-флагами; это исходный контракт, а не утверждение о текущей готовности. Проверяйте поддержку модальности моделью и готовность файла. RPC JSON-схемы формирует поля редактора Make и не является REST endpoint.

ДействиеМетодПуть
generatePOST/franklab/api/make/dola/generate
upload_file_from_urlPOST/franklab/api/make/dola/files/from-url
upload_filePOST/franklab/api/make/dola/files/upload
get_fileGET/franklab/api/make/dola/files/:file_id
delete_fileDELETE/franklab/api/make/dola/files/:file_id
task_statusGET/franklab/api/make/dola/tasks/:billing_task_id
modelsGET/franklab/api/make/dola/models
list_filesGET/franklab/api/make/dola/files

generate

POST /franklab/api/make/dola/generate

REST-полеТипОбязательноЗначения / условия
promptstringда—
async_modebooleanнетMake default: true
system_promptstringнет—
model_keystringнет["moon_gpt","gemini_4_argon", "gemini_3_8_flash","gemini_3_7_flash","gemini_3_5_flash","gemini_3_6_flash","gemini_3_5_flash_lite","opus","sonnet","fable_5_1","gpt","gpt5_5","gpt56_sol","gpt56_terra","gpt56_luna","gpt6_astra","deepseek_pro","deepseek_flash","kimi","grok","alibaba_qwen3_7_max_2026_06_08","alibaba_qwen3_7_plus_2026_05_26"]
previous_response_idstringнетПри model_key=moon_gpt
image_refsarrayнетПри model_key=moon_gpt; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=moon_gpt; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=moon_gpt; items: text
conversation_modebooleanнетMake default: false; При model_key=moon_gpt
conversation_idstringнетПри model_key=moon_gpt
deepwiki_enabledbooleanнетMake default: false; При model_key=moon_gpt
image_refsarrayнетПри model_key=gemini_3_7_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gemini_3_7_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=gemini_3_7_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
thinking_levelstringнет["minimal","low","medium","high"]; При model_key=gemini_3_7_flash
image_refsarrayнетПри model_key=gemini_3_5_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gemini_3_5_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=gemini_3_5_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
thinking_levelstringнет["minimal","low","medium","high"]; При model_key=gemini_3_5_flash
thinking_budgetintegerнетПри model_key=gemini_3_5_flash
image_refsarrayнетПри model_key=gemini_3_6_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gemini_3_6_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=gemini_3_6_flash; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
thinking_levelstringнет["minimal","low","medium","high"]; При model_key=gemini_3_6_flash
image_refsarrayнетПри model_key=gemini_3_5_flash_lite; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gemini_3_5_flash_lite; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=gemini_3_5_flash_lite; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
thinking_levelstringнет["minimal","low","medium","high"]; При model_key=gemini_3_5_flash_lite
image_refsarrayнетПри model_key=opus; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=opus; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=sonnet; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=sonnet; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt5_5; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt5_5; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt56_sol; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt56_sol; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt56_terra; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt56_terra; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt56_luna; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt56_luna; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=kimi; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
video_refsarrayнетПри model_key=kimi; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=grok; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=fable_5_1; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=fable_5_1; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
image_refsarrayнетПри model_key=gpt6_astra; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
document_refsarrayнетПри model_key=gpt6_astra; source_type:string, value:string, file_name:string, file_data:string (base64), data_url:string; items: collection
response_formatstringнет["text","json_object","json_schema"]; Make default: "text"
json_schema_namestringпо условиюПри response_format=json_schema
json_schemaobjectпо условиюПри response_format=json_schema
max_output_tokensintegerнетMake default: 8192
temperaturenumberнетMake default: 0.7; При model_key=moon_gpt
temperaturenumberнетMake default: 0.7; При model_key=gemini_3_5_flash

JSON-шаблон:

json
{
  "model_key": "moon_gpt",
  "prompt": "Return the word OK.",
  "max_output_tokens": 16,
  "async_mode": true
}

upload_file_from_url

POST /franklab/api/make/dola/files/from-url

REST-полеТипОбязательноЗначения / условия
urlstringда—
filenamestringнет—
purposestringнетMake default: "user_data"

JSON-шаблон:

json
{
  "url": "https://example.com/owned-synthetic-media.png"
}

upload_file

POST /franklab/api/make/dola/files/upload

REST-полеТипОбязательноЗначения / условия
filenamestringда—
file_datastringнет—
filebinaryнет—
mime_typestringнет—
purposestringнет—

JSON-шаблон:

json
{
  "filename": "synthetic.png",
  "mime_type": "image/png",
  "file_data": "REPLACE_WITH_BASE64"
}
bash
curl --fail-with-body --max-time 120 -X POST \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your account key}" \
  -F 'file=@./synthetic.png' -F 'filename=synthetic.png' \
  "$FRANKLAB_BASE_URL/make/dola/files/upload"

get_file

GET /franklab/api/make/dola/files/:file_id

REST-полеТипОбязательноЗначения / условия
file_idstringдаpath

delete_file

DELETE /franklab/api/make/dola/files/:file_id

REST-полеТипОбязательноЗначения / условия
file_idstringдаpath

task_status

GET /franklab/api/make/dola/tasks/:billing_task_id

REST-полеТипОбязательноЗначения / условия
billing_task_idstringдаpath

models

GET /franklab/api/make/dola/models

Тело и параметры не требуются.

list_files

GET /franklab/api/make/dola/files

Тело и параметры не требуются.

ORKESTR

lyrics временно недоступна. Если задача уже создана и опрос остаётся в processing, обратитесь в поддержку с её ID перед повторной отправкой.

18 операций музыки/текста/обработки и опрос. Выбирайте путь запроса; поле Make operation в JSON не передаётся. Требуется ключ партнёра; старые сервисные ключи отклоняются. Большинство Suno-операций принимают model: V5, V4_5PLUS, V4_5ALL, V4_5, V4. Только generate добавляет по умолчанию V5, customMode=false, instrumental=false.

REST taskId соответствует Make sourceTaskId, name/description — personaName/personaDescription. Передавайте ID собственных исходных задач и аудио из предыдущих результатов, а не промпт или произвольный UUID. Для upload-cover/extend/mashup передайте прямые HTTPS-ссылки на разрешённые к использованию файлы в uploadUrl/uploadUrl1/uploadUrl2. При customMode=true заполните поля текста, стиля и названия согласно выбранной модели. continueAt, infillStartS, infillEndS, vocalStart, vocalEnd измеряются в секундах; интервалы должны быть упорядочены и находиться внутри исходного аудио. Callback-маршрут задаётся сервисом.

Сохраните FrankLab data.taskId; опрашивайте /make/orkestr/v2/tasks/:taskId примерно раз в 5 секунд, ограничивая время. queued/processing — ожидание, completed/failed — остановка. Проверяйте data.result и data.error. Медиа обычно находятся в data.result.task_result.audios, .videos, .images; lyrics/style возвращают текст/JSON, а не обязательную ссылку на аудио. timestamped_lyrics, boost_style, generate_persona возвращают результат сразу. Поля track1_*/track2_* — проекции Make, не универсальные REST-поля.

Lyria: model=clip или pro. Clip имеет фиксированную длину 30 секунд; pro создаёт полный трек и воспринимает duration_seconds как пожелание, а не точную длину. Дополнительно поддерживается output_format=mp3|wav. Результат: data.audio_url, lyrics_text, duration_seconds, interaction_id. Стоимость зависит от аккаунта; отсутствие отдельного estimate-маршрута или final-cost поля не означает бесплатность.

ДействиеМетодПуть
pollGET/franklab/api/make/orkestr/v2/tasks/:taskId
generatePOST/franklab/api/make/orkestr/v2/generate
extendPOST/franklab/api/make/orkestr/v2/extend
upload_coverPOST/franklab/api/make/orkestr/v2/upload-cover
upload_extendPOST/franklab/api/make/orkestr/v2/upload-extend
add_instrumentalPOST/franklab/api/make/orkestr/v2/add-instrumental
add_vocalsPOST/franklab/api/make/orkestr/v2/add-vocals
replace_sectionPOST/franklab/api/make/orkestr/v2/replace-section
mashupPOST/franklab/api/make/orkestr/v2/mashup
lyricsPOST/franklab/api/make/orkestr/v2/lyrics
timestamped_lyricsPOST/franklab/api/make/orkestr/v2/timestamped-lyrics
separate_vocalsPOST/franklab/api/make/orkestr/v2/separate-vocals
generate_midiPOST/franklab/api/make/orkestr/v2/generate-midi
convert_wavPOST/franklab/api/make/orkestr/v2/convert-wav
music_videoPOST/franklab/api/make/orkestr/v2/music-video
cover_imagePOST/franklab/api/make/orkestr/v2/cover-image
boost_stylePOST/franklab/api/make/orkestr/v2/boost-style
generate_personaPOST/franklab/api/make/orkestr/v2/generate-persona
lyria_musicPOST/franklab/api/make/orkestr/v2/lyria-music

poll

GET /franklab/api/make/orkestr/v2/tasks/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

generate

POST /franklab/api/make/orkestr/v2/generate

REST-полеТипОбязательноЗначения / условия
modelstringда["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
customModebooleanнет—
instrumentalbooleanнет—
promptstringда—
stylestringнет—
titlestringнет—
negativeTagsstringнет—
vocalGenderstringнет["f","m"]
styleWeightnumberнет—
weirdnessConstraintnumberнет—
audioWeightnumberнет—
personaIdstringнет—

JSON-шаблон:

json
{
  "model": "V5",
  "prompt": "A short calm synthetic test."
}

extend

POST /franklab/api/make/orkestr/v2/extend

REST-полеТипОбязательноЗначения / условия
audioIdstringда—
defaultParamFlagbooleanнет—
modelstringда["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
continueAtnumberнет—
promptstringнет—
stylestringнет—
titlestringнет—
negativeTagsstringнет—
vocalGenderstringнет["f","m"]
personaIdstringнет—

JSON-шаблон:

json
{
  "audioId": "REPLACE_WITH_OWNED_AUDIOID",
  "model": "V5"
}

upload_cover

POST /franklab/api/make/orkestr/v2/upload-cover

REST-полеТипОбязательноЗначения / условия
uploadUrlstringда—
modelstringда["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
customModebooleanнет—
instrumentalbooleanнет—
promptstringнет—
stylestringнет—
titlestringнет—
negativeTagsstringнет—
vocalGenderstringнет["f","m"]
personaIdstringнет—

JSON-шаблон:

json
{
  "uploadUrl": "https://example.com/owned-synthetic-audio.mp3",
  "model": "V5"
}

upload_extend

POST /franklab/api/make/orkestr/v2/upload-extend

REST-полеТипОбязательноЗначения / условия
uploadUrlstringда—
modelstringда["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
defaultParamFlagbooleanнет—
instrumentalbooleanнет—
continueAtnumberда—
promptstringнет—
stylestringнет—
titlestringнет—
negativeTagsstringнет—
vocalGenderstringнет["f","m"]
personaIdstringнет—

JSON-шаблон:

json
{
  "uploadUrl": "https://example.com/owned-synthetic-audio.mp3",
  "model": "V5",
  "continueAt": 1
}

add_instrumental

POST /franklab/api/make/orkestr/v2/add-instrumental

REST-полеТипОбязательноЗначения / условия
uploadUrlstringда—
titlestringда—
tagsstringда—
negativeTagsstringнет—
modelstringнет["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
vocalGenderstringнет["f","m"]

JSON-шаблон:

json
{
  "uploadUrl": "https://example.com/owned-synthetic-audio.mp3",
  "title": "Synthetic test",
  "tags": "REPLACE_WITH_OWNED_TAGS"
}

add_vocals

POST /franklab/api/make/orkestr/v2/add-vocals

REST-полеТипОбязательноЗначения / условия
uploadUrlstringда—
promptstringда—
titlestringда—
stylestringда—
negativeTagsstringнет—
modelstringнет["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
vocalGenderstringнет["f","m"]

JSON-шаблон:

json
{
  "uploadUrl": "https://example.com/owned-synthetic-audio.mp3",
  "prompt": "A short calm synthetic test.",
  "title": "Synthetic test",
  "style": "REPLACE_WITH_OWNED_STYLE"
}

replace_section

POST /franklab/api/make/orkestr/v2/replace-section

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—
promptstringда—
tagsstringда—
titlestringда—
infillStartSnumberда—
infillEndSnumberда—
negativeTagsstringнет—
fullLyricsstringнет—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID",
  "prompt": "A short calm synthetic test.",
  "tags": "REPLACE_WITH_OWNED_TAGS",
  "title": "Synthetic test",
  "infillStartS": 1,
  "infillEndS": 2
}

mashup

POST /franklab/api/make/orkestr/v2/mashup

REST-полеТипОбязательноЗначения / условия
uploadUrl1stringда—
uploadUrl2stringда—
modelstringда["V5","V4_5PLUS","V4_5ALL","V4_5","V4"]
customModebooleanнет—
instrumentalbooleanнет—
promptstringнет—
stylestringнет—
titlestringнет—
negativeTagsstringнет—
vocalGenderstringнет["f","m"]

JSON-шаблон:

json
{
  "uploadUrl1": "https://example.com/owned-synthetic-audio.mp3",
  "uploadUrl2": "https://example.com/owned-synthetic-audio-2.mp3",
  "model": "V5"
}

lyrics

POST /franklab/api/make/orkestr/v2/lyrics

Временно недоступна. Сохраните ID уже созданной задачи для поддержки; для создания песни используйте generate выше.

timestamped_lyrics

POST /franklab/api/make/orkestr/v2/timestamped-lyrics

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID"
}

separate_vocals

POST /franklab/api/make/orkestr/v2/separate-vocals

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—
typestringда["separate_vocal","split_stem"]

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID",
  "type": "separate_vocal"
}

generate_midi

POST /franklab/api/make/orkestr/v2/generate-midi

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringнет—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID"
}

convert_wav

POST /franklab/api/make/orkestr/v2/convert-wav

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID"
}

music_video

POST /franklab/api/make/orkestr/v2/music-video

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—
authorstringнет—
domainNamestringнет—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID"
}

cover_image

POST /franklab/api/make/orkestr/v2/cover-image

REST-полеТипОбязательноЗначения / условия
taskIdstringда—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID"
}

boost_style

POST /franklab/api/make/orkestr/v2/boost-style

REST-полеТипОбязательноЗначения / условия
contentstringда—

JSON-шаблон:

json
{
  "content": "A short calm synthetic test."
}

generate_persona

POST /franklab/api/make/orkestr/v2/generate-persona

REST-полеТипОбязательноЗначения / условия
taskIdstringда—
audioIdstringда—
namestringда—
descriptionstringда—
vocalStartnumberнет—
vocalEndnumberнет—
stylestringнет—

JSON-шаблон:

json
{
  "taskId": "REPLACE_WITH_OWNED_TASKID",
  "audioId": "REPLACE_WITH_OWNED_AUDIOID",
  "name": "Synthetic test",
  "description": "REPLACE_WITH_OWNED_DESCRIPTION"
}

lyria_music

POST /franklab/api/make/orkestr/v2/lyria-music

REST-полеТипОбязательноЗначения / условия
modelstringда["clip","pro"]
promptstringда—
instrumentalbooleanнет—
lyricsstringнет—
languagestringнет—
genrestringнет—
erastringнет—
instrumentsstringнет—
song_structurestringнет—
timed_eventsstringнет—
vocal_profilestringнет—
key_scalestringнет—
moodstringнет—
duration_secondsnumberнет—
reference_imagesarrayнетimage_url:string; items: collection

JSON-шаблон:

json
{
  "model": "clip",
  "prompt": "Calm original instrumental piano.",
  "instrumental": true
}

VOLNA

Все 19 действий Make отправляются в POST /make/volna/tts. Всегда указывайте operation; для действий вне TTS оно обязательно. Выбор: диалог/TTS/Turbo ElevenLabs, TTS Google Gemini, Seed Audio, TTS Grok, распознавание, эффекты, изоляция, голоса, дубляж. Список голосов/моделей проверяет метаданные, а не генерацию аудио. Создание/дизайн/сохранение голоса и usage stats отклоняют старые сервисные ключи.

ElevenLabs voice_id берите из /v1/elevenlabs/voices-rpc, Grok — из /v1/xai/voices-rpc; результат RPC: data:[{id,name,…}]. Не придумывайте ID голоса. Google google_tts_mode=single использует google_voice_name; multi — speaker_1_name, speaker_1_voice, speaker_2_name, speaker_2_voice с совпадающими метками в text. Голос Grok по умолчанию — eve. xai_tts_settings и переключатели STT существуют только в интерфейсе Make.

STT и изоляция принимают собственный audio_url; дубляж — source_url и target_lang. Передавайте JSON boolean/number, а keyterm — массив строк. Для клонирования REST использует name/description (алиасы Make clone_name/clone_description нормализуются) и разрешённый file_url. Созданный дизайн сохраняется отдельным действием с voice_name/generated_voice_id.

Seed Audio: text_prompt до 3000 символов, максимум 3 references. Элемент задаёт reference_type=audio|image и один источник: speaker, audio_url, audio_data либо audio_file_data/audio_file_name; для изображений — соответствующие image-поля. Не передавайте все альтернативы одновременно. Формат mp3/wav/pcm/ogg_opus, частота 8000/16000/24000/32000/44100/48000. Темп/громкость -50..100, высота -12..12. Переключатель метаданных REST — boolean audio_aigc_metadata_enable, не Make audio_aigc_metadata_mode.

При наличии data.taskId опрашивайте /make/volna/tasks/:taskId примерно раз в 5 секунд до completed/failed; у синхронного результата/метаданных ID может отсутствовать. Проверяйте data.result, audio_url/audioUrl, resultUrl, text, words, segments, duration_seconds, доступные поля биллинга и транзакции. Make нормализует разные формы ответа. Тайм-аут платного запроса не разрешает повторную отправку.

ДействиеМетодПуть
text-to-dialoguePOST/franklab/api/make/volna/tts
text-to-speechPOST/franklab/api/make/volna/tts
text-to-speech-turboPOST/franklab/api/make/volna/tts
google-3-1-ttsPOST/franklab/api/make/volna/tts
seed-audio-1-0POST/franklab/api/make/volna/tts
xai-text-to-speechPOST/franklab/api/make/volna/tts
speech-to-textPOST/franklab/api/make/volna/tts
xai-speech-to-textPOST/franklab/api/make/volna/tts
google-speech-to-textPOST/franklab/api/make/volna/tts
sound-effectPOST/franklab/api/make/volna/tts
audio-isolationPOST/franklab/api/make/volna/tts
voice-listPOST/franklab/api/make/volna/tts
xai-voice-listPOST/franklab/api/make/volna/tts
voice-clonePOST/franklab/api/make/volna/tts
voice-designPOST/franklab/api/make/volna/tts
voice-design-savePOST/franklab/api/make/volna/tts
dubbingPOST/franklab/api/make/volna/tts
usage-statsPOST/franklab/api/make/volna/tts
models-listPOST/franklab/api/make/volna/tts
pollGET/franklab/api/make/volna/tasks/:taskId
getVoices RPCGET/franklab/api/v1/elevenlabs/voices-rpc
getGrokVoices RPCGET/franklab/api/v1/xai/voices-rpc

text-to-dialogue

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"text-to-dialogue"
textstringда—
voice_idstringда—
voice_id_2stringнет—
seednumberнет—

JSON-шаблон:

json
{
  "operation": "text-to-dialogue",
  "text": "A short calm synthetic test.",
  "voice_id": "REPLACE_WITH_OWNED_VOICE_ID"
}

text-to-speech

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"text-to-speech"
textstringда—
voice_idstringда—
model_idstringнет["eleven_multilingual_v2","eleven_flash_v2_5","eleven_v3"]
language_codestringнет—
stabilitynumberнет—
similarity_boostnumberнет—
stylenumberнет—
speednumberнет—
output_formatstringнет["mp3_44100_128","mp3_44100_192","pcm_16000","pcm_22050","pcm_44100"]

JSON-шаблон:

json
{
  "operation": "text-to-speech",
  "text": "A short calm synthetic test.",
  "voice_id": "REPLACE_WITH_OWNED_VOICE_ID"
}

text-to-speech-turbo

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"text-to-speech-turbo"
textstringда—
voice_idstringда—
language_codestringнет—
stabilitynumberнет—
similarity_boostnumberнет—
stylenumberнет—
speednumberнет—

JSON-шаблон:

json
{
  "operation": "text-to-speech-turbo",
  "text": "A short calm synthetic test.",
  "voice_id": "REPLACE_WITH_OWNED_VOICE_ID"
}

google-3-1-tts

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"google-3-1-tts"
google_tts_modestringда["single","multi"]
textstringпо условиюПри google_tts_mode=single
google_voice_namestringпо условию["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Puck","Pulcherrima","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"]; При google_tts_mode=single
style_promptstringнетПри google_tts_mode=single
output_formatstringнет["wav_24000_16","mp3_44100_128","mp3_44100_192","opus_48000_64"]; При google_tts_mode=single
request_idstringнетПри google_tts_mode=single
textstringпо условиюПри google_tts_mode=multi
speaker_1_namestringпо условиюПри google_tts_mode=multi
speaker_1_voicestringпо условию["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Puck","Pulcherrima","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"]; При google_tts_mode=multi
speaker_2_namestringпо условиюПри google_tts_mode=multi
speaker_2_voicestringпо условию["Achernar","Achird","Algenib","Algieba","Alnilam","Aoede","Autonoe","Callirrhoe","Charon","Despina","Enceladus","Erinome","Fenrir","Gacrux","Iapetus","Kore","Laomedeia","Leda","Orus","Puck","Pulcherrima","Rasalgethi","Sadachbia","Sadaltager","Schedar","Sulafat","Umbriel","Vindemiatrix","Zephyr","Zubenelgenubi"]; При google_tts_mode=multi
style_promptstringнетПри google_tts_mode=multi
output_formatstringнет["wav_24000_16","mp3_44100_128","mp3_44100_192","opus_48000_64"]; При google_tts_mode=multi
request_idstringнетПри google_tts_mode=multi

JSON-шаблон:

json
{
  "operation": "google-3-1-tts",
  "text": "Hello.",
  "google_tts_mode": "single",
  "google_voice_name": "Kore"
}

seed-audio-1-0

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"seed-audio-1-0"
text_promptstringда—
referencesarrayнетreference_type, speaker, audio_url/audio_data/audio_file_data, audio_file_name, image_url/image_data/image_file_data, image_file_name; items: collection
audio_formatstringнет["mp3","wav","pcm","ogg_opus"]; Make default: "mp3"
audio_sample_ratestringнет["8000","16000","24000","32000","44100","48000"]; Make default: "44100"
audio_speech_ratenumberнет—
audio_loudness_ratenumberнет—
audio_pitch_ratenumberнет—
audio_enable_subtitlebooleanнет—
audio_aigc_watermarkbooleanнет—
audio_aigc_metadata_enablebooleanнет[false,true]; Make default: false
audio_content_producerstringнетПри audio_aigc_metadata_enable=true
audio_produce_idstringнетПри audio_aigc_metadata_enable=true
audio_content_propagatorstringнетПри audio_aigc_metadata_enable=true
audio_propagate_idstringнетПри audio_aigc_metadata_enable=true

JSON-шаблон:

json
{
  "operation": "seed-audio-1-0",
  "text_prompt": "A short calm synthetic test."
}

xai-text-to-speech

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"xai-text-to-speech"
textstringда—
voice_idstringнетMake default: "eve"
languagestringнет["auto","ru","en","es","de","fr","it","ja","pt-BR"]; Make default: "auto"
output_formatstringнет["mp3_44100_128","mp3_44100_192","wav_24000","pcm_24000"]; Make default: "mp3_44100_128"
with_timestampsbooleanнет—
speedstringнет["0.8","0.9","1","1.1","1.2"]; Make default: "1"

JSON-шаблон:

json
{
  "operation": "xai-text-to-speech",
  "text": "Hello.",
  "voice_id": "eve",
  "output_format": "mp3_44100_128"
}

speech-to-text

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"speech-to-text"
audio_urlstringда—
language_codestringнет—
diarizebooleanнет—
num_speakersnumberнет—

JSON-шаблон:

json
{
  "operation": "speech-to-text",
  "audio_url": "https://example.com/owned-synthetic-audio.mp3"
}

xai-speech-to-text

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"xai-speech-to-text"
audio_urlstringда—
languagestringнет["auto","ru","en","es","de","fr","it","ja","pt-BR"]; Make default: "auto"
formatbooleanнет—
diarizebooleanнет—
filler_wordsbooleanнет—
chunked_recoverybooleanнет—
keytermarrayнетitems: string

JSON-шаблон:

json
{
  "operation": "xai-speech-to-text",
  "audio_url": "https://example.com/owned-synthetic-audio.mp3"
}

google-speech-to-text

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"google-speech-to-text"
audio_urlstringда—
language_codestringнет["auto","ru-RU","en-US","en-GB","de-DE","fr-FR","es-ES","it-IT","pt-BR","ja-JP","ko-KR","uk-UA"]; Make default: "auto"
diarizebooleanнет—
formatbooleanнет—
keytermarrayнетitems: string

JSON-шаблон:

json
{
  "operation": "google-speech-to-text",
  "audio_url": "https://example.com/owned-synthetic-audio.mp3"
}

sound-effect

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"sound-effect"
textstringда—
duration_secondsnumberнет—
prompt_influencenumberнет—

JSON-шаблон:

json
{
  "operation": "sound-effect",
  "text": "A short calm synthetic test."
}

audio-isolation

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"audio-isolation"
audio_urlstringда—

JSON-шаблон:

json
{
  "operation": "audio-isolation",
  "audio_url": "https://example.com/owned-synthetic-audio.mp3"
}

voice-list

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"voice-list"

JSON-шаблон:

json
{
  "operation": "voice-list"
}

xai-voice-list

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"xai-voice-list"

JSON-шаблон:

json
{
  "operation": "xai-voice-list"
}

voice-clone

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"voice-clone"
namestringда—
descriptionstringнет—
file_urlstringда—

JSON-шаблон:

json
{
  "operation": "voice-clone",
  "name": "Synthetic test",
  "file_url": "https://example.com/owned-synthetic-audio.mp3"
}

voice-design

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"voice-design"
voice_descriptionstringда—
design_textstringнет—
guidance_scalenumberнет—
should_enhancebooleanнет—

JSON-шаблон:

json
{
  "operation": "voice-design",
  "voice_description": "REPLACE_WITH_OWNED_VOICE_DESCRIPTION"
}

voice-design-save

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"voice-design-save"
voice_namestringда—
generated_voice_idstringда—
voice_descriptionstringнет—

JSON-шаблон:

json
{
  "operation": "voice-design-save",
  "voice_name": "REPLACE_WITH_OWNED_VOICE_NAME",
  "generated_voice_id": "REPLACE_WITH_OWNED_GENERATED_VOICE_ID"
}

dubbing

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"dubbing"
source_urlstringда—
target_langstringда—
source_langstringнет—
dubbing_namestringнет—
num_speakersnumberнет—

JSON-шаблон:

json
{
  "operation": "dubbing",
  "source_url": "https://example.com/owned-synthetic-audio.mp3",
  "target_lang": "en"
}

usage-stats

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"usage-stats"

JSON-шаблон:

json
{
  "operation": "usage-stats"
}

models-list

POST /franklab/api/make/volna/tts

REST-полеТипОбязательноЗначения / условия
operationstringда"models-list"

JSON-шаблон:

json
{
  "operation": "models-list"
}

poll

GET /franklab/api/make/volna/tasks/:taskId

REST-полеТипОбязательноЗначения / условия
taskIdstringдаpath

getVoices RPC

GET /franklab/api/v1/elevenlabs/voices-rpc

Тело и параметры не требуются.

getGrokVoices RPC

GET /franklab/api/v1/xai/voices-rpc

Тело и параметры не требуются.

Дополнительные маршруты подключения и результата

МодульМетод и путьПараметры
JUPITERGET /franklab/api/v1/images/omni-image—
KUSOK v.2GET /franklab/api/v1/general/advanced-custom-elements—
ORKESTRGET /franklab/api/v1/suno/generate/record-infotaskId (query)
VOLNAGET /franklab/api/make/volna/dubbing/:dubbingIddubbingId (path)
VOLNAGET /franklab/api/make/volna/dubbing/:dubbingId/audio/:languageCodedubbingId (path), languageCode (path)

Запрос подключения с несуществующим task ID может вернуть 404: это не проверка генерации. Для новых задач используйте статус-маршрут операции, которая вернула ID.

Далее

Выберите одну операцию, проверьте ключ/баланс/доступную оценку, выполните минимальный запрос со своими синтетическими данными и сохраните ID. Затем проверьте итоговый результат и списание. Порядок интеграции · Ошибки · Поддержка.

/docs/creative-api.md
Не нашли ответ?Связаться с поддержкой