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

# Veo 3.1 video

> Generate an 8 second video with sound using Google Veo 3.1 at its Quality tier in 1080p, from a text prompt or from a still image you supply. Returns the URL of

Generate an 8 second video with sound using Google Veo 3.1 at its Quality tier in 1080p, from a text prompt or from a still image you supply. Returns the URL of the generated MP4. That URL is temporary: kie.ai deletes generated media after 14 days and Goro holds a run's results for 24 hours, so collect what you need within 24 hours.

<Note>Use when the video itself is the deliverable and it has to hold up: an ad, a hero clip, a pitch asset. The strongest model in the catalog for prompt following, physical realism and synchronised audio, and the most expensive by a wide margin. Takes a text prompt or one starting image, at one flat price per video either way, so reach for video.grok first if you are only exploring. To send a local or private image, upload it first (POST /v1/uploads, or create\_upload over MCP, or goro run --image) and pass the handle as image\_handle, so the file never travels through the request.</Note>

## Price

**\$3.8250 per call.** A flat price. Every call that succeeds costs exactly this, whatever it returns, and you know the number before you make the call.

There is no ceiling to read and no usage to reconcile afterwards. A call that fails, times out or is stopped releases its hold in full and costs nothing.

## Input

| Field          | Type           | Required | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| -------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `prompt`       | `string`       | yes      | What to film. Describe the subject, the action, the camera move, the lighting and the mood; dialogue and sound effects can be described too and will be generated as audio.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `duration`     | `8`            |          | Fixed at 8 seconds. This model is priced per video rather than per second, so a shorter clip would cost you the same. Defaults to `8`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `image_urls`   | `array`        |          | Optional. One public http or https link to the image the video should start from (JPEG, PNG or WEBP, up to 10 MB). Use this when the image is ALREADY published somewhere; the output URL of an image endpoint works directly. Nothing is copied or re-hosted, we pass the link on. For a file that is not already public, use image\_handle instead and it never has to be published anywhere. Send one of the three, never two.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `resolution`   | `1080p`        |          | Fixed at 1080p. Each resolution is a different price upstream, and this endpoint quotes one exact price, so the others would get their own endpoints. Defaults to `"1080p"`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `aspect_ratio` | `16:9`, `9:16` |          | Shape of the output video. 16:9 for landscape, 9:16 for vertical. Defaults to `"16:9"`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `image_base64` | `string`       |          | Optional, and only for a SMALL image (under 3 MB) or a caller that cannot run a shell command. The image inline, as base64 of the file's own bytes; a data:image/png;base64, prefix is accepted and its declared type ignored. Understand the cost before choosing it: this string is part of the request, and on an MCP call the request IS the tool arguments, which pass through the model's context window. A 3 MB photograph is 4 MB of base64, on the order of a million tokens, and in practice it is truncated and the run fails looking like file corruption. Do not downscale an image to fit here: use image\_handle, which takes up to 10 MB and keeps the file out of the conversation entirely. The 3 MB ceiling is 4,194,304 base64 characters and is a property of the request body, not of the model. JPEG, PNG or WEBP, checked against the file's own leading bytes rather than against any type you declare. Send one of the three, never two. |
| `image_handle` | `string`       |          | Optional, and the RIGHT WAY to send a local or private image. Upload the file first with POST /v1/uploads (or the create\_upload MCP tool, or the CLI's --image flag, which does the whole thing for you) and put the short handle it returns here. The file goes straight from you to a private bucket: it never passes through a tool call, so it never passes through a model's context window, and up to 10 MB is fine. Nothing is published. The handle is usable for 10 minutes after the upload lands and the file is deleted 30 minutes after that. Supplying it makes this an image-to-video call, at exactly the same price per second. Send one of image\_handle, image\_urls and image\_base64, never two.                                                                                                                                                                                                                                             |

<Note>
  These are all the fields this endpoint accepts. Anything else is rejected as
  a `validation_error` rather than forwarded to the provider.
</Note>

## Example

```bash theme={null}
curl -X POST https://api.usegoro.ai/v1/run \
  -H "Authorization: Bearer $GORO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"video.veo","input":{"prompt":"A paper boat drifting across a still pond at dawn, slow push in, mist on the water, soft birdsong."}}'
```

## Response

The full response. Values are illustrative.

```json theme={null}
[
  "https://example.com/goro/generated-video-1.mp4"
]
```
