Skip to content
Lumean

For AI agents

Machine-readable entry points to the docs, the reading order and the API rules. If you are setting up an agent, give it a link to this page or to /llms.txt.

Entry points

  • /llms.txt

    A map of every documentation page with links to their Markdown versions. Start here.

    https://lumean.app/llms.txt
  • llm.md

    The whole API in one file, with sections and end-to-end recipes. Use it when you need full context. The file is in Russian only.

    https://api.lumean.app/docs/llm.md
  • .md

    The Markdown version of any page: replace /developers/docs/ in the URL with /developers/docs/md/. Use it when you need one topic.

    https://lumean.app/en/developers/docs/md/<path>
  • OpenAPI

    The REST contract: operations, parameters and schemas. Use it to generate a client and exact types. Available in Russian and English.

    https://api.lumean.app/docs/public-openapi.en.json
  • AsyncAPI

    WebSocket channels and events. Use it to subscribe to order statuses instead of polling.

    https://api.lumean.app/docs/public-asyncapi.en.json

Reading order

  1. Read /llms.txt and pick the pages you need.
  2. Fetch their Markdown versions, not HTML.
  3. Take schemas and types from OpenAPI.
  4. Send requests with the X-API-KEY header. The account owner creates the key in their account.

API rules

Agents get these rules wrong most often. /llms.txt and the Markdown version of this page carry the same rules in English.

  • The voice is set in a template

    An order has no voice_id field. The voice is stored in the template’s config.tts_settings.voice_id, and the order refers to the template by template_id. To voice a single order with another voice, pass config_override.tts_settings.voice_id. The text to voice goes in input_text.

  • Orders run asynchronously

    POST /orders returns 201 with status created and no result yet. Poll GET /orders/{order} or listen over WebSocket to follow the status. partially_completed is not a final status: some chunks failed, and you can retry them or cancel the order.

  • result.files[] holds paths, not links

    POST /storage/url returns the download link, valid for one hour. Order files are kept for 7 days after the order finishes.

  • Retrying an order creates a new order

    POST /orders/{order}/retry creates a new order with the same parameters and is billed again. Failed chunks are retried inside the original order: POST /orders/{order}/items/retry-failed. POST /orders has no idempotency key, so after a dropped connection, look for the order in the list first.

  • A 429 has several causes

    It can be the request rate limit, the key’s token quota, a subscription limit, the concurrent task limit, or a pause after content policy blocks. The reason field names the cause. If the response has a Retry-After header, wait the time it gives. concurrency_limit_exceeded comes without it and lifts when your active orders finish. limit_exceeded is the subscription limit: retrying does not help until the period resets or the plan changes.

What models get wrong

