---
title: "GET /orders/{order}/items — Чанки заказа"
url: https://lumean.app/developers/docs/api/get-orders-order-items
locale: ru
description: "Чанки заказа"
generated: 2026-11-08
operationId: orderItem.index
method: GET
path: "/orders/{order}/items"
scopes: [orders.read]
spec_version: 1.0.0
---

# GET /orders/{order}/items

**Чанки заказа**

Возвращает список всех элементов (чанков) заказа.

**Информация о каждом элементе:**
- Тип (`chunk`, `retry`, `regeneration`, `stitch`, `pause_edit` — legacy,
  для новых заказов не создаётся)
- Статус обработки (`pending`, `processing`, `completed`, `policy_flagged`, `failed`)
- Текст и результат (`result_file` — основной файл чанка)
- Стоимость и биллинг
- Флаги `can_retry` / `can_regenerate` (отражают только статус чанка — см.
  описание retry/regenerate ниже)

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

- Право ключа: `orders.read`

## Запрос

```bash
curl -X GET 'https://api.lumean.app/api/public/orders/{order}/items' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: YOUR_API_KEY'
```

## Параметры

| Поле | Где | Тип | Обяз. | Описание |
| --- | --- | --- | --- | --- |
| `order` | path | `string` | обяз. | UUID заказа — 36 символов вида `9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c`, не число. Берётся из поля `id`: его возвращает `POST /orders` при создании и `GET /orders` в списке. Чужой заказ по вашему ключу не откроется — придёт `404`. |
| `X-Locale` | header | `string` | — | Язык локализованных текстов ответа (`message`, подписи, причины ошибок), код ISO-639-1. Необязателен; без него — язык аккаунта владельца ключа, затем `Accept-Language`, затем язык по умолчанию. Неизвестный или неподдерживаемый код пропускается так же, как отсутствующий. |
| `X-Timezone` | header | `string` | — | IANA-зона (`Europe/Moscow`), в которой ответ показывает моменты времени — ISO-8601 со смещением. Необязателен; без него даты приходят в UTC. Невалидная зона игнорируется. Применённую зону сервер возвращает в одноимённом заголовке ответа. |

## Тело запроса

Тела нет.

## Ответы

### 200 — Список элементов заказа

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `success` | `boolean` | обяз. | Признак успеха. Решение принимайте по HTTP-коду: у любого ответа 2xx здесь `true`, а ошибка приходит телом другой формы, где этого поля может не быть вовсе. |
| `message` | `string` | обяз. | Пояснение для человека, на языке аккаунта. Показать пользователю можно; разбирать программно — нет: формулировки меняются без предупреждения и кодом ошибки не являются. |
| `data` | `array<OrderItem>` | обяз. | Все фрагменты заказа, включая повторы и перегенерации. Порядок склейки задаёт `chunk_index`, а не позиция в списке. |
| `data[].id` | `string` | обяз. | UUID чанка. Подставляется в пути `/orders/{order}/items/{item}/…`. |
| `data[].order_id` | `string` | обяз. | UUID заказа, которому принадлежит чанк. |
| `data[].item_type` | `string` | обяз. | Природа записи: `chunk` — исходный фрагмент, `retry` — бесплатный повтор упавшего фрагмента, `regeneration` — платная переделка готового. Повторы и перегенерации живут отдельными записями с тем же `chunk_index`: история попыток сохраняется целиком, а звучит в результате последняя. |
| `data[].chunk_index` | `integer` — nullable | обяз. | Порядковый номер фрагмента в заказе, с нуля. Задаёт порядок склейки итогового файла. |
| `data[].paragraph_index` | `string` | обяз. | Номер абзаца, к которому относится фрагмент, — заполняется только у исходных фрагментов абзацного заказа. `null` и в обычном режиме, и у записей повтора либо перегенерации: у них своей привязки к абзацу нет, её берут у родительского фрагмента через `parent_item_id`. Режим включается ключом `generation_mode` в `config_override` заказа. |
| `data[].parent_item_id` | `string` | обяз. | UUID исходного чанка — у записей `retry` и `regeneration`. У самого исходного чанка `null`. |
| `data[].original_text_length` | `integer` | обяз. | Длина текста, с которой фрагмент создавался. Служит потолком для `text` в `regenerate`. |
| `data[].current_text_length` | `integer` | обяз. | Длина актуального текста фрагмента: после перегенерации отличается от `original_text_length`. |
| `data[].price_units` | `integer` | обяз. | Стоимость фрагмента в **токенах** — это не деньги. Денежная сумма лежит у самого заказа, в его поле `price_units` (там LMC, здесь токены; поля называются одинаково, единицы разные). |
| `data[].consumed_units` | `integer` | обяз. | Сколько токенов фактически списано по этому фрагменту. У незавершённого фрагмента — 0. |
| `data[].remaining_locked` | `integer` | обяз. | Сколько токенов ещё зарезервировано под фрагмент. Обнуляется, когда фрагмент завершается или отменяется. |
| `data[].status` | `string` | обяз. | Состояние фрагмента: `pending` — ждёт воркера, `processing` — в работе, `completed` — готов, `failed` — техническая ошибка, `policy_flagged` — отклонён контентной политикой. Разница между двумя последними определяет способ лечения: `failed` чинится повтором как есть, `policy_flagged` — только переформулировкой текста, повтор с прежним будет отклонён снова. Попытка `policy_flagged` у ElevenLabs не бесплатна: она расходует ресурс провайдера и без результата, поэтому из суммы, которая вернулась бы за фрагмент, удерживается фиксированная плата за попытку (на заказах из квоты — эквивалент в токенах). Удерживается только из возвращаемого — сверх заблокированного по заказу не списывается ничего, баланс в минус не уходит. Денежная часть видна в истории операций как `policy_block_fee`; из квоты просто возвращается меньше токенов. |
| `data[].result_file` | `object \| string \| null` — nullable | обяз. | Файл готового фрагмента: абсолютный путь либо структура с путём и размером. Скачивается через `POST /storage/url`, как и файлы заказа. `null`, пока фрагмент не готов. |
| `data[].duration_ms` | `integer` — nullable | обяз. | Длительность полученного аудио в миллисекундах — длина записи, а не время генерации. У не-аудио задач `null`. |
| `data[].attempt_number` | `integer` | обяз. | Номер попытки для этого фрагмента, начиная с 1. Растёт с каждым повтором. |
| `data[].can_retry` | `boolean` | обяз. | Разрешён ли бесплатный повтор прямо сейчас. Учитывает статус, тип задачи и исчерпание попыток — проверять условия самому не нужно. |
| `data[].can_regenerate` | `boolean` | обяз. | Разрешена ли платная перегенерация прямо сейчас. Доступна только для завершённых фрагментов. |
| `data[].created_at` | `string` — date-time — nullable | обяз. | Когда фрагмент создан, ISO 8601. |
| `data[].updated_at` | `string` — date-time — nullable | обяз. | Когда фрагмент последний раз менялся, ISO 8601. |
| `data[].failure_reason` | `string` — nullable | — | Причина падения фрагмента для показа пользователю — локализованный текст на языке запроса, не машинный код (ветвиться по нему нельзя, формулировки меняются). Есть только у `failed` и `policy_flagged`; остальным, а также когда причину определить не удалось, приходит `null`. |

