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

POST/orders/{order}/retry

Создаёт НОВЫЙ заказ с теми же параметрами (полный retry завершённого заказа).

Условия:

  • Исходный заказ в статусе completed или result_delivered, без failed-чанков.

Настройки нового заказа — снимок ИСХОДНОГО: конфиг шаблона на момент его создания и тот же config_override, а не текущее состояние шаблона; правка и удаление шаблона на повтор не влияют. Заказы, созданные до конца сентября 2026 года, снимка не имеют и повторяются по текущему шаблону. Если сохранённые настройки больше не проходят текущую схему сервиса — 400 с reason: retry_config_outdated: создайте заказ заново через POST /orders.

Это НЕ способ дотянуть partially_completed-заказ: такой статус здесь не принимается. Частично выполненный заказ доводят поштучно — item-level POST /orders/{order}/items/{item}/retry по каждому policy_flagged/failed чанку.

Биллинг: это полностью новый заказ с новой блокировкой средств. Новый заказ привязывается к вашему API-ключу, его стоимость учитывается в токен-квоте ключа (pre-check → 429 при превышении, заказ не создаётся).

Требуемое право ключа: orders.write.

На этой странице(5)

Параметры

Поля ввода живут прямо в строке запроса: подставьте значение — и получите готовый URL. Ниже — тип, обязательность и допустимые значения каждого параметра.

POSThttps://api.lumean.app/api/public/orders//retry
  • stringв путиобязательный

    UUID заказа — 36 символов вида 9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c, не число.

    Берётся из поля id: его возвращает POST /orders при создании и GET /orders в списке. Чужой заказ по вашему ключу не откроется — придёт 404.

    Значение подставляется прямо в строку запроса выше.

Тело запроса

application/json

Тело не обязательно. Поля нужны только для подтверждения PAYG-добора после ответа 402 в режиме отката к явному подтверждению; в норме добор списывается автоматически.

Обычный повтор
{}

Поля

confirm_payg_topupнеобязательное

Согласие на PAYG-добор для нового заказа — только в режиме отката к явному подтверждению (иначе игнорируется). Семантика та же, что у POST /orders: действует только вместе со свежим quote_token из ответа 402.

может быть nullпо умолчанию false
boolean
quote_tokenнеобязательное

Котировка добора из ответа 402 этого же запроса (только режим отката). Живёт ~60 секунд.

может быть null
string

Возможные ответы

201

Создан новый заказ с параметрами исходного. Исходный заказ не меняется.

Пример тела
{
  "success": true,
  "message": "Order retry created successfully.",
  "data": {
    "id": "d5e6f7a8-9b0c-4d1e-8f2a-3b4c5d6e7f8a",
    "user_id": 501,
    "template_id": "7e2a4c1d-8b3f-4a5e-9c6d-1f2e3a4b5c6d",
    "task_type": "tts",
    "status": "created",
    "price_units": 420,
    "total_tokens": 0,
    "task_data": {
      "text": "Welcome to our platform! This narration greets every new listener.",
      "total_length": 420
    },
    "result": null,
    "created_at": "2026-07-17T16:00:00+00:00",
    "updated_at": "2026-07-17T16:00:00+00:00",
    "eta_seconds": null,
    "eta_at": null,
    "completed_chunks": 0,
    "total_chunks": 2,
    "progress_percent": 0
  }
}
Поля ответа
successобязательное

Признак успеха. Решение принимайте по HTTP-коду: у любого ответа 2xx здесь true, а ошибка приходит телом другой формы, где этого поля может не быть вовсе.

boolean
messageобязательное

Пояснение для человека, на языке аккаунта. Показать пользователю можно; разбирать программно — нет: формулировки меняются без предупреждения и кодом ошибки не являются.

string
dataобязательное

Новый заказ с теми же параметрами — у него свой id. Исходный заказ не меняется.

OrderOrder
idобязательное

UUID заказа. Его подставляют в пути /orders/{order}/… и передают в POST /orders/{order}/retry.

string
user_idобязательное

ID владельца заказа. У заказов, созданных по API-ключу, это всегда владелец ключа — чужой заказ по ключу не увидеть.

integer
nameобязательное

Название заказа: из него берутся имя скачиваемого файла и имя ZIP-архива.

