GET /orders /chunks /preview
Preflight: есть ли уже готовое разбиение этого текста в кэше — без пересылки
самого текста. Пришлите text_hash (sha256 сырого input_text, нижний регистр
hex) + template_id (+ generation_mode и config_override, если использовались при расчёте) —
сервер соберёт тот же preview_id и проверит кэш.
Поправки к спецификации · 1
Предпросмотр чанков доступен по API-ключу
В машинной документации
llm.md§12 сказано, что предпросмотр чанков — эндпоинт веб-кабинета и по ключу вернёт401. Это неверно: три операции предпросмотра входят в публичный контур и требуют праваorders.read— так их описывают и OpenAPI, и §7.1 той жеllm.md. Если ИИ-ассистент сошлётся на §12 — он ошибается.
- 200
status=ready— уже посчитано, текст слать не нужно. - 202
status=processing— расчёт этого текста ещё идёт. - 404 — в кэше нет → отправьте полный текст через
POST /orders/chunks/preview.
Требуемое право ключа: orders.read.
На этой странице(4)
Параметры
Поля ввода живут прямо в строке запроса: подставьте значение — и получите готовый URL. Ниже — тип, обязательность и допустимые значения каждого параметра.
- stringв queryобязательныйuuid
UUID шаблона — тот же, что был указан в
POST /orders/chunks/previewпри расчёте. Часть идентичностиpreview_id. - stringв queryобязательныйшаблон: ^[a-f0-9]{64}$
sha256 от СЫРОГО
input_text(нижний регистр hex, 64 символа) — считайте у себя, нормализацию бэк делает сам и в хеш её не примешивает. Вместе сtemplate_idиgeneration_modeдетерминируетpreview_id: та же тройка → тот же ответ, без пересылки самого текста. - stringв queryнеобязательный
Режим генерации, если использовался при расчёте (
paragraph— абзацный рез). Обязан совпадать с тем, что уходило вPOST— режим входит в идентичностьpreview_id.Допустимые значения - array<string>в queryнеобязательный
config_override, с которым превью считали вPOST(если передавали). Настройки, влияющие на рез, входят в идентичностьpreview_id, остальные — нет. Передаётся JSON-строкой (config_override={"tts_settings":{"mode":"mode_v1"}}, URL-кодированной) или вложенными ключами (config_override[tts_settings][mode]=mode_v1).
Возможные ответы
200status=ready: summary + первая страница чанков
status=ready: summary + первая страница чанков
{
"success": true,
"message": "string",
"data": {
"status": "string",
"preview_id": "string",
"summary": "string",
"chunks": [
"string"
],
"page": "string"
}
}Признак успеха. Решение принимайте по HTTP-коду: у любого ответа 2xx здесь true, а ошибка приходит телом другой формы, где этого поля может не быть вовсе.
Пояснение для человека, на языке аккаунта. Показать пользователю можно; разбирать программно — нет: формулировки меняются без предупреждения и кодом ошибки не являются.
dataобязательноеПолезная нагрузка ответа.
object
Полезная нагрузка ответа.
Всегда ready у кода 200 — расчёт готов.
Контентный идентификатор превью (sha256 от текста+шаблона+режима+версии алгоритма). Используйте для инкрементального re-preview (previous_preview_id) и для пагинации (GET .../{previewId}).
Итоги по всему тексту — не только по текущей странице чанков.
Только ТЕКУЩАЯ страница (см. data.page), не весь список — используйте пагинацию (GET .../{previewId}?page=) для остальных.
Мета пагинации ТЕКУЩЕЙ страницы data.chunks.
202status=processing: расчёт ещё идёт
status=processing: расчёт ещё идёт
{
"success": true,
"message": "string",
"data": {
"status": "string",
"preview_id": "string",
"summary": "string",
"chunks": [
"string"
],
"page": "string"
}
}Признак успеха. Решение принимайте по HTTP-коду: у любого ответа 2xx здесь true, а ошибка приходит телом другой формы, где этого поля может не быть вовсе.
Пояснение для человека, на языке аккаунта. Показать пользователю можно; разбирать программно — нет: формулировки меняются без предупреждения и кодом ошибки не являются.
dataобязательноеПолезная нагрузка ответа.
object
Полезная нагрузка ответа.
Всегда processing у кода 202 — расчёт идёт в фоне.
Идентификатор превью. Используйте для подписки на WS-канал private-chunks.preview.{userId} (событие .ready) либо для ручного поллинга GET /orders/chunks/preview/{previewId}.
Итоги по всему тексту — не только по текущей странице чанков.
Только ТЕКУЩАЯ страница (см. data.page), не весь список — используйте пагинацию (GET .../{previewId}?page=) для остальных.
Мета пагинации ТЕКУЩЕЙ страницы data.chunks.
401Невалидный или отсутствующий X-API-KEY
Невалидный или отсутствующий X-API-KEY
{
"success": false,
"message": "API key is missing. Provide it in the X-API-KEY header.",
"data": null
}Всегда false в ответах об ошибке.
Текст ошибки на языке ключа (задаётся заголовком X-Locale).
Всегда null, когда запрос отклонён до обработки.
403У ключа нет права orders.read
У ключа нет права orders.read
{
"success": false,
"message": "This API key does not have permission to perform this action."
}Всегда false в ответах об ошибке.
Текст ошибки на языке ключа (задаётся заголовком X-Locale).
404В кэше нет — нужно отправить полный текст через POST
В кэше нет — нужно отправить полный текст через POST
{
"success": false,
"message": "Resource not found."
}Всегда false у ошибок.
Причина отказа словами, на языке аккаунта. Для показа пользователю; ветвиться по ней нельзя — формулировки меняются.
Разбор по полям — только у ошибок валидации (422): ключ соответствует полю запроса, значение — список претензий к нему. У остальных кодов приходит null: разбирать нечего, причина целиком в message.
422Ошибка валидации
Ошибка валидации
{
"message": "string",
"errors": {
"key": [
"string"
]
}
}Errors overview.
errorsобязательноеA detailed description of each field that failed validation.
object
A detailed description of each field that failed validation.
429Превышен лимит запросов чтения preview для этого ключа
Превышен лимит запросов чтения preview для этого ключа
{
"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
}Всегда false в ответах об ошибке.
Текст ошибки на языке ключа (задаётся заголовком X-Locale).
Машиночитаемая причина отказа — по ней ветвите обработку, а не по тексту сообщения.
Тот же машинный код, что в reason, — второе имя поля. Значения всегда совпадают; ветвитесь по любому из них.
Через сколько секунд имеет смысл повторить запрос (то же значение — в заголовке Retry-After).
События, которые это порождает
Ход выполнения приезжает по WebSocket: опрашивать заказ в цикле не обязательно. Подписка требует того же права, что и чтение заказов.
Рядом
Скормить страницу ИИ
спека 0.0.1