Veo 3.1 Fast (Text-to-Video)
The model generates realistic 4, 6, 8-second 720p and 1080p videos with detailed visuals and audio.
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
Full Example: Generating and Retrieving the Video From the Server
The code below creates a video generation task, then automatically polls the server every 10 seconds until it finally receives the video URL.
import requests
import time
# Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>:
aimlapi_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}/video/generations"
headers = {
"Authorization": f"Bearer {aimlapi_key}",
}
data = {
"model": "google/veo-3.1-t2v-fast",
"prompt": '''
A menacing evil dragon appears in a distance above the tallest mountain, then rushes toward the camera with its jaws open, revealing massive fangs. We see it's coming.
'''
}
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()
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}/video/generations"
params = {
"generation_id": gen_id,
}
headers = {
"Authorization": f"Bearer {aimlapi_key}",
"Content-Type": "application/json"
}
response = requests.get(url, params=params, headers=headers)
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 = 1000
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()// Insert your AIML API Key instead of <YOUR_AIMLAPI_KEY>
const apiKey = "<YOUR_AIMLAPI_KEY>";
// Creating and sending a video generation task to the server
async function generateVideo() {
const url = "https://api.aimlapi.com/v2/video/generations";
const data = {
model: "google/veo-3.1-t2v-fast",
prompt:
"A menacing evil dragon appears in a distance above the tallest mountain, then rushes toward the camera with its jaws open, revealing massive fangs. We see it's coming.",
};
try {
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
if (!response.ok) {
const errorText = await response.text();
console.error(`Error: ${response.status} - ${errorText}`);
return null;
}
const responseData = await response.json();
console.log(responseData);
return responseData;
} catch (error) {
console.error("Request failed:", error);
return null;
}
}
// Requesting the result of the task from the server using the generation_id
async function getVideo(genId) {
const url = new URL("https://api.aimlapi.com/v2/video/generations");
url.searchParams.append("generation_id", genId);
try {
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
});
return await response.json();
} catch (error) {
console.error("Error fetching video:", error);
return null;
}
}
// Initiates video generation and checks the status every 10 seconds until completion or timeout
async function main() {
const genResponse = await generateVideo();
if (!genResponse) return;
const genId = genResponse.id;
console.log("Generation ID:", genId);
if (genId) {
const timeout = 600 * 1000; // 10 minutes
const startTime = Date.now();
while (Date.now() - startTime < timeout) {
const responseData = await getVideo(genId);
if (!responseData) {
console.error("Error: No response from API");
break;
}
const status = responseData.status;
console.log("Status:", status);
if (["waiting", "active", "queued", "generating"].includes(status)) {
console.log("Still waiting... Checking again in 10 seconds.");
await new Promise((resolve) => setTimeout(resolve, 10000));
} else {
console.log("Processing complete:\n", responseData);
return responseData;
}
}
console.log("Timeout reached. Stopping.");
}
}
main();
Low-res GIF preview:

API Schemas
Create a video generation task and send it to the server
You can generate a video using this API. In the basic setup, you only need a prompt.
The text description of the scene, subject, or action to generate in the video.
The aspect ratio of the generated video. The value 1:1 is only available when the resolution parameter is set to 720p.
The length of the output video in seconds.
1080pPossible values: The description of elements to avoid in the generated video.
Whether to enhance the video generation.
trueWhether to generate audio for the video.
trueVarying 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 automatically attempt to fix prompts that fail content policy or other validation checks by rewriting them
trueNo content
POST /v2/video/generations HTTP/1.1
Host: api.aimlapi.com
Content-Type: application/json
Accept: */*
Content-Length: 201
{
"model": "google/veo-3.1-t2v-fast",
"prompt": "text",
"aspect_ratio": "16:9",
"duration": 4,
"resolution": "1080p",
"negative_prompt": "text",
"enhance_prompt": true,
"generate_audio": true,
"seed": 1,
"auto_fix": true
}No content
Retrieve the generated video from the server
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.
No content
GET /v2/video/generations?generation_id=text HTTP/1.1
Host: api.aimlapi.com
Accept: */*
No content
Last updated
Was this helpful?