string
templateнеобязательное

Шаблон, по которому создан заказ. Приходит только у заказов с template_id; у заказа без шаблона (sfx/music по task_type) поля нет. config внутри — настройки, с которыми выполняется ИМЕННО этот заказ: конфиг шаблона на момент создания заказа с наложенным config_override; правка шаблона после создания его не меняет. В списке GET /orders config приходит null — полный конфиг отдаёт GET /orders/{order}. Шаблон могли удалить после создания заказа: здесь он виден по-прежнему, но GET /templates/{template} ответит 404, а новый заказ с этим template_id — 422. У заказов, созданных до выхода этой версии API (конец сентября 2026 года), снимка нет: там config — текущий конфиг шаблона с наложенным config_override, и правка шаблона его меняет.

TemplateTemplate
idобязательное

UUID шаблона. Его кладут в template_id при создании заказа.

string
user_idобязательное

ID владельца шаблона.

integer
slugобязательное

Короткий публичный идентификатор для расшаривания. null у шаблона, которым не делились.

string
nameобязательное

Название шаблона — только для человека, на поведение генерации не влияет.

string
service_keyобязательное

Код сервиса, по схеме которого валидируется config: elevenlabs, lumimg и т. д.

string
serviceобязательное

Сервис шаблона справочно: название и тарификация, без схем конфигурации. null означает, что сервиса с таким кодом больше нет.

может быть null
Service | null
configобязательное

Настройки генерации: голос, модель, скорость и прочее — набор ключей задаёт сервис. Допустимые значения смотрите в GET /templates/config-options?service=<код>, значение вне схемы отклоняется с 422. В заказе (template в GET /orders/{order}) это настройки самого заказа — снимок на момент его создания с config_override, а не текущий конфиг шаблона (у заказов, созданных до конца сентября 2026 года, — текущий конфиг шаблона с config_override).

object
is_publicобязательное

Опубликован ли шаблон в общем каталоге.

boolean
folder_idобязательное

UUID папки, в которой лежит шаблон, либо null для корня. Структура папок видна в GET /templates/browse.

string
created_atобязательное

Когда шаблон создан, ISO 8601.

может быть nulldate-time
string
updated_atобязательное

Когда шаблон последний раз менялся, ISO 8601.

может быть nulldate-time
string
template_idобязательное

UUID использованного шаблона либо null, если заказ создан без шаблона.

string
task_typeобязательное

Тип задачи — он определяет, что лежит в task_data и что придёт в result.

Значенияttsimagetxt2imgremiximage_editvoice_clonesfxmusicvoice_search
TaskTypeTaskType
statusобязательное

Текущее состояние заказа. Терминальные — completed, failed, cancelled, compensated; опрашивать заказ дальше смысла нет.

partially_completed — часть чанков готова, часть упала: файлы уже можно забирать, а сбойные фрагменты перезапускать через POST /orders/{order}/items/retry-failed.

Значенияcreatedpendingin_progresscompletedresult_deliveredfailedcompensatedcancelledpartially_completed
OrderStatusOrderStatus
price_unitsобязательное

Заблокированная под заказ сумма в минимальных единицах LMC. Показывать это число как есть нельзя: реальное значение — price_units / 10^precision, где precision берётся из актива рядом. Готовое к показу значение лежит в соседнем decimal-поле.

integer
price_formattedобязательное

Та же сумма, что и price_units, но в целых LMC — готова к показу. null, пока стоимость не зафиксирована.

может быть null
number
currency_assetобязательное

Актив суммы — всегда LMC. Его precision нужен, чтобы перевести минимальные единицы в реальное значение.

AssetAsset
idобязательное

Внутренний идентификатор актива.

integer
codeобязательное

Код актива: LUMC — внутренняя валюта, TOKEN — токены генерации.

string
kindобязательное

Вид актива: деньги или расходуемые единицы. От него зависит, где сумма считается платежом, а где — расходом квоты.

Значенияmoneyunit
AssetKindAssetKind
precisionобязательное

Число десятичных знаков. Ключевое поле: любая целая сумма этого актива делится на 10^precision, чтобы получить реальное значение. Не считайте, что делитель равен 100.

integer
nameобязательное

