К содержанию
Lumean API

Шаблоны обязательны для TTS

Голос живёт в шаблоне, а не в заказе. Как собрать config, чем отклониться от него на один заказ и почему один флаг решает больше, чем кажется.

Первое, обо что спотыкается интеграция озвучки: поля orders.voice_id не существует. Голос, модель, формат вывода и тонкие настройки живут в шаблоне; в заказе остаётся текст. Заказ TTS без template_id не создать — task_type: "tts" пройдёт валидацию и упадёт на резолве сервиса.

Порядок из двух шагов

BASE=https://api.lumean.app/api/public

# 1. Шаблон: сервис, модель, голос, настройки — один раз
curl -s -X POST "$BASE/templates" -H "X-API-KEY: $KEY" -d '{
  "service_key": "elevenlabs",
  "name": "My TTS",
  "config": {
    "tts_settings": {
      "mode": "mode_v1",
      "model_id": "eleven_multilingual_v2",
      "voice_id": "<VOICE_ID>",
      "advanced_voice_settings": true,
      "voice_settings": { "stability": 0.5, "similarity_boost": 0.75, "use_speaker_boost": true, "speed": 1.0 }
    }
  }
}'
# → data.id = <TEMPLATE_UUID>

# 2. Заказ: текст — в top-level input_text, НЕ в task_data
curl -s -X POST "$BASE/orders" -H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
  -d '{ "template_id": "<TEMPLATE_UUID>", "input_text": "Привет! Это тестовая озвучка." }'

task_data — форма для заказов без шаблона (sfx, music, voice_search): там лежит промпт. Штатные каналы текста TTS — input_text и .txt в input_files[], см. Текст озвучки.

Ловушка

Пресет прав automation не включает templates.write — только templates.read. Сценарий «создать шаблон → заказать TTS» на нём не проходится целиком: шаг 1 вернёт 403. Берите пресет full или добавьте право вручную. См. Аутентификацию.

Шаблон принадлежит аккаунту, а не ключу

Шаблон, созданный в веб-кабинете, годится для API, и наоборот: владелец — аккаунт, а не ключ. GET /templates по ключу видит те же шаблоны, что и кабинет. Чужой шаблон не откроется никаким ключом — 403 с reason: "template_access_denied".

403template_access_deniedtemplate_access_denied — нет доступа к шаблону
Что произошло
Доменный отказ создания заказа: HTTP 403, тело `{"success": false, "message": "…", "reason": "template_access_denied"}`. Заказ не создан.
Что сделать прямо сейчас
Проверить, что шаблон виден ключу. Владелец шаблона — аккаунт, а не конкретный ключ: шаблон, созданный в вебе, годится для API и наоборот, а вот чужой шаблон не откроется никаким ключом. Если шаблон свой — дело в правах: `automation` не включает `templates.write`, но `templates.read` в нём есть.
Открыть страницу кода

Что кладётся в config

Структуру config задаёт сервис из service_key, и угадывать её не нужно: справочник конфигурации отдаёт по каждому полю type, default, nullable и, по типу, options либо min/max/step.

GET/templates/config-options

Get Template Config Options

Ответ сгруппирован по секциям, но секция не всегда является путём в конфиге:

СервисПоказано в справочникеЧто принимают config / task_data
elevenlabs, heygen, lumimgtts_settings → model_id{"tts_settings": {"model_id": …}}
sfx, music, voice_searchsfx_settings → text{"text": …} — обёртка отбрасывается

Секция conditional_overrides описывает сужения по выбору: у не-v3 моделей ElevenLabs список языков режется с 73 значений до 29, а на v3-семействе stability принимает только 0.0, 0.5 и 1.0. Значение вне схемы → 422 при создании шаблона.

Флаг, без которого три настройки молча не работают

similarity_boost, style и use_speaker_boost действуют только при tts_settings.advanced_voice_settings: true. По умолчанию флаг false, и до движка озвучки доезжают лишь stability и speed.

Осторожно

Ошибки не будет. Три параметра сохранятся в шаблоне и пройдут валидацию (exclude_when снимает с них правила, а не значения), но на звук не повлияют: со стороны это выглядит как «настройка не работает». Ставьте флаг в том же объекте tts_settings.

Разовое отклонение — config_override

config_override в POST /orders — единственный способ поменять параметры под конкретный заказ, не создавая новый шаблон. Форма — тот же объект, что и config; применяется поверх template.config только к этому заказу.

{
  "template_id": "<TEMPLATE_UUID>",
  "input_text": "Тот же текст, другой голос.",
  "config_override": { "tts_settings": { "voice_id": "<OTHER_VOICE_ID>" } }
}

Три правила, которые стоят отладочного вечера:

  • Пути вне схемы сервиса отбрасываются молча — опечатка в ключе неотличима от «настройка не применилась»: ни 422, ни предупреждения.
  • Явный null стирает, а не значит «оставить как есть»: мерж идёт array_replace_recursive. Сказать «не трогать» можно только отсутствием ключа.
  • Работает только вместе с template_id — у template-less sfx/music параметры и так в task_data.

Правильно

Прислать только меняемые ключи: {"tts_settings": {"speed": 1.1}} — остальной конфиг шаблона сохранится.

Неправильно

Прислать всю форму целиком с null в незаполненных полях: voice_id и language_code будут стёрты для этого заказа.

Ключ generation_mode (абзацный режим) лежит не внутри tts_settings, а рядом, в корне: {"generation_mode": "paragraph"}. В справочнике его нет — тот описывает настройки сервиса. Режим влияет на цену: минимальный тарифицируемый объём считается по каждому абзацу.

Правка шаблона: config сливается, а не заменяется

Ловушка

Описание операции PUT/PATCH в OpenAPI утверждает, что «config заменяется целиком». Это неверно: конфиг сливается с текущим вглубь. Прямо противоположное сказано в описании тела того же запроса, и ему же соответствуют пример и ответ 200. Практическое следствие: ключ, который вы не прислали, останется прежним — вернуть его к значению по умолчанию правкой шаблона нельзя, только пересозданием.

Вторая ловушка того же запроса: service_key и config ходят парой. Одно без другого валидация не принимает — даже когда сервис вы не меняете, код придётся продублировать. PUT и PATCH ведут себя одинаково, а правка не затрагивает уже созданные заказы.

Если заказ TTS не создаётся

СимптомПричина
422, reason: "service_not_found"Отправлен task_type: "tts" вместо template_id
422 с полем в errorsШаблон удалён (удаление необратимо) либо config не прошёл схему
Настройки применились не всеadvanced_voice_settings: false или опечатка в config_override
POST/orders

Create Order

Скормить страницу ИИ

Открыть .mdllm.md

Обновлено 04.09.2026 · спека 0.0.1