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

# Veo3 - Image To Video - gptproto

> Veo3 — Image To Video (gptproto). GPTProto API reference.

Google Veo3's GPTProto format for the image to video API.

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://gptproto.com/api/v3/google/veo3/image-to-video' \
  --header 'Authorization: Bearer sk-xxxxxx' \
  --header 'Content-Type: application/json' \
  --data '{
    "prompt": "A young woman walks alone under a transparent umbrella in a quiet alley during light rain, soft city lights reflecting on the wet pavement. Her pace is calm and thoughtful. The camera follows slowly behind her, occasional droplets hitting the lens. Subtle piano music plays, evoking a melancholic but peaceful mood. Dreamy, cinematic, slightly slow motion.",
    "aspect_ratio": "16:9",
    "image": "https://oss.gptproto.com/2025/11/12/d5c2f08479b9452aacbcf9963631ce21.jpeg",
    "enhance_prompt": true
  }'
  ```

  ```python Python theme={null}
  import requests
  import json

  url = "https://gptproto.com/api/v3/google/veo3/image-to-video"
  headers = {
      "Authorization": "Bearer sk-xxxxxx",
      "Content-Type": "application/json"
  }

  data = {
      "prompt": "A young woman walks alone under a transparent umbrella in a quiet alley during light rain, soft city lights reflecting on the wet pavement. Her pace is calm and thoughtful. The camera follows slowly behind her, occasional droplets hitting the lens. Subtle piano music plays, evoking a melancholic but peaceful mood. Dreamy, cinematic, slightly slow motion.",
      "aspect_ratio": "16:9",
      "image": "https://oss.gptproto.com/2025/11/12/d5c2f08479b9452aacbcf9963631ce21.jpeg",
      "enhance_prompt": True
  }

  response = requests.post(url, headers=headers, json=data)
  result = response.json()
  print(json.dumps(result, indent=2))
  ```

  ```javascript JavaScript theme={null}
  const url = "https://gptproto.com/api/v3/google/veo3/image-to-video";
  const headers = {
    "Authorization": "Bearer sk-xxxxxx",
    "Content-Type": "application/json"
  };

  const data = {
    "prompt": "A young woman walks alone under a transparent umbrella in a quiet alley during light rain, soft city lights reflecting on the wet pavement. Her pace is calm and thoughtful. The camera follows slowly behind her, occasional droplets hitting the lens. Subtle piano music plays, evoking a melancholic but peaceful mood. Dreamy, cinematic, slightly slow motion.",
    "aspect_ratio": "16:9",
    "image": "https://oss.gptproto.com/2025/11/12/d5c2f08479b9452aacbcf9963631ce21.jpeg",
    "enhance_prompt": true
  };

  fetch(url, {
    method: "POST",
    headers: headers,
    body: JSON.stringify(data)
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error("Error:", error));
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "io/ioutil"
      "net/http"
  )

  func main() {
      url := "https://gptproto.com/api/v3/google/veo3/image-to-video"

      payload := []byte(`{
    "prompt": "A young woman walks alone under a transparent umbrella in a quiet alley during light rain, soft city lights reflecting on the wet pavement. Her pace is calm and thoughtful. The camera follows slowly behind her, occasional droplets hitting the lens. Subtle piano music plays, evoking a melancholic but peaceful mood. Dreamy, cinematic, slightly slow motion.",
    "aspect_ratio": "16:9",
    "image": "https://oss.gptproto.com/2025/11/12/d5c2f08479b9452aacbcf9963631ce21.jpeg",
    "enhance_prompt": true
  }`)

      req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payload))
      req.Header.Set("Authorization", "Bearer sk-xxxxxx")
      req.Header.Set("Content-Type", "application/json")

      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
          panic(err)
      }
      defer resp.Body.Close()

      body, _ := ioutil.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```
</CodeGroup>

<CodeGroup>
  ```json 401 - Invalid signature theme={null}
  {
    "error": {
      "message": "Invalid signature",
      "type": "401"
    }
  }
  ```

  ```json 403 - Invalid Token theme={null}
  {
    "error": {
      "message": "Invalid Token",
      "type": "403"
    }
  }
  ```

  ```json 403 - Insufficient balance theme={null}
  {
    "error": {
      "message": "Insufficient balance",
      "type": "403"
    }
  }
  ```

  ```json 500 - Internal server error theme={null}
  {
    "error": {
      "message": "Internal server error",
      "type": "500"
    }
  }
  ```

  ```json 503 - Content policy violation theme={null}
  {
    "error": {
      "message": "Input may not meet the guidelines. Please adjust and try again.",
      "type": "503"
    }
  }
  ```
</CodeGroup>

## Parameters

| Parameter        | Type    | Required | Default | Description                                                                                                                             |
| ---------------- | ------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`         | string  | ✅ Yes    | -       | The positive prompt for the generation. A detailed description of how the image should animate into a video.                            |
| `aspect_ratio`   | string  | ❌ No     | `16:9`  | The aspect ratio of the generated media. Options: `16:9`, `9:16`                                                                        |
| `image`          | string  | ✅ Yes    | -       | The URL of the starting image for the video generation. The image will be animated based on the prompt.                                 |
| `last_image`     | string  | ❌ No     | -       | The URL of the ending image for the video generation. If provided, the video will transition from the starting image to this end image. |
| `enhance_prompt` | boolean | ❌ No     | `true`  | Whether to enhance the prompt automatically. Options: `true`, `false`                                                                   |

## Usage Notes

* The image URL must be publicly accessible
* The starting image will be the first frame of the generated video
* If `last_image` is provided, the video will smoothly transition from start to end image
* Video generation is asynchronous - use the task ID returned to query status
* Use the [Query Task](docs/api/google/veo3/gptproto-format/query-task) endpoint to check generation status