Название актива для показа, на языке аккаунта.

string
deleted_atобязательное

Когда актив выведен из обращения, ISO 8601. null у действующего.

может быть nulldate-time
string
created_atобязательное

Когда актив заведён, ISO 8601.

может быть nulldate-time
string
updated_atобязательное

Когда актив последний раз менялся, ISO 8601.

может быть nulldate-time
string
total_tokensобязательное

Полная стоимость заказа в токенах: исходные чанки плюс все повторы и перегенерации. Это единица квоты, а не деньги.

может быть null
integer
total_duration_msобязательное

Суммарная длительность полученного аудио в миллисекундах. Это длина результата, а не время, потраченное на генерацию.

может быть null
integer
task_dataобязательное

Входные данные задачи ровно в том виде, в каком их принял сервер: текст, ссылки на загруженные файлы, применённые настройки. Набор ключей зависит от task_type.

может быть null
object
resultобязательное

Результат выполнения. files[] — основные файлы; service_files[] — вспомогательные (субтитры .srt/.vtt/.lrc, alignment) у TTS-заказов. Пути абсолютные и готовы к передаче в POST /storage/url.

null, пока заказ не завершён, а также у упавшего заказа: подробностей ошибки в публичном контуре нет.

может быть null
object
created_atобязательное

Когда заказ создан, ISO 8601.

может быть nulldate-time
string
updated_atобязательное

Когда заказ последний раз менялся, ISO 8601. Растёт на каждом переходе статуса — годится как дешёвый признак «что-то произошло».

может быть nulldate-time
string
files_expire_atобязательное

Срок хранения файлов заказа. files_expire_at — момент удаления (null, если заказ ещё не завершён или файлы уже удалены); files_expired — файлов больше нет, скачивать нечего.

может быть null
string
files_expiredобязательное

true — срок хранения истёк и файлы уже удалены: ссылку на них получить нельзя, заказ нужно создавать заново.

boolean
retentionобязательное

Сроки хранения по уровням файлов. Пофрагментные дорожки склеенного заказа удаляются раньше самого результата.

object
chunksобязательное

Срок жизни пофрагментных дорожек — ими работают правка пауз, пересборка финала и перегенерация отдельного фрагмента.

object
expires_atобязательное

Когда исчезнут пофрагментные дорожки, ISO 8601. До этого момента доступны правка пауз, пересборка и перегенерация отдельного фрагмента. null — заказ ещё не завершён (отсчёт не начат) либо фрагментов уже нет.

string
expiredобязательное

true — пофрагментных дорожек больше нет: правка и пересборка отклоняются. Готовый результат при этом может быть ещё доступен — смотрите retention.files.

boolean
expires_earlyобязательное

true — фрагменты исчезнут раньше результата (заказ склеен в отдельный файл). false — фрагменты и есть результат, оба уровня истекают одновременно.

boolean
reasonобязательное

Почему фрагменты недоступны: chunks_purged — удалены по своему сроку, результат ещё на месте; storage_expired — удалены все файлы заказа. null — фрагменты доступны.

может быть null
Значенияchunks_purgedstorage_expired
string
filesобязательное

Срок жизни всех файлов заказа, включая результат. Дублирует поля files_expire_at / files_expired верхнего уровня.

object
expires_atобязательное

Когда будут удалены все файлы заказа, ISO 8601. То же значение, что в files_expire_at — поле верхнего уровня сохранено для совместимости.

может быть null
string
expiredобязательное

То же, что files_expired: файлов больше нет, скачивать нечего.

boolean
eta_secondsобязательное

Оценка оставшегося времени, в секундах — только пока заказ выполняется. У завершённого и у ещё не начатого null.

может быть null
integer
eta_atобязательное

Ожидаемый момент готовности, ISO 8601 — тот же прогноз, что и eta_seconds, только абсолютным временем.

может быть nulldate-time
string
completed_chunksобязательное

Сколько исходных чанков уже готово. Повторы и перегенерации сюда не входят — иначе прогресс уезжал бы выше 100 %.

может быть null
integer
total_chunksобязательное

Сколько исходных чанков в заказе всего. Ноль означает, что разбиение ещё не выполнено.

может быть null
integer
progress_percentобязательное

