---
title: Результат генерации
description: GET /v1/requests/{request_id} — забрать готовый результат со ссылками на изображение, видео или аудио; пока задача выполняется, API отвечает 202.
icon: PackageCheck
---

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

## Песочница

<Callout type="info" title="Для проб — тестовый ключ">
В форму ниже вставляйте ключ `clipia_test_…`: он не списывает кредиты и не вызывает модели, а ответ приходит в том же формате. Форма запоминает ключ в этом браузере, поэтому боевой `clipia_live_…` — серверный секрет — в неё не вводите. Подробнее — [«Тестовый режим»](/ru/docs/getting-started/sandbox).
</Callout>

<ApiPlayground path="/v1/requests/{request_id}" method="get" />

`GET /v1/requests/:id` возвращает результат с полем `output` и кодом `200`, когда статус терминальный (`COMPLETED`, `FAILED` или `CANCELED`). Все ссылки ведут на CDN `media.clipia.ai`. Отдельное право ключа не требуется.

<Method name="GET" path="/v1/requests/:id" />

## Запрос

<TypeTable
  type={{
    id: { type: 'string', description: 'request_id из ответа на отправку.', required: true }
  }}
/>

<Tabs items={['cURL', 'TypeScript', 'Python']}>
<Tab value="cURL">

```bash
curl https://api.clipia.ai/v1/requests/764cabcf-b745-4b3e-ae38-1200304cf45b \
  -H "Authorization: Bearer $CLIPIA_KEY"
```

</Tab>
<Tab value="TypeScript">

```ts
const result = await clipia.queue.result('764cabcf-b745-4b3e-ae38-1200304cf45b');

// Пока генерация выполняется, API отвечает 202, и SDK ставит pending: true.
if (result.pending) {
  console.log('ещё в работе:', result.status);
} else {
  console.log(result.output?.images?.[0]?.url);
}
```

</Tab>
<Tab value="Python">

```python
result = client.result("764cabcf-b745-4b3e-ae38-1200304cf45b")

# Пока генерация выполняется, API отвечает 202, и SDK ставит pending = True.
if result.pending:
    print("ещё в работе:", result.status)
else:
    print(result.output["images"][0]["url"])
```

</Tab>
</Tabs>

## Изображение

```json
{
  "request_id": "764cabcf-b745-4b3e-ae38-1200304cf45b",
  "status": "COMPLETED",
  "model": "nano-banana-2",
  "output": {
    "images": [
      {
        "url": "https://media.clipia.ai/....webp",
        "original_url": "https://media.clipia.ai/....png"
      }
    ]
  },
  "cost": 12,
  "created_at": "2026-10-09T12:00:00Z",
  "completed_at": "2026-10-09T12:00:18Z"
}
```

`output.images` — массив. `url` — оптимизированная копия в WebP для показа, `original_url` — исходный файл полного качества. `original_url` есть только у первого изображения в массиве.

## Видео

```json
{
  "request_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
  "status": "COMPLETED",
  "model": "seedance-2-fast-i2v",
  "output": {
    "video": {
      "url": "https://media.clipia.ai/....mp4",
      "original_url": "https://media.clipia.ai/....mp4",
      "thumbnail_url": "https://media.clipia.ai/....webp"
    }
  },
  "cost": 40,
  "created_at": "2026-10-09T12:00:00Z",
  "completed_at": "2026-10-09T12:00:42Z"
}
```

`output.video` — объект с `url`. Поля `original_url` и `thumbnail_url` (кадр-превью) могут отсутствовать.

## Аудио

```json
{
  "output": {
    "audio": { "url": "https://media.clipia.ai/....mp3", "format": "mp3" },
    "audios": [
      { "url": "https://media.clipia.ai/....mp3", "format": "mp3" },
      { "url": "https://media.clipia.ai/...-2.mp3", "format": "mp3" }
    ]
  }
}
```

`output.audio` — первый трек, `output.audios` — все варианты: музыкальные модели отдают несколько треков за один запуск, у озвучки вариант один. Первый элемент `audios` совпадает с `audio`. Поле `format` — формат файла по расширению ссылки (`mp3`, `wav`); его может не быть.

<Callout type="info" title="Размеров и длительности в ответе нет">
В ответе нет полей `width`, `height` и `duration` — ни в боевом, ни в [тестовом режиме](/ru/docs/getting-started/sandbox). Если они нужны, прочитайте их из самого файла.
</Callout>

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

