# getGeneration

`getGeneration`

`GET /v1/generations/{id}`

## Authentication

Send your project key in the request header, for example `Authorization: Bearer $VIZO_API_KEY`. Keep the key on your server.

## Path parameters

- `id` (string, Required) Resource ID. Save it as soon as you receive it.

## Responses

### 200 OK

- `allowed_actions` (string[], Required, can be null) Actions you can take now, such as cancel. Rely on this list instead of inferring from the status.
- `billing_status` (string, Required) Whether Credits are held, charged or released.
- `closed_at` (date-time, Required, can be null) When the task closed. Stop polling once it is not null.
- `customer_resolution_deadline` (date-time, Required) Twenty-four hours after acceptance. Holds still unsettled at this time are released.
- `delivery_status` (string, Required) Whether the result is stored and downloadable. ready means it can be downloaded.
- `error` (object, Required, can be null) Set when the task closed without a result. Read error.code.
  - `code` (string, Required) Why the task closed without a result, for example insufficient_balance, budget_exceeded or spending_blocked.
- `execution_status` (string, Required) Progress of the model run.
- `id` (string, Required) Resource ID. Save it as soon as you receive it.
- `late_result_available` (boolean, Required) A result that arrived after closing is provided at no charge.
- `metadata` (map<string, string>, Optional) Your own string values, returned unchanged. Put client_reference here so a lost response can be matched later.
- `price` (object, Required) Credits for this task: quoted (the price when it was accepted), reserved and charged. charged stays 0.000 until settlement.
  - `charged` (string, Required)
  - `price_version` (string, Required)
  - `quoted` (string, Required)
  - `reserved` (string, Required)
  - `unit` (string, Required) Allowed values: `credit`
- `result` (object, Required, can be null) Delivered assets, once available.
  - `asset_id` (string, Optional)
  - `last_frame_asset_id` (string, Optional)
  - `metadata` (object, Optional)
    - `duration` (integer, Optional)
    - `frames` (integer, Optional)
    - `framespersecond` (integer, Optional)
    - `generate_audio` (boolean, Optional)
    - `ratio` (string, Optional)
    - `resolution` (string, Optional)
    - `seed` (integer, Optional)
  - `outputs` (object[], Optional, can be null)
    - `asset_id` (string, Required)
    - `content_type` (string, Required)
    - `index` (integer, Required)
  - `voice_id` (string, Optional)
- `status` (string, Required) Overall state of the task.
- `version` (integer, Required)

```json
{
  "allowed_actions": [
    "cancel"
  ],
  "billing_status": "held",
  "closed_at": null,
  "customer_resolution_deadline": "2026-11-03T08:00:12Z",
  "delivery_status": "pending",
  "error": null,
  "execution_status": "queued",
  "id": "gen_01JD8Z5QW3XR",
  "late_result_available": false,
  "metadata": {
    "client_reference": "order-1042"
  },
  "price": {
    "charged": "0.000",
    "price_version": "p3",
    "quoted": "1400.000",
    "reserved": "1400.000",
    "unit": "credit"
  },
  "result": null,
  "status": "queued",
  "version": 1
}
```

### 401 Unauthorized

```json
{
  "error": {
    "code": "invalid_credentials",
    "message": "API key is missing, malformed, expired or revoked.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 402 Payment Required

```json
{
  "error": {
    "code": "insufficient_balance",
    "message": "Available credits cannot cover the hold.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 403 Forbidden

```json
{
  "error": {
    "code": "scope_denied",
    "message": "The key does not allow this operation for this project.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 404 Not Found

```json
{
  "error": {
    "code": "resource_not_found",
    "message": "The resource is not available to this project.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 409 Conflict

```json
{
  "error": {
    "code": "conflict",
    "message": "The request conflicts with the current state of the resource.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 422 Unprocessable Entity

```json
{
  "error": {
    "code": "invalid_input",
    "message": "Input does not match the published schema.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 429 Too Many Requests

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Check Retry-After.",
    "retryable": true,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 500 Internal Server Error

```json
{
  "error": {
    "code": "request_failed",
    "message": "The request failed. Check recent generations before submitting again.",
    "retryable": false,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

### 503 Service Unavailable

```json
{
  "error": {
    "code": "temporarily_unavailable",
    "message": "Service is temporarily unavailable.",
    "retryable": true,
    "request_id": "9f2c41d07ab3e5c8"
  }
}
```

## Errors

Errors share one body. Include the request_id when you contact support.

### Error body

- `error` (object, Required) Details of the error.
  - `code` (string, Required) Stable error code to branch on.
  - `message` (string, Required) Readable explanation. Do not parse it.
  - `request_id` (string, Required) Include this when you contact support.
  - `retryable` (boolean, Required) True for 429 and 503 only. Even then, check recent tasks before you send a create request again.
  - `task_id` (string, Optional) The task this error belongs to, when one exists.

| Status | What it means and what to do |
| --- | --- |
| 401 | The key is missing, malformed, expired or revoked. Correct the key on your server, then continue. |
| 402 | Available Credits cannot cover this request. Add Credits, wait for them to be credited, then check the balance. |
| 403 | The key scope, email verification, a budget or an account restriction blocks this. Check the key type, scopes and project budget. |
| 404 | The model or resource does not exist or is outside this project. Check the project, the ID and that the model is enabled. |
| 409 | The request conflicts with the current state. Read the resource again and decide whether to send the request again. |
| 422 | A field or value is invalid. Compare the request with the field table and the model page. |
| 429 | Too many requests. No task was created. Wait for the Retry-After time before sending again. |
| 500 | The server failed and the task may already be accepted. Do not resend; list recent tasks first. |
| 503 | The service is temporarily unavailable. For a create request, list recent tasks and confirm none was accepted before you submit again. |

### cURL

```bash
curl "https://api.vizoapi.com/v1/generations/$GENERATION_ID" \
  -H "Authorization: Bearer $VIZO_API_KEY"
```

### Python

```python
import os, requests

generation_id = "…"
res = requests.get(
    f"https://api.vizoapi.com/v1/generations/{generation_id}",
    headers={"Authorization": f"Bearer {os.environ['VIZO_API_KEY']}"},
    timeout=60,
)
print(res.status_code, res.json())
```

### Node.js

```javascript
const generation_id = "…";
const res = await fetch(`https://api.vizoapi.com/v1/generations/${generation_id}`, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.VIZO_API_KEY}`,
  },
});
console.log(res.status, await res.json());
```