Готовность в процентах, 0–100 — производная от completed_chunks и total_chunks, считать самому не нужно.

может быть null
integer
stitchingобязательное

true — идёт склейка аудио: результат ещё не финальный. Бывает и при status = completed — после перегенерации фрагмента финал пересобирается, и до конца склейки result указывает на прежнюю дорожку. Скачивать итог — когда stitching = false.

boolean
paragraphsобязательное

Сводка по абзацам: индекс, число фрагментов, общий статус и прогресс каждого абзаца. null — заказ создан в обычном режиме, ориентируйтесь на items[]. Чтобы абзацы появились, создавайте заказ с config_override.generation_mode = paragraph (подробности — в описании этого поля).

может быть null
array<object>
элемент массива
paragraph_indexобязательное

Номер абзаца, с нуля.

integer
chunks_countобязательное

Сколько чанков попало в этот абзац.

integer | number
completed_chunksобязательное

Сколько чанков абзаца уже готово.

string | integer
statusобязательное

Сводный статус абзаца: он выводится из статусов его чанков, а не хранится отдельно. Словарь свой, короче общего: pending, in_progress, failed, completed — заблокированный модерацией чанк тоже даёт failed. Считаются только исходные чанки, поэтому успешный повтор упавшего фрагмента статус абзаца НЕ меняет: смотрите на сам фрагмент в items[].

string
progress_percentобязательное

Готовность абзаца в процентах, 0–100.

integer
result_fileобязательное

Склеенное аудио абзаца целиком: абсолютный путь либо структура с путём и размером. Скачивается через POST /storage/url, как и остальные файлы заказа. null читается по-разному в зависимости от chunks_count: при chunks_count = 1 собственного файла у абзаца нет и не будет — абзац это и есть тот единственный фрагмент, берите его result_file из items[] по тому же paragraph_index; при chunks_count > 1 склейки ещё не было — многочанковый абзац получает файл ТОЛЬКО после неё, никогда заранее.

может быть null
string
itemsнеобязательное

Чанки заказа. Приходят в детальном ответе GET /orders/{order}; в списке GET /orders поля нет — за ними идите в GET /orders/{order}/items.

array<OrderItem>OrderItem
элемент массива
idобязательное

UUID чанка. Подставляется в пути /orders/{order}/items/{item}/….

string
order_idобязательное

UUID заказа, которому принадлежит чанк.

string
item_typeобязательное

Природа записи: chunk — исходный фрагмент, retry — бесплатный повтор упавшего фрагмента, regeneration — платная переделка готового.

Повторы и перегенерации живут отдельными записями с тем же chunk_index: история попыток сохраняется целиком, а звучит в результате последняя.

string
chunk_indexобязательное

Порядковый номер фрагмента в заказе, с нуля. Задаёт порядок склейки итогового файла.

может быть null
integer
paragraph_indexобязательное

Номер абзаца, к которому относится фрагмент, — заполняется только у исходных фрагментов абзацного заказа. null и в обычном режиме, и у записей повтора либо перегенерации: у них своей привязки к абзацу нет, её берут у родительского фрагмента через parent_item_id. Режим включается ключом generation_mode в config_override заказа.

string
parent_item_idобязательное

UUID исходного чанка — у записей retry и regeneration. У самого исходного чанка null.

string
original_text_lengthобязательное

Длина текста, с которой фрагмент создавался. Служит потолком для text в regenerate.

integer
current_text_lengthобязательное

Длина актуального текста фрагмента: после перегенерации отличается от original_text_length.

integer
price_unitsобязательное

Стоимость фрагмента в токенах — это не деньги. Денежная сумма лежит у самого заказа, в его поле price_units (там LMC, здесь токены; поля называются одинаково, единицы разные).

integer
consumed_unitsобязательное

Сколько токенов фактически списано по этому фрагменту. У незавершённого фрагмента — 0.

integer
remaining_lockedобязательное

Сколько токенов ещё зарезервировано под фрагмент. Обнуляется, когда фрагмент завершается или отменяется.

integer
statusобязательное

Состояние фрагмента: pending — ждёт воркера, processing — в работе, completed — готов, failed — техническая ошибка, policy_flagged — отклонён контентной политикой.

