Video Extend
curl --request POST \
--url https://www.token-nova.com/v1/videos/{video_id}/extend \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"images": [
"<string>"
],
"size": "<string>",
"aspect_ratio": "<string>",
"start_time": 123,
"upscale": true
}
'import requests
url = "https://www.token-nova.com/v1/videos/{video_id}/extend"
payload = {
"model": "<string>",
"prompt": "<string>",
"images": ["<string>"],
"size": "<string>",
"aspect_ratio": "<string>",
"start_time": 123,
"upscale": 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>',
images: ['<string>'],
size: '<string>',
aspect_ratio: '<string>',
start_time: 123,
upscale: true
})
};
fetch('https://www.token-nova.com/v1/videos/{video_id}/extend', 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/{video_id}/extend",
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>',
'images' => [
'<string>'
],
'size' => '<string>',
'aspect_ratio' => '<string>',
'start_time' => 123,
'upscale' => 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/{video_id}/extend"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": 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/{video_id}/extend")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/videos/{video_id}/extend")
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 \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "grok:48a67431-0708-46d1-9ab9-83cb84700153",
"status": "processing",
"status_update_time": 1762685256
}
OpenAI Format
Video Extend
Use POST /v1/videos/{video_id}/extend to extend a segment based on an existing Grok video task.
POST
https://www.token-nova.com
/
v1
/
videos
/
{video_id}
/
extend
Video Extend
curl --request POST \
--url https://www.token-nova.com/v1/videos/{video_id}/extend \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"images": [
"<string>"
],
"size": "<string>",
"aspect_ratio": "<string>",
"start_time": 123,
"upscale": true
}
'import requests
url = "https://www.token-nova.com/v1/videos/{video_id}/extend"
payload = {
"model": "<string>",
"prompt": "<string>",
"images": ["<string>"],
"size": "<string>",
"aspect_ratio": "<string>",
"start_time": 123,
"upscale": 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>',
images: ['<string>'],
size: '<string>',
aspect_ratio: '<string>',
start_time: 123,
upscale: true
})
};
fetch('https://www.token-nova.com/v1/videos/{video_id}/extend', 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/{video_id}/extend",
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>',
'images' => [
'<string>'
],
'size' => '<string>',
'aspect_ratio' => '<string>',
'start_time' => 123,
'upscale' => 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/{video_id}/extend"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": 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/{video_id}/extend")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.token-nova.com/v1/videos/{video_id}/extend")
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 \"images\": [\n \"<string>\"\n ],\n \"size\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"start_time\": 123,\n \"upscale\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "grok:48a67431-0708-46d1-9ab9-83cb84700153",
"status": "processing",
"status_update_time": 1762685256
}
Video Extend
OpenAI format entry point. For unified videos, please use Video Extend (Unified Video) (POST /v1/video/extend, pass task_id in the Body).
Based on an existing Grok video task, extend the video content from a specified point in time via POST /v1/videos/{video_id}/extend.
- The path parameter
video_idis the original task ID. - The request body is JSON, with required
modelandprompt. - You can specify the second in the original video to start extending from via
start_time, and supplement reference images throughimages.
Method and Path
POST /v1/videos/{video_id}/extend
Request Example
curl -X POST https://www.token-nova.com/v1/videos/grok:48a67431-0708-46d1-9ab9-83cb84700153/extend \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"model": "grok-video-3",
"prompt": "play with another white cat",
"aspect_ratio": "3:2",
"start_time": 4,
"size": "1080P",
"upscale": true
}'
import requests
video_id = "grok:48a67431-0708-46d1-9ab9-83cb84700153"
resp = requests.post(
f"https://www.token-nova.com/v1/videos/{video_id}/extend",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
"Accept": "application/json",
},
json={
"model": "grok-video-3",
"prompt": "play with another white cat",
"aspect_ratio": "3:2",
"start_time": 4,
"size": "1080P",
"upscale": True,
},
timeout=60,
)
print(resp.json())
const videoId = "grok:48a67431-0708-46d1-9ab9-83cb84700153";
const response = await fetch(
`https://www.token-nova.com/v1/videos/${encodeURIComponent(videoId)}/extend`,
{
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
model: "grok-video-3",
prompt: "play with another white cat",
aspect_ratio: "3:2",
start_time: 4,
size: "1080P",
upscale: true,
}),
}
);
console.log(await response.json());
Response Example
{
"id": "grok:48a67431-0708-46d1-9ab9-83cb84700153",
"status": "processing",
"status_update_time": 1762685256
}
Authentication
Authorization: Bearer YOUR_API_KEY
Path Parameters
string
required
Original video task ID.
Body
string
required
Model name, for example
grok-video-3.string
required
Prompt for the extended segment.
array<string>
List of reference image URLs, used to add visual constraints as needed.
string
Resolution specification, pass
720P or 1080P. The Apifox example also uses 1080p; it is recommended to standardize on uppercase 1080P.string
Video ratio, with values such as
3:2 used in the Apifox example.integer
The second in the original video from which to start extending.
boolean
Whether to apply HD enhancement to the output.
Response
string
New extend task ID.
string
Task status. Common values include
processing, completed, and failed.integer
Most recent status update time (Unix timestamp).
