Multimedia

Video Generation (Veo & Grok)

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

ParameterTypeRequiredDescription
modelstringYesGoogle Veo model ID. e.g.: veo3.1-pro
promptstringYesVideo description prompt
metadata.imagesarrayNoArray of reference image URLs
metadata.enhance_promptbooleanNoAuto-optimize prompt
metadata.aspect_ratiostringNoAspect ratio
metadata.enable_upsamplebooleanNoEnable video upsampling

Grok Video Request

ParameterTypeRequiredDescription
modelstringYesGrok model ID. e.g.: grok-video-3
promptstringYesVideo description prompt
metadata.imagesarrayNoArray of reference image URLs
metadata.durationintegerNoVideo duration (seconds)
metadata.aspect_ratiostringNoAspect ratio. e.g.: 3:2, 2:3, 1:1
metadata.resolutionstringNoResolution. e.g.: 720p, 1080p

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

StatusDescription
queuedQueued for processing
processingCurrently processing
SUCCESSCompleted, retrieve video at result_url
FAILUREFailed, see reason at fail_reason

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

  1. Polling: After creating a task, check status periodically (every 5-10 seconds) until status is SUCCESS or FAILURE
  2. Error Handling: Always handle error cases and retry when needed
  3. Prompt Quality: Write clear, detailed prompts for better results
  4. Aspect Ratio: Choose the aspect ratio appropriate for your use case (16:9 for landscape, 9:16 for portrait)