Разница между двумя последними определяет способ лечения: failed чинится повтором как есть, policy_flagged — только переформулировкой текста, повтор с прежним будет отклонён снова.

string
result_fileобязательное

Файл готового фрагмента: абсолютный путь либо структура с путём и размером. Скачивается через POST /storage/url, как и файлы заказа. null, пока фрагмент не готов.

может быть null
object | string | null
duration_msобязательное

Длительность полученного аудио в миллисекундах — длина записи, а не время генерации. У не-аудио задач null.

может быть null
integer
attempt_numberобязательное

Номер попытки для этого фрагмента, начиная с 1. Растёт с каждым повтором.

integer
can_retryобязательное

Разрешён ли бесплатный повтор прямо сейчас. Учитывает статус, тип задачи и исчерпание попыток — проверять условия самому не нужно.

boolean
can_regenerateобязательное

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

boolean
created_atобязательное

Когда фрагмент создан, ISO 8601.

может быть nulldate-time
string
updated_atобязательное

Когда фрагмент последний раз менялся, ISO 8601.

может быть nulldate-time
string
failure_reasonнеобязательное

Причина падения в машиночитаемом виде — есть только у failed и policy_flagged. Остальным приходит null.

может быть null
string
tokens_from_quotaнеобязательное

Сколько из потраченных токенов покрыла квота подписки. null — из квоты не покрыто ничего.

может быть null
integer
tokens_from_paygнеобязательное

Сколько токенов оплачено сверх квоты, из баланса LMC. null — доплаты не было.

может быть null
integer
tokens_spentнеобязательное

Итог по двум предыдущим полям: сколько токенов списано за заказ (квота + доплата). Заказ, покрытый безлимитом подписки, и бесплатные версии сюда не входят — у безлимитного заказа поле null; объём генерации — total_tokens. Повторы (retry) не входят — они не тарифицируются заново.

может быть null
integer
queue_positionнеобязательное

Место в очереди — только у задач поиска голоса (voice_search), которые обслуживаются по одной. У остальных типов задач поля нет.

может быть null
integer
queue_wait_secondsнеобязательное

Оценка ожидания в очереди поиска голоса, в секундах. Оценка, а не обещание: пересчитывается на каждый ответ.

может быть null
integer
400

Невозможно выполнить retry: reason=invalid_order_status (исходный заказ не completed/result_delivered), has_failed_items (в заказе есть упавшие фрагменты) или retry_config_outdated (настройки исходной генерации — снимок шаблона и config_override — не проходят текущую схему сервиса; создайте новый заказ)

Пример тела
{
  "success": false,
  "message": "This order contains items that failed and cannot be repeated.",
  "reason": "has_failed_items",
  "error_code": "has_failed_items"
}
Поля ответа
successобязательное

Всегда false у ошибок.

boolean
messageобязательное

Причина отказа словами, на языке аккаунта. Для показа пользователю; ветвиться по ней нельзя — формулировки меняются.

string
errorsобязательное

Разбор по полям — только у ошибок валидации (422): ключ соответствует полю запроса, значение — список претензий к нему. У остальных кодов приходит null: разбирать нечего, причина целиком в message.

может быть null
null
401

Невалидный или отсутствующий X-API-KEY

Разобрать этот ответ
Пример тела
{
  "success": false,
  "message": "API key is missing. Provide it in the X-API-KEY header.",
  "data": null
}
Поля ответа
successобязательное

Всегда false в ответах об ошибке.

boolean
messageобязательное

Текст ошибки на языке ключа (задаётся заголовком X-Locale).

string
dataобязательное

Всегда null, когда запрос отклонён до обработки.

может быть null
null
402

Не хватает денег на новый заказ сверх квоты подписки (reason: insufficient_balance) — биллинг тот же, что при создании. Только в режиме отката: payg_topup_required — получите quote_token и повторите запрос с confirm_payg_topup: true.

Разобрать этот ответ
Пример тела
{
  "success": false,
  "message": "Insufficient balance to cover the part of the order beyond the subscription quota.",
  "reason": "insufficient_balance",
  "error_code": "insufficient_balance"
}
Поля ответа
successобязательное

Всегда false в ответах об ошибке.

boolean
messageобязательное

Текст ошибки на языке ключа (задаётся заголовком X-Locale).

