curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video with a subtle camera push-in",
"image": "https://example.com/product.jpg",
"duration": 10,
"aspect_ratio": "16:9"
}'
import requests
task = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video",
"image": "https://example.com/product.jpg",
"duration": 15,
"aspect_ratio": "16:9",
},
).json()
print(task["id"])
{
"id": "video_abc123def456",
"object": "generation.task",
"model": "grok-video-1.5",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {}
}
Grok Video
Grok Video 1.5 Generation
Generate video from exactly one required first-frame image using grok-video-1.5
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video with a subtle camera push-in",
"image": "https://example.com/product.jpg",
"duration": 10,
"aspect_ratio": "16:9"
}'
import requests
task = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video",
"image": "https://example.com/product.jpg",
"duration": 15,
"aspect_ratio": "16:9",
},
).json()
print(task["id"])
{
"id": "video_abc123def456",
"object": "generation.task",
"model": "grok-video-1.5",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {}
}
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.- Supports image-to-video only; text-to-video is not supported.
- Requires exactly one public first-frame image URL.
- Supports durations from
1to15seconds; default is8. - Supports
480pand720p. - Async task API: poll video task status with the returned task ID.
Do not pass base64 image data. Upload local files with the Upload Image API, then pass the returned public URL in
image.Authorizations
string
required
All API requests require Bearer Token authentication.
Authorization: Bearer YOUR_API_KEY
Body
string
default:"grok-video-1.5"
required
Use
grok-video-1.5.string
required
Describe the motion, camera movement, and visual direction for the reference image.
string
required
Pass exactly one required public first-frame image URL.
- Maximum:
1 - Supported URL schemes:
http://,https://
integer
default:"8"
Video duration.Supported range:
1–15 secondsstring
default:"720p"
Video resolution. Supported values:
480p, 720p.string
default:"16:9"
Video aspect ratio. Supported values:
1:1, 16:9, 9:16, 3:2, 2:3.Pricing
| Billing unit | Price |
|---|---|
| Generated second | $0.01 / second |
Response
string
Task identifier for polling video status.
string
Object type, always
generation.task.string
Model name used for the task.
string
Task status:
queued, in_progress, completed, or failed.Create a video task
curl --request POST \
--url https://toapis.com/v1/videos/generations \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video with a subtle camera push-in",
"image": "https://example.com/product.jpg",
"duration": 10,
"aspect_ratio": "16:9"
}'
import requests
task = requests.post(
"https://toapis.com/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "grok-video-1.5",
"prompt": "Animate this product photo into a cinematic commercial video",
"image": "https://example.com/product.jpg",
"duration": 15,
"aspect_ratio": "16:9",
},
).json()
print(task["id"])
{
"id": "video_abc123def456",
"object": "generation.task",
"model": "grok-video-1.5",
"status": "queued",
"progress": 0,
"created_at": 1768380224,
"metadata": {}
}
Query task status
Use the returnedid with Video Task Status.