Veo Video Generation
curl --request POST \
--url https://www.token-nova.com/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"size": "<string>",
"seconds": {},
"input_reference": [
"<string>"
],
"metadata": {},
"enable_upsample": true
}
'import requests
url = "https://www.token-nova.com/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"size": "<string>",
"seconds": {},
"input_reference": ["<string>"],
"metadata": {},
"enable_upsample": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
size: '<string>',
seconds: {},
input_reference: ['<string>'],
metadata: {},
enable_upsample: true
})
};
fetch('https://www.token-nova.com/v1/videos', 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://www.token-nova.com/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'size' => '<string>',
'seconds' => [
],
'input_reference' => [
'<string>'
],
'metadata' => [
],
'enable_upsample' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.token-nova.com/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.token-nova.com/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "video_abc123",
"object": "video",
"model": "veo_3_1-fast",
"status": "queued",
"progress": 0,
"created_at": 1735689600,
"seconds": "8",
"size": "720x1280"
}
OpenAI Format
Veo Video Generation
Use POST /v1/videos to call the Veo model and submit asynchronous video tasks.
POST
https://www.token-nova.com
/
v1
/
videos
Veo Video Generation
curl --request POST \
--url https://www.token-nova.com/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"size": "<string>",
"seconds": {},
"input_reference": [
"<string>"
],
"metadata": {},
"enable_upsample": true
}
'import requests
url = "https://www.token-nova.com/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"size": "<string>",
"seconds": {},
"input_reference": ["<string>"],
"metadata": {},
"enable_upsample": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
size: '<string>',
seconds: {},
input_reference: ['<string>'],
metadata: {},
enable_upsample: true
})
};
fetch('https://www.token-nova.com/v1/videos', 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://www.token-nova.com/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'size' => '<string>',
'seconds' => [
],
'input_reference' => [
'<string>'
],
'metadata' => [
],
'enable_upsample' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://www.token-nova.com/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.token-nova.com/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"seconds\": {},\n \"input_reference\": [\n \"<string>\"\n ],\n \"metadata\": {},\n \"enable_upsample\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "video_abc123",
"object": "video",
"model": "veo_3_1-fast",
"status": "queued",
"progress": 0,
"created_at": 1735689600,
"seconds": "8",
"size": "720x1280"
}
Veo Video Generation
OpenAI-format entry point. If you need to use the unified videoPOST /v1/video/create, please see Create Video.
The Veo series is currently submitted through POST /v1/videos, with JSON submission as the primary method.
- The routing entry point is
POST /v1/videos. - The current models are only
veo_3_1andveo_3_1-fast. - Currently,
sizewill be converted and submitted together withmetadata.output_config.resolutionandaspect_ratio. - Reference images are still expressed by
input_reference, but in JSON requests they are usually represented as a URL, base64, or Data URL.
Current Models
veo_3_1veo_3_1-fast
Method and Path
POST /v1/videos
Request Example
curl -X POST https://www.token-nova.com/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo_3_1-fast",
"prompt": "Dance in the center of the square",
"size": "720x1280",
"seconds": "8",
"input_reference": "data:image/png;base64,BASE64_IMAGE",
"metadata": {
"output_config": {
"aspect_ratio": "9:16",
"audio_generation": "Disabled",
"resolution": "720P"
}
}
}'
import requests
resp = requests.post(
"https://www.token-nova.com/v1/videos",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "veo_3_1-fast",
"prompt": "Dance in the center of the square",
"size": "720x1280",
"seconds": "8",
"input_reference": "data:image/png;base64,BASE64_IMAGE",
"metadata": {
"output_config": {
"aspect_ratio": "9:16",
"audio_generation": "Disabled",
"resolution": "720P",
}
},
},
timeout=60,
)
print(resp.json())
const response = await fetch("https://www.token-nova.com/v1/videos", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "veo_3_1-fast",
prompt: "Dance in the center of the square",
size: "720x1280",
seconds: "8",
input_reference: "data:image/png;base64,BASE64_IMAGE",
metadata: {
output_config: {
aspect_ratio: "9:16",
audio_generation: "Disabled",
resolution: "720P",
},
},
}),
});
console.log(await response.json());
Response Example
{
"id": "video_abc123",
"object": "video",
"model": "veo_3_1-fast",
"status": "queued",
"progress": 0,
"created_at": 1735689600,
"seconds": "8",
"size": "720x1280"
}
Authentication
Authorization: Bearer YOUR_API_KEY
Body
string
required
Model name. Currently only
veo_3_1 and veo_3_1-fast are organized.string
required
Prompt.
string
Size string. Common values currently include
720x1280 or 1280x720, which are used to derive Veo’s resolution and aspect ratio.string | integer
Target duration. Currently submitted through
seconds; the gateway also supports duration and metadata.durationSeconds.string | array<string>
Reference image input. JSON requests can currently use a URL, base64, or data URI; the Veo adapter layer also supports multipart file uploads.
object
Extended configuration. The Veo pipeline will continue parsing
metadata into upstream Veo fields such as DurationSeconds, AspectRatio, and Resolution.boolean
This is the Apifox field reference you provided, but based on the current main repository pipeline, it is not an explicit top-level field in the generic Veo DTO. If you want to express clarity or resolution,
size and metadata are currently recommended instead.Current Rules
| Item | Rule |
|---|---|
| Request format | JSON |
| Reference image format | Supports URL, base64, and data URI, and also supports multipart files |
| Reference-to-video mode | The aspect ratio will be forcibly constrained to 16:9 |
| Parameter mapping | size will be further mapped to Veo-required resolution and aspectRatio |
