Create Video
curl --request POST \
--url https://www.token-nova.com/v1/video/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"images": [
{}
],
"model": "<string>",
"orientation": "<string>",
"prompt": "<string>",
"size": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"enable_upsample": true
}
'import requests
url = "https://www.token-nova.com/v1/video/create"
payload = {
"images": [{}],
"model": "<string>",
"orientation": "<string>",
"prompt": "<string>",
"size": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"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({
images: [{}],
model: '<string>',
orientation: '<string>',
prompt: '<string>',
size: '<string>',
duration: 123,
aspect_ratio: '<string>',
enable_upsample: true
})
};
fetch('https://www.token-nova.com/v1/video/create', 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/video/create",
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([
'images' => [
[
]
],
'model' => '<string>',
'orientation' => '<string>',
'prompt' => '<string>',
'size' => '<string>',
'duration' => 123,
'aspect_ratio' => '<string>',
'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/video/create"
payload := strings.NewReader("{\n \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\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/video/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"enable_upsample\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/video/create")
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 \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"enable_upsample\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "video_8b8232a3-847b-40e2-a3a3-912813b7ac60",
"object": "video",
"model": "veo3.1-fast-components",
"status": "queued",
"progress": 0,
"created_at": 1768489641,
"size": "1280x720",
"detail": {
"input": {
"aspect_ratio": "16:9",
"images": [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png"
],
"model": "veo3.1-fast-components",
"prompt": "The cow flew into the sky"
}
},
"status_update_time": 1768489641
}
Unified Video
Create Video
Use POST /v1/video/create to submit Veo asynchronous generation tasks through a unified video format.
POST
https://www.token-nova.com
/
v1
/
video
/
create
Create Video
curl --request POST \
--url https://www.token-nova.com/v1/video/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"images": [
{}
],
"model": "<string>",
"orientation": "<string>",
"prompt": "<string>",
"size": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"enable_upsample": true
}
'import requests
url = "https://www.token-nova.com/v1/video/create"
payload = {
"images": [{}],
"model": "<string>",
"orientation": "<string>",
"prompt": "<string>",
"size": "<string>",
"duration": 123,
"aspect_ratio": "<string>",
"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({
images: [{}],
model: '<string>',
orientation: '<string>',
prompt: '<string>',
size: '<string>',
duration: 123,
aspect_ratio: '<string>',
enable_upsample: true
})
};
fetch('https://www.token-nova.com/v1/video/create', 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/video/create",
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([
'images' => [
[
]
],
'model' => '<string>',
'orientation' => '<string>',
'prompt' => '<string>',
'size' => '<string>',
'duration' => 123,
'aspect_ratio' => '<string>',
'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/video/create"
payload := strings.NewReader("{\n \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\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/video/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"enable_upsample\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/video/create")
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 \"images\": [\n {}\n ],\n \"model\": \"<string>\",\n \"orientation\": \"<string>\",\n \"prompt\": \"<string>\",\n \"size\": \"<string>\",\n \"duration\": 123,\n \"aspect_ratio\": \"<string>\",\n \"enable_upsample\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "video_8b8232a3-847b-40e2-a3a3-912813b7ac60",
"object": "video",
"model": "veo3.1-fast-components",
"status": "queued",
"progress": 0,
"created_at": 1768489641,
"size": "1280x720",
"detail": {
"input": {
"aspect_ratio": "16:9",
"images": [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png"
],
"model": "veo3.1-fast-components",
"prompt": "The cow flew into the sky"
}
},
"status_update_time": 1768489641
}
Create Video
The Veo unified video entry point usesPOST /v1/video/create, and the request body is JSON. Unlike OpenAI-format Veo video generation, this endpoint uses fields such as images, orientation, and aspect_ratio to represent reference images and aspect ratio.
- The route entry point is
POST /v1/video/create. - Reference images are passed as a list of URLs through the
imagesarray. - Common model examples include
veo3.1-fast-components; use the models actually available in the current channel as the reference. - After a successful submission, a task object containing
id,status, andprogressis returned. Use Query Task to poll for the result afterward.
Method and Path
POST /v1/video/create
Request Example
curl -X POST https://www.token-nova.com/v1/video/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"prompt": "The cow flew into the sky",
"model": "veo3.1-fast-components",
"images": [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png"
],
"orientation": "landscape",
"size": "1280x720",
"duration": 8,
"aspect_ratio": "16:9",
"enable_upsample": false
}'
import requests
resp = requests.post(
"https://www.token-nova.com/v1/video/create",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
json={
"prompt": "The cow flew into the sky",
"model": "veo3.1-fast-components",
"images": [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png",
],
"orientation": "landscape",
"size": "1280x720",
"duration": 8,
"aspect_ratio": "16:9",
"enable_upsample": False,
},
timeout=60,
)
print(resp.json())
const response = await fetch("https://www.token-nova.com/v1/video/create", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
prompt: "The cow flew into the sky",
model: "veo3.1-fast-components",
images: [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png",
],
orientation: "landscape",
size: "1280x720",
duration: 8,
aspect_ratio: "16:9",
enable_upsample: false,
}),
});
console.log(await response.json());
Response Example
{
"id": "video_8b8232a3-847b-40e2-a3a3-912813b7ac60",
"object": "video",
"model": "veo3.1-fast-components",
"status": "queued",
"progress": 0,
"created_at": 1768489641,
"size": "1280x720",
"detail": {
"input": {
"aspect_ratio": "16:9",
"images": [
"https://example.com/frame-1.png",
"https://example.com/frame-2.png"
],
"model": "veo3.1-fast-components",
"prompt": "The cow flew into the sky"
}
},
"status_update_time": 1768489641
}
Authentication
Authorization: Bearer YOUR_API_KEY
Body
array
required
An array of image URLs. Pass a list of reference image URLs.
string
required
The model name. For example,
veo3.1-fast-components.string
required
The frame orientation.
portrait means vertical, and landscape means horizontal.string
required
Prompt. The text describing the video content.
string
required
Output size. Defaults to
720x1280. Available values: 720x1280, 1280x720.integer
required
Video duration in seconds. Veo defaults to 8 seconds.
string
required
Aspect ratio.
16:9 or 9:16.boolean
Whether to enable HD upsampling (landscape only).
Response
string
Task ID, passed as the
id parameter in subsequent queries.string
Object type, commonly
video.string
The actual model used.
string
Task status. Common values include
queued, processing, completed, failed, and cancelled.integer
Task progress percentage.
integer
Creation time (Unix timestamp).
string
Output size.
object
Submission details, usually containing the echoed
input field.integer
Most recent status update time (Unix timestamp).
