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

# OpenAI Sora 2 Pro — Image to Video

> Animate a reference image with a text prompt at 720p or 1080p, with synchronized audio.

|              |                         |
| ------------ | ----------------------- |
| **Model ID** | `openai/sora-2-pro-i2v` |
| **Family**   | `sora-2-pro`            |
| **Task**     | `image-to-video`        |
| **Modality** | Video                   |
| **Upstream** | OpenAI Sora 2 Pro       |

<Note>
  Pro and Basic share the same upstream endpoint; the Pro variant flips
  `professional: true` server-side and unlocks the `resolution`
  parameter. Pricing differs significantly from Basic — see the
  [quickstart](/openai-sora-2-pro-api/quickstart).
</Note>

## Endpoint

```http theme={null}
POST https://routerbase.com/v1/videos/generations
```

Async — returns `{id, status: "pending"}`; poll
`GET /v1/videos/generations/{id}` until `success` or `failed`.

## Parameters

<ParamField body="prompt" type="string" required>
  Text prompt describing the desired motion or scene change. Audio
  cues in the prompt feed Sora 2's synthesized audio track. **Maximum
  2000 characters** — longer prompts are rejected with `400 invalid_request_error`.
</ParamField>

<ParamField body="image_urls" type="string[]" required>
  Exactly one source-image URL (PNG / JPEG, publicly accessible over
  HTTPS). Mapped to upstream `image`.
</ParamField>

<ParamField body="duration" type="&#x22;4&#x22; | &#x22;8&#x22; | &#x22;12&#x22;" default="&#x22;4&#x22;">
  Length of the generated clip in seconds.
</ParamField>

<ParamField body="resolution" type="&#x22;720p&#x22; | &#x22;1080p&#x22;" default="&#x22;720p&#x22;">
  Output resolution. Pro unlocks 1080p; 720p is also available at the
  lower Pro price tier (see [pricing](/openai-sora-2-pro-api/quickstart#pricing)).
</ParamField>

## Example — 720p

```bash theme={null}
curl https://routerbase.com/v1/videos/generations \
  -H "Authorization: Bearer $ROUTERBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/sora-2-pro-i2v",
    "prompt": "the cat slowly turns its head and blinks, soft purr",
    "image_urls": ["https://example.com/cat.jpg"],
    "duration": "4",
    "resolution": "720p"
  }'
```

```json theme={null}
{ "id": "vid_xyz789…", "status": "pending", "model": "openai/sora-2-pro-i2v" }
```

## Example — 1080p

```bash theme={null}
curl https://routerbase.com/v1/videos/generations \
  -H "Authorization: Bearer $ROUTERBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/sora-2-pro-i2v",
    "prompt": "the dog leaps off the dock, splash, distant cheer",
    "image_urls": ["https://example.com/dog.jpg"],
    "duration": "8",
    "resolution": "1080p"
  }'
```

Poll until terminal:

```bash theme={null}
curl https://routerbase.com/v1/videos/generations/vid_xyz789… \
  -H "Authorization: Bearer $ROUTERBASE_API_KEY"
```

```json theme={null}
{
  "id": "vid_xyz789…",
  "status": "success",
  "data": [{ "url": "https://…mp4" }]
}
```

<Note>
  Try it live in the
  [Sora 2 Pro Playground](https://routerbase.com/models/openai/sora-2-pro/image-to-video).
</Note>
