# Задачи и результаты

> Статусы, результат и история задач.

## <a id="status"></a>Проверить статус

```bash
curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```python
import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

response = requests.get(f"{API}/tasks/TASK_ID", headers=HEADERS, timeout=30)
response.raise_for_status()
task = response.json()
print(task["status"], task.get("stage"))
```

Замените TASK_ID на id принятой задачи. Пока задача в работе, спрашивайте статус раз в несколько секунд. В stage текст того, что модель делает сейчас.

| Статус | Значение |
|---|---|
| `queued` | Задача принята и ждёт очереди. |
| `running` | Генерация выполняется. |
| `succeeded` | Результат готов, деньги списаны. |
| `failed` | Генерация не удалась, резерв возвращён. Причина в error. |
| `cancelled` | Задача отменена, резерв возвращён. |

## <a id="result"></a>Получить результат

У succeeded в result: caption (описание результата), texts (тексты, например слова песни) и artifacts, файлы с index, kind (image, video, audio, document), filename, size и download_path.

У failed причина в error, на языке кабинета. Резерв уже возвращён, повторный запуск это новая задача.

У черновика Seedance (задача с draft: true) есть поле draft: можно ли пересобрать его в высоком качестве (upscale_status), до какого времени (upscale_until) и готовый запрос для этого (upscale_request). Пересобрать черновик можно один раз, режимом upscale_draft той же модели. У остальных задач draft равно null.

[Скачать файлы результата](https://api.cyhub.ai/docs/files.md?lang=ru#download)

[Пересборка черновика Seedance](https://api.cyhub.ai/models/seedance-2-5/api.md#upscale_draft)

## <a id="history"></a>История

```bash
curl "https://api.cyhub.ai/v1/tasks?limit=30" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```python
import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

response = requests.get(f"{API}/tasks?limit=30", headers=HEADERS, timeout=30)
response.raise_for_status()
page = response.json()
for task in page["tasks"]:
    print(task["id"], task["model_key"], task["status"])
print("next:", page["next_cursor"])
```

Фильтры status и model (ключ модели), limit от 1 до 100. Следующая страница: next_cursor из ответа в параметр before.
