curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "Make this dog come alive, running on grass",
"image_urls": ["https://example.com/dog.jpg"],
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cute cartoon elephant",
"aspect_ratio": "16:9",
"duration": 4,
"metadata": {
"style": "anime",
"watermark": false
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A small frog dancing on a bright stage",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cat and a dog driving a car together @duksvfkf.cruisingki @zdqwahgj.baronbarki",
"duration": 4,
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9",
"metadata": {
"style": "anime",
"watermark": False,
"n": 2
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'sora-2-vvip',
prompt: 'A golden retriever running on grass, sunny day',
duration: 4,
aspect_ratio: '16:9',
metadata: {
style: 'anime',
watermark: false,
n: 2
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "video_01K8SGYNNNVBQTXNR4MM964S7K",
"object": "generation.task",
"model": "sora-2-vvip",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {
"size": "720x720"
}
}
Sora2
Sora2 VVIP Video Generation
Generate high-quality videos using the sora-2-vvip model
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "Make this dog come alive, running on grass",
"image_urls": ["https://example.com/dog.jpg"],
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cute cartoon elephant",
"aspect_ratio": "16:9",
"duration": 4,
"metadata": {
"style": "anime",
"watermark": false
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A small frog dancing on a bright stage",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cat and a dog driving a car together @duksvfkf.cruisingki @zdqwahgj.baronbarki",
"duration": 4,
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9",
"metadata": {
"style": "anime",
"watermark": False,
"n": 2
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'sora-2-vvip',
prompt: 'A golden retriever running on grass, sunny day',
duration: 4,
aspect_ratio: '16:9',
metadata: {
style: 'anime',
watermark: false,
n: 2
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "video_01K8SGYNNNVBQTXNR4MM964S7K",
"object": "generation.task",
"model": "sora-2-vvip",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {
"size": "720x720"
}
}
Note for users in mainland China: Please use
https://toapis.cn as the API endpoint (Base URL). Replace https://toapis.com with https://toapis.cn in the examples in this document.sora-2-vvipvideo generation model- Supports text-to-video, image-to-video, and character reference
- Async task management, query results by task ID
Important Change: For better performance and cost control, we no longer support passing base64 image data directly in
image_urls. Please use the Upload Image API first to upload images and get URLs, then call this endpoint.Authorizations
string
required
All endpoints require Bearer Token authenticationGet your API Key from the API Key Management PageAdd to request header:
Authorization: Bearer YOUR_API_KEY
Body
string
default:"sora-2-vvip"
required
Video generation model nameSupported model:
sora-2-vvip - VVIP version with fixed duration tiersExample: "sora-2-vvip"string
required
Text description for video generation💡 @Character Reference Feature:You can use
@username format in the prompt to reference previously created characters and include them in the generated video.- The character’s
usernamecan be obtained via the Query Character API - Supports referencing multiple characters at once
"A cat and a dog driving a car together @duksvfkf.cruisingki @zdqwahgj.baronbarki"integer
Video duration in secondsSupports only
4, 8, or 12 secondsExample: 4string
Video aspect ratioSupported formats:
16:9(Landscape)9:16(Portrait)
string[]
Array of reference image URLs for image-to-video generation⚠️ URL format only (base64 no longer supported)
- Publicly accessible image URL (http:// or https://)
- You can use the Upload Image API to upload local images and get URLs
boolean
Whether to generate a video thumbnail
true- Generate a video thumbnail for preview and display
integer
default:"1"
Number of different variants to generateRange: 1-4Default:
1boolean
default:"false"
Whether to add a watermark to the generated video
false- No watermarktrue- Add Sora official watermark to the video
falseboolean
default:"false"
Whether to enable privacy mode
true- Video will not be published and cannot be remixed (re-edited)false- Video can be published and remixed
falsestring
Video styleSupported values:
thanksgiving- Thanksgiving stylecomic- Comic stylenews- News styleselfie- Selfie stylenostalgic- Nostalgic/Retro styleanime- Anime style
"anime"boolean
Whether to use storyboard for finer control over video generation details
true- Enable storyboard featurefalse- Do not use storyboard
truestring
Reference video URL for character extractionUsed to reuse characters from a reference video in the generated videoExample:
"https://filesystem.site/cdn/20251030/javYrU4etHVFDqg8by7mViTWHlMOZy.mp4"⚠️ Note: When using this parameter, the generated video duration will be reduced by 1 secondstring
Character appearance timestampsSpecifies the time range in the reference video where the character appears, only supports 2-second segmentsFormat:
"start_second,end_second"Example: "1,3" means the character from second 1 to second 3 in the reference video⚠️ Note: When using this parameter, the generated video duration will be reduced by 1 secondboolean
default:"false"
Automatically create a character from the generated video after completion
true- Automatically create characterfalse- Do not create character
falsestring
Create a character from an already generated task IDReference a previously generated video task ID to extract characters from that videoExample:
"video_01K8SGYNNNVBQTXNR4MM964S7K"Response
string
Unique task identifier for status queries
string
Object type, always
generation.taskstring
Model name used
string
Task status
queued- Queued for processingin_progress- Processingcompleted- Successfully completedfailed- Failed
integer
Task progress percentage (0-100)
integer
Task creation timestamp (Unix timestamp)
object
Task metadata
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "Make this dog come alive, running on grass",
"image_urls": ["https://example.com/dog.jpg"],
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cute cartoon elephant",
"aspect_ratio": "16:9",
"duration": 4,
"metadata": {
"style": "anime",
"watermark": false
}
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A small frog dancing on a bright stage",
"duration": 4,
"aspect_ratio": "16:9"
}'
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "sora-2-vvip",
"prompt": "A cat and a dog driving a car together @duksvfkf.cruisingki @zdqwahgj.baronbarki",
"duration": 4,
"aspect_ratio": "16:9"
}'
import requests
response = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "sora-2-vvip",
"prompt": "A golden retriever running on grass, sunny day",
"duration": 4,
"aspect_ratio": "16:9",
"metadata": {
"style": "anime",
"watermark": False,
"n": 2
}
}
)
task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")
const response = await fetch('https://toapis.com/v1/videos/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'sora-2-vvip',
prompt: 'A golden retriever running on grass, sunny day',
duration: 4,
aspect_ratio: '16:9',
metadata: {
style: 'anime',
watermark: false,
n: 2
}
})
});
const task = await response.json();
console.log(`Task ID: ${task.id}`);
console.log(`Status: ${task.status}`);
{
"id": "video_01K8SGYNNNVBQTXNR4MM964S7K",
"object": "generation.task",
"model": "sora-2-vvip",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {
"size": "720x720"
}
}