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

# VideoGenerationResponse

## Example Usage

```typescript theme={null}
import { VideoGenerationResponse } from "@openrouter/sdk/models";

let value: VideoGenerationResponse = {
  id: "gen-vid-1789480874-Ab3dEf9hIjKlMnOpQrSt",
  pollingUrl: "/api/v1/videos/gen-vid-1789480874-Ab3dEf9hIjKlMnOpQrSt",
  status: "pending",
};
```

## Fields

| Field | Type | Required | Description | Example |
| - | - | - | - | - |
| `error` | *string* | ➖ | N/A | |
| `expiresAt` | *number* | ➖ | Unix timestamp in seconds when OpenRouter's stored copy of the outputs stops being available. Present only when that copy exists. | |
| `generationId` | *string* | ➖ | The generation ID associated with this video generation job. Available once the job has been processed. | |
| `id` | *string* | ✔️ | The video job ID, in the `gen-vid-<timestamp>-<20 alphanumerics>` generation ID format. Pass it as `previous_job_id` to continue the generation. | |
| `pollingUrl` | *string* | ✔️ | N/A | |
| `status` | [models.VideoGenerationResponseStatus](../models/videogenerationresponsestatus.mdx) | ✔️ | N/A | |
| `unsignedUrls` | *string*\[] | ➖ | OpenRouter content URLs for each output. They need your API key in the `Authorization` header and keep working for as long as the output is available. | |
| `urls` | *string*\[] | ➖ | Signed download URLs for OpenRouter's stored copy of each output, usable without an API key until `expires_at`. Anyone holding a URL can download that output until it expires, so treat it like a secret. Present only when the stored copy exists. | |
| `usage` | [models.VideoGenerationUsage](../models/videogenerationusage.mdx) | ➖ | Usage and cost information for the video generation. Available once the job has completed. | \{ "cost": 0.5, "is\_byok": false } |
