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

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

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

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

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

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

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

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

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

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

Все пути ниже полные, начиная с /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

Доступность на 8 сентября 2026: проверка Z-Image Turbo вернула code:503 на этапе оценки, до создания задачи. Если оценка недоступна для вашего аккаунта, не переходите к генерации; уточните доступ в поддержке. Эта проверка не устанавливает доступность других моделей Alibaba.

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

Для редактирования Qwen передавайте editImageIds: 1–3 UUID StoredFile вашего аккаунта. URL, объекты Make {value} и file ID из MOON GPT не подходят. Обычная публичная загрузка возвращает URL, а не требуемое поле StoredFile ID; до редактирования получите собственный ID через поддерживаемый процесс работы с ассетами. Не придумывайте UUID. 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
editImageIdsarrayдаitems: string
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": "A short calm synthetic test.",
  "width": 1024,
  "height": 1024,
  "editImageIds": [
    "REPLACE_WITH_OWNED_STORED_FILE_UUID_V4"
  ]
}

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
editImageIdsarrayдаitems: string
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": "A short calm synthetic test.",
  "width": 1024,
  "height": 1024,
  "editImageIds": [
    "REPLACE_WITH_OWNED_STORED_FILE_UUID_V4"
  ]
}

estimate

Для оценки изображения передайте 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://…"}. URL собственных файлов получите по инструкции загрузки.

Сохраняйте маршрут отправки вместе с 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
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": "A short calm synthetic test."
}

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"
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нет

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": "A short calm synthetic test."
}

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_referrefer_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. Проверяйте поддержку модальности моделью и готовность файла. 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_3_7_flash","gemini_3_5_flash","gemini_3_6_flash","gemini_3_5_flash_lite","opus","sonnet","gpt","gpt5_5","gpt56_sol","gpt56_terra","gpt56_luna","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
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

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 8 сентября 2026 завершилась отказом из-за обязательного callback у поставщика; резерв возвращён, но публичный опрос продолжал показывать processing. Эта операция требует исправления. Не повторяйте отправку из-за зависшего статуса.

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/descriptionpersonaName/personaDescription. Передавайте ID собственных исходных задач и аудио из предыдущих результатов, а не промпт или произвольный UUID. Для upload-cover/extend/mashup нужны доступные URL собственных файлов 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

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

JSON-шаблон:

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

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; multispeaker_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
Не нашли ответ?Связаться с поддержкой