<TypeTable
  type={{
    request_id: { type: 'string', description: 'Идентификатор запроса' },
    status: { type: 'string', description: 'COMPLETED, FAILED или CANCELED' },
    model: { type: 'string', description: 'Slug модели' },
    output: { type: 'object', description: 'images: [{ url, original_url? }], video: { url, original_url?, thumbnail_url? } или audio: { url, format? } вместе с audios: [{ url, format? }]. У FAILED и CANCELED обычно пустой объект' },
    cost: { type: 'integer', description: 'Кредиты: списано по факту; у FAILED и CANCELED — 0, резерв возвращён' },
    created_at: { type: 'string', description: 'Время создания запроса, ISO 8601' },
    completed_at: { type: 'string', description: 'Время завершения, ISO 8601; поля может не быть' },
    error: { type: 'object', description: '{ code, message } — только при status = FAILED; code — из словаря ниже' },
    warnings: { type: 'array', description: '[{ code, parameter, message }] — параметры, от которых сервер отступил при исполнении. Поля нет, когда предупреждать не о чем' }
  }}
/>

## Предупреждения

Если звук был включён, но звуковая дорожка не прошла проверку безопасности модели, сервер один раз повторяет генерацию без звука. Запрос завершается `COMPLETED`, а ответ дополнительно содержит массив `warnings`:

```json
{
  "status": "COMPLETED",
  "output": { "video": { "url": "https://media.clipia.ai/....mp4" } },
  "warnings": [
    {
      "code": "audio_dropped",
      "parameter": "generate_audio",
      "message": "The audio track did not pass the model's safety check, so the video is generated without sound. The price of the request is unchanged."
    }
  ]
}
```

Стоимость запроса при этом не меняется. Поля `warnings` нет, когда предупреждать не о чем, а также у `FAILED` и `CANCELED`. Тот же массив приходит в ответе `202` и в [статусе запроса](/ru/docs/api-reference/status), пока ролик без звука ещё создаётся. Сейчас это единственная причина; незнакомый `code` читайте как «параметр не применён».

## Коды ошибки генерации [#failed-codes]

При `status: "FAILED"` объект `error` несёт код из закрытого словаря — по нему клиент решает, повторять ли запрос. Сообщение `error.message` на английском: готовая фраза о причине, если сервер её опознал, иначе нейтральный текст по коду, обычно `Generation failed. Please retry or contact support.`; имён внутренних систем в нём нет. Кредиты за `FAILED` возвращаются всегда.

| `error.code` | Смысл | Повтор |
|------|-------|--------|
| `generation_failed` | общая ошибка генерации, значение по умолчанию | можно |
| `content_moderated` | запрос отклонён модерацией контента | с тем же вводом бесполезен |
| `invalid_input` | ввод не принят моделью: размер, формат, параметры | исправьте запрос |
| `model_unavailable` | модель временно недоступна | позже |
| `timeout` | генерация не уложилась во время | можно |
| `rate_limited` | модель перегружена | с паузой |
| `insufficient_credits` | не хватило кредитов на момент списания | после пополнения |
| `result_unavailable` | результат получен, но не сохранён или недоступен | можно |
| `empty_result` | модель вернула пустой результат | можно или измените запрос |
| `canceled` | отменено пользователем или системой | — |

Тот же словарь использует [вебхук](/ru/docs/api-reference/webhooks) об ошибке. Список может пополняться: незнакомый код обрабатывайте как `generation_failed`.

## Коды ответа

| HTTP | Когда | Тело |
|------|-------|------|
| `200` | `COMPLETED` | результат с `output` |
| `200` | `FAILED` | `error: { code, message }`, `code` из словаря выше, по умолчанию `generation_failed`; `cost: 0` |
| `200` | `CANCELED` | терминальный ответ, `output` обычно пустой, `cost: 0` |
| `202` | `IN_QUEUE` / `IN_PROGRESS` | `{ request_id, status }` — повторите позже |
| `400` | некорректный идентификатор | `message: invalid_request_id` |
| `404` | запроса нет | `code: not_found`, `message: request_not_found` |

<Callout type="info" title="202 — это нормально">
`202` приходит, только пока задача не завершена. `FAILED` и `CANCELED` — финальные ответы с кодом `200`. При `FAILED` зарезервированные кредиты возвращаются полностью. В `error.code` чаще всего `generation_failed` (коды строчные, в snake_case), `error.message` на английском: готовая фраза о причине, если сервер её опознал, иначе нейтральный текст по коду; внутренних деталей в нём нет. Ветвите логику по `status` и `error.code`, а не по тексту сообщения.
</Callout>
