GET /orders /chunks /preview /{previewId}
Страница чанков уже посчитанного preview из кэша (без пересчёта) — пагинация по
preview_id, полученному из POST/GET /orders/chunks/preview.
Поправки к спецификации · 2
Пагинация лежит не в
data.metaЧетыре описания параметра
per_pageобещают метаданные пагинации вdata.meta. Такого ключа нет ни в одном ответе публичного API: страница приходит плоско —data.items[]плюсdata.current_page,data.last_page,data.per_page,data.total. Код, читающийdata.meta.total, получитundefined.Предпросмотр чанков доступен по API-ключу
В машинной документации
llm.md§12 сказано, что предпросмотр чанков — эндпоинт веб-кабинета и по ключу вернёт401. Это неверно: три операции предпросмотра входят в публичный контур и требуют праваorders.read— так их описывают и OpenAPI, и §7.1 той жеllm.md. Если ИИ-ассистент сошлётся на §12 — он ошибается.
- 200
status=ready— страница чанков + мета пагинации. Страница вне диапазона → пустойchunks[]+has_more=false. - 202
status=processing— расчёт ещё идёт. - 404 — preview не найден, протух (TTL ~30 мин) или расчёт упал — пере-отправьте
через
POST /orders/chunks/preview.
Требуемое право ключа: orders.read.
На этой странице(4)
Параметры
Поля ввода живут прямо в строке запроса: подставьте значение — и получите готовый URL. Ниже — тип, обязательность и допустимые значения каждого параметра.
- stringв путиобязательный
Идентификатор превью — sha256-хеш (64 символа нижнего регистра, БЕЗ дефисов), не UUID.
Берётся из поля
preview_idответаPOST/GET /orders/chunks/preview. Чужойpreview_idвернёт404— кэш изолирован по владельцу ключа.Значение подставляется прямо в строку запроса выше.
- integerв queryнеобязательный≥ 1
Номер страницы, начиная с
1. - integerв queryнеобязательный1..500
Сколько записей вернуть на странице. Метаданные пагинации лежат рядом с
items:current_page,last_page,per_page,total.
Возможные ответы
200status=ready: страница чанков + мета пагинации
status=ready: страница чанков + мета пагинации
{
"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).
404Preview не найден или протух
Preview не найден или протух
{
"success": false,
"message": "Resource not found."
}Всегда false у ошибок.
Причина отказа словами, на языке аккаунта. Для показа пользователю; ветвиться по ней нельзя — формулировки меняются.
Разбор по полям — только у ошибок валидации (422): ключ соответствует полю запроса, значение — список претензий к нему. У остальных кодов приходит null: разбирать нечего, причина целиком в message.
422Ошибка валидации. Поля с ошибками перечислены в errors.
Ошибка валидации. Поля с ошибками перечислены в errors.
{
"message": "string",
"errors": {}
}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