> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aigenda.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Статусы и ожидание

> Как понять, что результат готов, что обработка ещё идёт или упала.

Уведомлений о готовности у API нет, результат нужно опрашивать. Источник правды: ответ [`GET /api/spaces/{space_id}/audio/{audio_id}/result/`](/api-reference/processing/result).

## Состояния

| Ответ `result/` | Поля в `info/` | Что значит | Что делать |
| - | - | - | - |
| `404`, HTML-страница | `was_classified: false` | Обработку не запускали | Вызовите [`classify`](/processing/start) |
| `200`, `classified: false` | `was_classified: true` | Обработка идёт | Ждите, опрашивайте дальше |
| `200`, `classified: true`, `success: true` | `result_is_ready: true` | Готово | Заберите [результат](/processing/result) |
| `500`, HTML-страница, держится больше 3 минут | `was_classified: true`, `result_is_ready: false` | Обработка упала | См. ниже |

<Note>
  Ошибки `404` и `500` приходят HTML-страницей, а не JSON. Проверяйте код ответа до разбора тела.
</Note>

## Сколько ждать

Короткая запись обрабатывается за 1–4 минуты. Длинные записи и очередь в часы нагрузки добавляют время. Опрашивайте раз в 10–15 секунд и закладывайте общий таймаут не меньше часа.

## Если обработка упала

Сначала обработка идёт как обычно (`200`, `classified: false`), потом `result/` начинает отвечать `500`. Если `500` держится дольше 3 минут подряд, считайте обработку упавшей. Минуты вернутся сами.

Частые причины:

* в `title` нет расширения файла или оно не то, см. [Форматы](/upload/formats);
* в файле нет длительности, см. [Длительность в файле](/upload/formats);
* файл повреждён или в нём нет звука.

Исправьте файл или название и загрузите запись заново.

## Готовый код

```python Python theme={null}
import time

import requests

API = "https://api.aigenda.tech"


def wait_for_result(token: str, space_id: int, audio_id: int, timeout: int = 3600) -> dict:
    """Ждёт результат обработки. Возвращает тело ответа result/ или бросает исключение."""
    headers = {"Authorization": f"Bearer {token}"}
    url = f"{API}/api/spaces/{space_id}/audio/{audio_id}/result/"
    started = time.monotonic()
    not_found_since = None
    failing_since = None

    while time.monotonic() - started < timeout:
        r = requests.get(url, headers=headers, timeout=30)
        now = time.monotonic()

        if r.status_code == 200:
            not_found_since = failing_since = None
            body = r.json()
            if body.get("classified") and body.get("result"):
                return body
        elif r.status_code == 404:
            # сразу после classify статус может обновиться не мгновенно
            not_found_since = not_found_since or now
            if now - not_found_since > 60:
                raise RuntimeError("Обработка не запущена: вызовите classify")
        elif r.status_code >= 500:
            failing_since = failing_since or now
            if now - failing_since > 180:
                raise RuntimeError("Обработка упала, минуты вернутся автоматически")

        time.sleep(15)

    raise TimeoutError("Результат не готов за отведённое время")
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.