Veo 3 Fast (Image-to-Video)
The model generates realistic 8-second 720p and 1080p videos with detailed visuals and audio. Optimized for speed and cost compared to the Veo 3 (Image-to-Video) model.
Setup your API Key
If you don’t have an API key for the AI/ML API yet, feel free to use our Quickstart guide.
How to Make a Call
API Schemas
Create a video generation task and send it to the server
You can generate a video using this API.
To quickly test video models from different developers without changing endpoints, use our new universal short one — https://api.aimlapi.com/v2/video/generations.
Bearer key
The text description of the scene, subject, or action to generate in the video.
A direct link to an online image or a Base64-encoded local image that will serve as the visual base or the first frame for the video.
The aspect ratio of the generated video.
720PPossible values: The length of the output video in seconds.
The description of elements to avoid in the generated video.
Varying the seed integer is a way to get different results for the same other request parameters. Using the same value for an identical request will produce similar results. If unspecified, a random number is chosen.
Whether to enhance the video generation.
trueWhether to generate audio for the video.
trueSuccessfully generated video
async function main() {
const response = await fetch('https://api.aimlapi.com/v2/video/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer <YOUR_API_KEY>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"model": "google/veo-3.0-i2v-fast",
"prompt": "Mona Lisa nervously puts on glasses with her hands and asks her off-screen friend to the left: ‘Do they suit me?’ She then tilts her head slightly to one side and then the other, so the unseen friend can better judge.",
"image_url": "https://s2-111386.kwimgs.com/bs2/mmu-aiplatform-temp/kling/20240620/1.jpeg"
}),
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main();Successfully generated video
{
"id": "60ac7c34-3224-4b14-8e7d-0aa0db708325",
"status": "completed",
"video": {
"url": "https://cdn.aimlapi.com/generations/hedgehog/1759866285599-0cdfb138-c03a-49d4-a601-4f6413e27b15.mp4",
"duration": 8
},
"duration": 8,
"error": null,
"meta": {
"usage": {
"tokens_used": 120000
}
}
}Fetch the video
After sending a request for video generation, this task is added to the queue. This endpoint lets you check the status of a video generation task using its id, obtained from the endpoint described above.
If the video generation task status is complete, the response will include the final result — with the generated video URL and additional metadata.
Bearer key
Successfully generated video
GET /v2/generate/video/google/generation?generation_id=text HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Successfully generated video
{
"id": "60ac7c34-3224-4b14-8e7d-0aa0db708325",
"status": "completed",
"video": {
"url": "https://cdn.aimlapi.com/generations/hedgehog/1759866285599-0cdfb138-c03a-49d4-a601-4f6413e27b15.mp4",
"duration": 8
},
"duration": 8,
"error": null,
"meta": {
"usage": {
"tokens_used": 120000
}
}
}Full Example: Generating and Retrieving the Video From the Server
We have a classic reproduction of the famous da Vinci painting. Let's ask the model to generate a video where the Mona Lisa puts on glasses.
Generation may take around 1 minute for a 8-second video.
import requests
import time
# replace <YOUR_AIMLAPI_KEY> with your actual AI/ML API key
api_key = "<YOUR_AIMLAPI_KEY>"
base_url = "https://api.aimlapi.com/v2"
# Creating and sending a video generation task to the server
def generate_video():
url = f"{base_url}/generate/video/google/generation"
headers = {
"Authorization": f"Bearer {api_key}",
}
data = {
"model": "google/veo-3.0-i2v-fast",
"prompt": "The woman puts on glasses with her hands and then sighs and says slowly: 'Well...'.",
"image_url": "https://s2-111386.kwimgs.com/bs2/mmu-aiplatform-temp/kling/20240620/1.jpeg",
}
response = requests.post(url, json=data, headers=headers)
if response.status_code >= 400:
print(f"Error: {response.status_code} - {response.text}")
else:
response_data = response.json()
# print(response_data)
return response_data
# Requesting the result of the task from the server using the generation_id
def get_video(gen_id):
url = f"{base_url}/generate/video/google/generation"
params = {
"generation_id": gen_id,
}
# Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>:
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.get(url, params=params, headers=headers)
# print("Generation:", response.json())
return response.json()
def main():
# Running video generation and getting a task id
gen_response = generate_video()
gen_id = gen_response.get("id")
print("Generation ID: ", gen_id)
# Trying to retrieve the video from the server every 10 sec
if gen_id:
start_time = time.time()
timeout = 600
while time.time() - start_time < timeout:
response_data = get_video(gen_id)
if response_data is None:
print("Error: No response from API")
break
status = response_data.get("status")
print("Status:", status)
if status == "waiting" or status == "active" or status == "queued" or status == "generating":
print("Still waiting... Checking again in 10 seconds.")
time.sleep(10)
else:
print("Processing complete:/n", response_data)
return response_data
print("Timeout reached. Stopping.")
return None
if __name__ == "__main__":
main()const https = require("https");
const { URL } = require("url");
// Replace <YOUR_AIMLAPI_KEY> with your actual AI/ML API key
const apiKey = "<YOUR_AIMLAPI_KEY>";
const baseUrl = "https://api.aimlapi.com/v2";
// Creating and sending a video generation task to the server
function generateVideo(callback) {
const data = JSON.stringify({
model: "google/veo-3.0-i2v-fast",
prompt: "The woman puts on glasses with her hands and then sighs and says slowly: 'Well...'.",
image_url: "https://s2-111386.kwimgs.com/bs2/mmu-aiplatform-temp/kling/20240620/1.jpeg",
duration: "5",
});
const url = new URL(`${baseUrl}/generate/video/google/generation`);
const options = {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(data),
},
};
const req = https.request(url, options, (res) => {
let body = "";
res.on("data", (chunk) => body += chunk);
res.on("end", () => {
if (res.statusCode >= 400) {
console.error(`Error: ${res.statusCode} - ${body}`);
callback(null);
} else {
const parsed = JSON.parse(body);
callback(parsed);
}
});
});
req.on("error", (err) => console.error("Request error:", err));
req.write(data);
req.end();
}
// Requesting the result of the task from the server using the generation_id
function getVideo(genId, callback) {
const url = new URL(`${baseUrl}/generate/video/google/generation`);
url.searchParams.append("generation_id", genId);
const options = {
method: "GET",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
};
const req = https.request(url, options, (res) => {
let body = "";
res.on("data", (chunk) => body += chunk);
res.on("end", () => {
const parsed = JSON.parse(body);
callback(parsed);
});
});
req.on("error", (err) => console.error("Request error:", err));
req.end();
}
// Initiates video generation and checks the status every 10 s until completion or timeout
function main() {
generateVideo((genResponse) => {
if (!genResponse || !genResponse.id) {
console.error("Failed to start generation");
return;
}
const genId = genResponse.id;
console.log("Generation ID:", genId);
const startTime = Date.now();
const timeout = 600000;
const checkStatus = () => {
if (Date.now() - startTime > timeout) {
console.log("Timeout reached. Stopping.");
return;
}
getVideo(genId, (responseData) => {
if (!responseData) {
console.error("Error: No response from API");
return;
}
const status = responseData.status;
console.log("Status:", status);
if (["waiting", "active", "queued", "generating"].includes(status)) {
console.log("Still waiting... Checking again in 10 seconds.");
setTimeout(checkStatus, 10000);
} else {
console.log("Processing complete:\n", responseData);
}
});
};
checkStatus();
});
}
main();Original (with the audio): 1280x720
Low-res GIF preview:

"The woman puts on glasses with her hands and then sighs and says slowly: 'Well...'."Last updated
Was this helpful?