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

# Get Generation Status

> Poll the status of an async generation

Poll the status of a pending generation. Use for video, slow image models, and any generation where the initial response had `status: "pending"`.

<ParamField path="generation_id" type="integer" required>
  The integer ID returned from `POST /api/v2/generate`.
</ParamField>

## Request

```bash theme={null}
curl https://elumenta.ru/api/v2/generate/18502 \
  -H "Authorization: Bearer nb_YOUR_API_KEY"
```

## Responses

**Pending:**

```json theme={null}
{
  "id": 18502,
  "status": "pending",
  "model_slug": "kling-v2.1-pro",
  "result_url": null,
  "tokens_spent": 0
}
```

**Completed:**

```json theme={null}
{
  "id": 18502,
  "status": "completed",
  "model_slug": "kling-v2.1-pro",
  "result_url": "https://storage.elumenta.ru/generations/18502.mp4",
  "thumbnail_url": "https://storage.elumenta.ru/thumbnails/18502.jpg",
  "tokens_spent": 60,
  "processing_ms": 87420,
  "result_metadata": { "duration": 5, "width": 1920, "height": 1080 }
}
```

**Failed (no tokens charged):**

```json theme={null}
{
  "id": 18503,
  "status": "failed",
  "error": "Provider error: content policy violation",
  "tokens_spent": 0
}
```

## Recommended Polling Pattern

```python theme={null}
import requests, time

def poll(gen_id: int, api_key: str, timeout=300) -> dict:
    headers = {"Authorization": f"Bearer {api_key}"}
    deadline = time.time() + timeout
    while time.time() < deadline:
        data = requests.get(
            f"https://elumenta.ru/api/v2/generate/{gen_id}",
            headers=headers
        ).json()
        if data["status"] in ("completed", "failed"):
            return data
        time.sleep(5)
    raise TimeoutError(f"Timed out after {timeout}s")
```