string
reasonобязательное

Машиночитаемая причина отказа — по ней ветвите обработку, а не по тексту сообщения.

Значенияinsufficient_balanceinsufficient_allowancepayg_topup_required
string
error_codeобязательное

Тот же машинный код, что в reason, — второе имя поля. Значения всегда совпадают; ветвитесь по любому из них.

Значенияinsufficient_balanceinsufficient_allowancepayg_topup_required
string
shortfall_tokensнеобязательное

Сколько токенов не покрыла квота подписки — именно они оплачиваются из LMC.

integer
Пример 1200
shortfall_lmcнеобязательное

Стоимость доплаты в LMC, готовая к показу пользователю.

number
Пример 3.6
shortfall_lmc_minorнеобязательное

Та же сумма в минимальных единицах LMC — для точных расчётов без потери копеек.

integer
Пример 360000000
quote_tokenнеобязательное

Подписанная котировка цены: верните её без изменений в повторном запросе вместе с confirm_payg_topup: true.

может быть null
string
Пример q_9f8b2c1a4d3e
expires_atнеобязательное

До этого момента цена зафиксирована. Позже — повторите запрос и получите новую котировку.

может быть nulldate-time
string
Пример 2026-07-25T12:34:56+00:00
403

Нет доступа к заказу или у ключа нет права orders.write

Разобрать этот ответ
Пример тела
{
  "success": false,
  "message": "This API key does not have permission to perform this action."
}
Поля ответа
messageобязательное

Error overview.

string
409

Только в режиме отката к явному подтверждению: котировка добора устарела (reason=quote_mismatch) — запросите 402 заново

Разобрать этот ответ
Пример тела
{
  "success": false,
  "message": "The pay-as-you-go quote is stale — request a fresh one.",
  "reason": "quote_mismatch",
  "error_code": "quote_mismatch",
  "actual_lmc_minor": 380000000,
  "quoted_lmc_minor": 360000000
}
Поля ответа
successобязательное

Всегда false в ответах об ошибке.

boolean
messageобязательное

Текст ошибки на языке ключа (задаётся заголовком X-Locale).

string
reasonобязательное

Машиночитаемая причина отказа — по ней ветвите обработку, а не по тексту сообщения.

Значенияquote_mismatch
string
error_codeобязательное

Тот же машинный код, что в reason, — второе имя поля. Значения всегда совпадают; ветвитесь по любому из них.

Значенияquote_mismatch
string
actual_lmc_minorобязательное

Во сколько добор обходится сейчас (минимальные единицы LMC).

integer
Пример 380000000
quoted_lmc_minorобязательное

Цена, на которую вы согласились ранее (минимальные единицы LMC).

integer
Пример 360000000
422

Ошибка валидации. Поля с ошибками перечислены в errors.

Разобрать этот ответ
Пример тела
{
  "message": "string",
  "errors": {}
}
Поля ответа
messageобязательное

Errors overview.

string
errorsобязательное

A detailed description of each field that failed validation.

object
*необязательное
произвольные ключи
array<string>
429

Превышена токен-квота ключа либо reason=limit_exceeded — исчерпан usage-лимит подписки

Разобрать этот ответ
Пример тела
{
  "success": false,
  "message": "Too many attempts. Please wait a moment and try again.",
  "reason": "rate_limit_exceeded",
  "error_code": "rate_limit_exceeded",
  "retry_after": 30
}
Поля ответа
successобязательное

Всегда false в ответах об ошибке.

boolean
messageобязательное

Текст ошибки на языке ключа (задаётся заголовком X-Locale).

string
reasonобязательное

Машиночитаемая причина отказа — по ней ветвите обработку, а не по тексту сообщения.

string
error_codeобязательное

Тот же машинный код, что в reason, — второе имя поля. Значения всегда совпадают; ветвитесь по любому из них.

string
retry_afterнеобязательное

Через сколько секунд имеет смысл повторить запрос (то же значение — в заголовке Retry-After).

может быть null
integer

События, которые это порождает

Ход выполнения приезжает по WebSocket: опрашивать заказ в цикле не обязательно. Подписка требует того же права, что и чтение заказов.

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

Открыть .mdllm.md

спека 0.0.1