**Пример**

```json
{
  "success": true,
  "message": "Order items retrieved successfully.",
  "data": [
    {
      "id": "d4e5f6a7-8b9c-4d0e-8f1a-2b3c4d5e6f7a",
      "order_id": "9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c",
      "item_type": "chunk",
      "chunk_index": 0,
      "parent_item_id": null,
      "original_text_length": 240,
      "current_text_length": 240,
      "price_units": 240,
      "consumed_units": 240,
      "remaining_locked": 0,
      "status": "completed",
      "result_file": {
        "path": "storage/501/orders/9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c/output/chunks/0/result.mp3",
        "storage": "s3",
        "name": "chunk_0.mp3",
        "size": 512340,
        "mime_type": "audio/mpeg",
        "size_formatted": "500.33 KB"
      },
      "attempt_number": 1,
      "can_retry": false,
      "can_regenerate": true,
      "created_at": "2026-07-17T12:00:05+00:00",
      "updated_at": "2026-07-17T12:02:10+00:00"
    },
    {
      "id": "e5f6a7b8-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
      "order_id": "9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c",
      "item_type": "chunk",
      "chunk_index": 1,
      "parent_item_id": null,
      "original_text_length": 180,
      "current_text_length": 180,
      "price_units": 180,
      "consumed_units": 180,
      "remaining_locked": 0,
      "status": "completed",
      "result_file": {
        "path": "storage/501/orders/9f8b2c1a-4d3e-4f5a-8b9c-0d1e2f3a4b5c/output/chunks/1/result.mp3",
        "storage": "s3",
        "name": "chunk_1.mp3",
        "size": 398210,
        "mime_type": "audio/mpeg",
        "size_formatted": "388.88 KB"
      },
      "attempt_number": 1,
      "can_retry": false,
      "can_regenerate": true,
      "created_at": "2026-07-17T12:00:05+00:00",
      "updated_at": "2026-07-17T12:02:45+00:00"
    }
  ]
}
```

### 401 — Не авторизован (отсутствует/невалидный X-API-KEY)

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `success` | `boolean` | обяз. | Всегда `false` в ответах об ошибке. |
| `message` | `string` | обяз. | Текст ошибки на языке ключа (задаётся заголовком `X-Locale`). |
| `data` | `null` — nullable | обяз. | Всегда `null`, когда запрос отклонён до обработки. |

**Пример**

```json
{
  "success": false,
  "message": "API key is missing. Provide it in the X-API-KEY header.",
  "data": null
}
```

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

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `message` | `string` | обяз. | Error overview. |

**Пример**

```json
{
  "success": false,
  "message": "This API key does not have permission to perform this action."
}
```

### 404 — Заказ не найден

**Поля ответа**

| Поле | Тип | Обяз. | Описание |
| --- | --- | --- | --- |
| `message` | `string` | обяз. | Error overview. |

**Пример**

```json
{
  "success": false,
  "message": "Resource not found."
}
```

---

- Эта же страница в браузере: https://lumean.app/developers/docs/api/get-orders-order-items
- Машинный справочник целиком: https://api.lumean.app/docs/llm.md
