The video generation API lets you create videos from text prompts or images using Google Veo (Veo 2, Veo 3, Veo 3.1) and Grok Video models.
Endpoints
- Base URL:
https://api.shopaikey.com - Generate video:
POST /v1/video/generations - Check status:
GET /v1/video/generations/{task_id}
Authentication
All requests require an API key in the header:
code
Authorization: Bearer <your-api-key>
Generate Video
Request
Endpoint: POST /v1/video/generations
Headers:
code
Authorization: Bearer <your-api-key>
Content-Type: application/json
Veo Video Request
Grok Video Request
Request Example (Veo)
code
curl --location --request POST 'https://api.shopaikey.com/v1/video/generations' \
--header 'Authorization: Bearer <your-api-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "veo3-fast",
"prompt": "A cat playing in the garden on a sunny morning",
"metadata": {
"aspect_ratio": "16:9",
"enhance_prompt": true,
"enable_upsample": true
}
}'
Request Example (Grok)
code
curl --location --request POST 'https://api.shopaikey.com/v1/video/generations' \
--header 'Authorization: Bearer <your-api-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "grok-video-3",
"prompt": "A cat playing in the garden on a sunny morning",
"metadata": {
"duration": 5,
"aspect_ratio": "3:2",
"resolution": "1080p"
}
}'
JavaScript Example
code
const response = await fetch('https://api.shopaikey.com/v1/video/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer <your-api-key>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'veo3-fast',
prompt: 'A cat playing in the garden on a sunny morning',
metadata: {
aspect_ratio: '16:9',
enhance_prompt: true,
enable_upsample: true,
},
}),
});
const data = await response.json();
console.log('Task ID:', data.data.task_id);
Response
code
{
"code": "success",
"message": "Video generation started",
"data": {
"task_id": "task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh",
"status": "queued",
"created_at": 1715000000,
"updated_at": 1715000000
}
}
Check Video Status
After creating a task, poll the status periodically to retrieve the completed video.
Request
Endpoint: GET /v1/video/generations/{task_id}
Headers:
code
Authorization: Bearer <your-api-key>
Request Example
code
curl --location --request GET 'https://api.shopaikey.com/v1/video/generations/task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh' \
--header 'Authorization: Bearer <your-api-key>'
JavaScript Example
code
const taskId = 'task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh';
const response = await fetch(`https://api.shopaikey.com/v1/video/generations/${taskId}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer <your-api-key>',
},
});
const data = await response.json();
console.log('Status:', data.data.status);
if (data.data.status === 'SUCCESS') {
console.log('Video URL:', data.data.result_url);
}
Response
While queued / processing:
code
{
"code": "success",
"message": "",
"data": {
"id": 1,
"task_id": "task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh",
"status": "processing",
"action": "generate",
"progress": "50%",
"submit_time": 1715000000,
"start_time": 1715000001,
"finish_time": null,
"created_at": 1715000000,
"updated_at": 1715000010
}
}
When completed:
code
{
"code": "success",
"message": "",
"data": {
"id": 1,
"task_id": "task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh",
"status": "SUCCESS",
"action": "generate",
"result_url": "https://example.com/video.mp4",
"progress": "100%",
"submit_time": 1715000000,
"start_time": 1715000001,
"finish_time": 1715000120,
"created_at": 1715000000,
"updated_at": 1715000120,
"properties": {
"upstream_model_name": "veo3-fast",
"origin_model_name": "veo3-fast"
}
}
}
When failed:
code
{
"code": "success",
"message": "",
"data": {
"id": 1,
"task_id": "task_hH9RuzRWMHP7dmVRaF1xFr8CQBVpDQnh",
"status": "FAILURE",
"action": "generate",
"fail_reason": "Content policy violation",
"progress": "0%",
"created_at": 1715000000,
"updated_at": 1715000060
}
}
Task Statuses
Image-to-Video
You can generate video from one or more images by passing the metadata.images array:
code
const response = await fetch('https://api.shopaikey.com/v1/video/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer <your-api-key>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'veo3-fast',
prompt: 'Video animation from this image',
metadata: {
images: [
'https://example.com/image1.jpg',
'https://example.com/image2.jpg',
],
aspect_ratio: '16:9',
},
}),
});
Supported Models
Google Veo
- veo2-fast: Veo 2 fast model
- veo2: Veo 2 standard model
- veo2-pro: Veo 2 professional model
- veo3-fast: Veo 3 fast model
- veo3: Veo 3 standard model
- veo3-pro: Veo 3 professional model
- veo3.1-fast: Veo 3.1 fast model
- veo3.1: Veo 3.1 standard model
- veo3.1-pro: Veo 3.1 professional model
Grok
- grok-video-3: Grok Video 3 model
Error Handling
400 - Invalid Request:
code
{
"error": {
"message": "Prompt is required"
}
}
401 - Authentication Failed:
code
{
"error": {
"message": "Invalid API key"
}
}
404 - Task Not Found:
code
{
"error": {
"message": "Task not found"
}
}
Common error codes:
- 400: Invalid request (missing parameters, invalid values)
- 401: Missing or invalid API key
- 404: Task not found
- 500: Server error
Best Practices
- Polling: After creating a task, check status periodically (every 5-10 seconds) until
statusisSUCCESSorFAILURE - Error Handling: Always handle error cases and retry when needed
- Prompt Quality: Write clear, detailed prompts for better results
- Aspect Ratio: Choose the aspect ratio appropriate for your use case (16:9 for landscape, 9:16 for portrait)