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

# Get Generation

> Retrieve the current status and output of a generation.

## Path Parameters

<ParamField path="id" type="string" required>
  The UUID of the generation, returned when you [created it](/api-reference/generations/create).
</ParamField>

***

## Response `200 OK`

<ResponseField name="data" type="object">
  <Expandable title="Generation object" defaultOpen>
    <ResponseField name="id" type="string">Generation UUID.</ResponseField>

    <ResponseField name="status" type="string">
      `pending` — queued and waiting to start

      `processing` — actively running on the model

      `completed` — finished, `output` is populated

      `failed` — did not complete, `error` explains why. **You were not charged.**
    </ResponseField>

    <ResponseField name="model" type="string">The model slug used.</ResponseField>
    <ResponseField name="type" type="string">`video` | `image`</ResponseField>
    <ResponseField name="prompt" type="string">The original prompt.</ResponseField>

    <ResponseField name="parameters" type="object">
      Resolved parameters used for generation (aspect\_ratio, duration, resolution, mode).
    </ResponseField>

    <ResponseField name="output" type="object | null">
      `null` while pending or processing.

      **Video:**

      ```json theme={null}
      {
        "url": "https://veogen.studio/storage/videos/uuid.mp4",
        "download_url": "https://veogen.studio/storage/videos/uuid.mp4?download=1",
        "content_type": "video/mp4"
      }
      ```

      **Image:**

      ```json theme={null}
      {
        "url": "https://veogen.studio/storage/images/uuid.png",
        "content_type": "image/png"
      }
      ```
    </ResponseField>

    <ResponseField name="error" type="string | null">
      Human-readable error message. Only present when `status` is `failed`.
    </ResponseField>

    <ResponseField name="created_at" type="string">ISO 8601 creation timestamp.</ResponseField>
    <ResponseField name="completed_at" type="string | null">ISO 8601 completion timestamp.</ResponseField>
  </Expandable>
</ResponseField>

***

## Polling Recommendations

* **Image generations** typically complete in 5–15 seconds. Poll every 3 seconds.
* **Video generations** typically take 30–120 seconds. Poll every 5–10 seconds.
* Stop polling once `status` is `completed` or `failed`.

***

## Example

```bash theme={null}
curl https://veogen.studio/api/v1/generations/01928abc-def0-7123-b456-789012345678 \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"
```

**Response (completed video):**

```json theme={null}
{
  "data": {
    "id": "01928abc-def0-7123-b456-789012345678",
    "status": "completed",
    "model": "veo-3.1-fast",
    "type": "video",
    "prompt": "Ocean waves crashing on a rocky shore, dramatic storm clouds",
    "parameters": {
      "aspect_ratio": "16:9",
      "resolution": "1080p"
    },
    "output": {
      "url": "https://veogen.studio/storage/videos/01928abc.mp4",
      "download_url": "https://veogen.studio/storage/videos/01928abc.mp4?download=1",
      "content_type": "video/mp4"
    },
    "error": null,
    "created_at": "2025-01-15T10:30:00+00:00",
    "completed_at": "2025-01-15T10:31:15+00:00"
  }
}
```

**Response (failed):**

```json theme={null}
{
  "data": {
    "id": "01928abc-def0-7123-b456-789012345679",
    "status": "failed",
    "model": "veo-3.1-fast",
    "type": "video",
    "prompt": "...",
    "parameters": {},
    "output": null,
    "error": "The model rejected the prompt due to content policy.",
    "created_at": "2025-01-15T10:30:00+00:00",
    "completed_at": "2025-01-15T10:30:05+00:00"
  }
}
```

<Note>
  If the generation failed on our infrastructure (not due to your content), you are automatically refunded the full `price_usd`.
</Note>
