Veo3 - Image To Video - gptproto
Veo3 — Image To Video (gptproto). GPTProto API reference.
POST
/
api
/
v3
/
google
/
veo3
/
image-to-video
veo3 (image to video)
curl --request POST \
--url https://api.example.com/api/v3/google/veo3/image-to-videoimport requests
url = "https://api.example.com/api/v3/google/veo3/image-to-video"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/api/v3/google/veo3/image-to-video', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v3/google/veo3/image-to-video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v3/google/veo3/image-to-video"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v3/google/veo3/image-to-video")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v3/google/veo3/image-to-video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyGoogle Veo3’s GPTProto format for the image to video API.
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
}'
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))
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));
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))
}
{
"error": {
"message": "Invalid signature",
"type": "401"
}
}
{
"error": {
"message": "Invalid Token",
"type": "403"
}
}
{
"error": {
"message": "Insufficient balance",
"type": "403"
}
}
{
"error": {
"message": "Internal server error",
"type": "500"
}
}
{
"error": {
"message": "Input may not meet the guidelines. Please adjust and try again.",
"type": "503"
}
}
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_imageis 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 endpoint to check generation status
⌘I