The list from section 0 of llm.md. Add it to the agent’s context before the first request.

  1. TTS-голос задаётся только через шаблон, а не полем заказа. Нет orders.voice_id. Порядок: положить voice_id в config.tts_settings.voice_id шаблона → создать заказ по этому шаблону. См. §11 (Рецепты).
  2. Текст для TTS передаётся в top-level поле input_text запроса POST /orders (сырая строка). НЕ кладите текст TTS в task_data. А вот для template-less SFX/music промпт идёт в task_data.
  3. У заказов НЕТ update/delete. Доступны только index, store, show, плюс действия cancel/retry. PUT/PATCH/DELETE /orders/{order} вернут 405/404.
  4. Два независимых лимита: rate-limit по числу запросов (429, reason: rate_limit_exceeded, заголовок Retry-After) и токен-квота по объёму генерации (429, reason: token_quota_exceeded; Retry-After — только у окна со сбросом по времени, у пула window: "quota" его нет). См. §6.
  5. Пагинация с разными базами: внешние каталоги голосов (voices/elevenlabs/library, voices/heygen) считают page с 0; обычные списки (orders, templates, templates/browse, а также каталог и клоны Cartesia voices/cartesia, voices/cartesia/clones, а также Fish Audio voices/fishaudio, voices/fishaudio/clones) — current_page с 1.
  6. Субтитры и другие сервисные файлы лежат ОТДЕЛЬНО — в result.service_files[], не в result.files[]. Оба поля — плоские массивы строк-путей (напр. .../output/final/service/subtitles.srt), генерируется только для TTS. Скачивается тем же POST /storage/url. См. §7.10.
  7. Сбой чанка чинится на уровне чанка, не заказа. У чанка бывают статусы failed (тех. ошибка) и policy_flagged (контент отклонён политикой провайдера). Частично готовый заказ (partially_completed) доводят до completed так: один вызов POST /orders/{order}/items/retry-failed забирает все failed разом, а policy_flagged добивают поштучно POST /orders/{order}/items/{item}/retry с исправленным text (повтор с тем же текстом бессмыслен). Order-level retry для этого не годится — он создаёт новый заказ. См. §7.11.
  8. Бесплатна только пауза {{pause}}; квадратные скобки и <break/> оплачиваются. {{pause=2s}} — наш формат: тишину строит воркер, до провайдера строка не доезжает, в цену и в длину фрагмента не входит. Любые […] ([шёпот], а заодно [1], [sic], [00:12]) и <break time="…"/> — синтаксис провайдера: он получает их целиком, модель читает их как указание диктору, а символы тарифицируются и занимают место во фрагменте. (ремарка), <тег>, *звёздочки* — прозвучат вслух и тоже тарифицируются. См. §8.3.
  9. Тонкие настройки голоса включаются флагом. Без tts_settings.advanced_voice_settings: true (по умолчанию false) на eleven_v3* до движка доезжает только stability, на eleven_v4* — stability и similarity_boost; остальные значения (в том числе speed) молча не влияют на звук — ошибки не будет. На прочих моделях флаг на звук не влияет. См. §8.2.
  10. Свой голос для Cartesia клонируется по API, но асинхронно. POST /voices/cartesia/clones (право voices.write) сразу отвечает 201 с клоном в статусе pending, а voice_id появляется только в статусе ready — ждите событие voice_clone.updated (§10) или опрашивайте GET /voices/cartesia/clones. В шаблон кладут voice_id клона, а НЕ его id. Клонирование требует живой подписки с Cartesia, только если сервис закрыт для оплаты с баланса (иначе 402 no_subscription), и упирается в потолок клонов: 2 без подписки, лимит тарифа с подпиской. См. §7.12, Рецепт H. То же у Fish Audio (POST /voices/fishaudio/clones, §7.12): правила те же, что у Cartesia, лимит клонов у Fish свой, voice_id — строка из 32 hex-символов, а не UUID.
  11. Не подбирайте адреса — все эндпоинты описаны в этом файле. Путь, которого нет, отвечает 404 с reason: "endpoint_not_found", текстом-подсказкой и ссылками на этот файл. Перебор несуществующих путей распознаётся как http probing: после нескольких таких 404 IP банится на ВСЕХ путях — 429 reason: "ip_banned" (5 мин → 10 → 30 → 1 ч → 24 ч). Получили endpoint_not_found — остановитесь и найдите нужный запрос здесь. См. §6.1, §12.
  12. Есть отдельный AI API (LLM-гейтвей), не входящий в /api/public/*. OpenAI- и Anthropic-совместимые ручки на https://api.lumean.app/v1 (/chat/completions, /responses, /messages, /models, /images/*) работают с ЛЮБЫМ ключом кабинета (Authorization: Bearer или x-api-key), оплата с баланса LUMC. Полностью — §14.
  13. Цены AI-моделей не фиксированы. Они меняются вслед за поставщиками (иногда несколько раз в день), модель может временно пропасть. Перед дорогой генерацией сверяйте цену — GET /api/public/ai/models/{key} (любой ключ, ETag → 304, пока цена прежняя) — и держите месячный лимит ключа. См. §14.6.

This page for AI

Open .mdllm.md

Updated 10/18/2026 · API version 1.0.0