Video Generation API

Generate AI videos using providers like Luma, Runway, and Pollo through a unified API with session-based generation and WebSocket real-time updates.

Quick Start

🎬 Generate Videos with AI

MCPHub's Video Generation API supports both direct generation and session-based workflows for creating multiple videos with shared parameters.

Production Endpoint

https://api.mcphub.com/api/v3/videos/generate

Session-Based

Support for continuous generation with WebSocket updates

Generate a Video

Python

import requests

# Get your JWT token first
token_response = requests.post(
    "https://api.mcphub.com/api/v3/user/token",
    headers={"X-User-Id": "your-user-id"}
)
token = token_response.json()["data"]["accessToken"]

# Generate a video
response = requests.post(
    "https://api.mcphub.com/api/v3/videos/generate",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    },
    json={
        "prompt": "A serene mountain landscape at sunset with clouds moving",
        "model": "luma-ray-2.0-flash",
        "duration": 5,
        "aspect_ratio": "16:9"
    }
)

result = response.json()
print(f"Video ID: {result['video_id']}")
print(f"Status: {result['status']}")
print(f"Credits used: {result['credits_used']}")

TypeScript/JavaScript

// Get your JWT token first
const tokenResponse = await fetch('https://api.mcphub.com/api/v3/user/token', {
  method: 'POST',
  headers: { 'X-User-Id': 'your-user-id' }
});
const { data: { accessToken } } = await tokenResponse.json();

// Generate a video
const response = await fetch('https://api.mcphub.com/api/v3/videos/generate', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    prompt: 'A serene mountain landscape at sunset with clouds moving',
    model: 'luma-ray-2.0-flash',
    duration: 5,
    aspect_ratio: '16:9'
  })
});

const result = await response.json();
console.log(`Video ID: ${result.video_id}`);
console.log(`Status: ${result.status}`);
console.log(`Credits used: ${result.credits_used}`);

cURL

# Get JWT token first
curl -X POST "https://api.mcphub.com/api/v3/user/token" \
  -H "X-User-Id: your-user-id"

# Generate video
curl -X POST "https://api.mcphub.com/api/v3/videos/generate" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A serene mountain landscape at sunset with clouds moving",
    "model": "luma-ray-2.0-flash",
    "duration": 5,
    "aspect_ratio": "16:9"
  }'

Session-Based Generation

For generating multiple videos with shared parameters and real-time updates via WebSocket:

Python Example

import requests
import websocket
import json

# 1. Create a video generation session
session_response = requests.post(
    "https://api.mcphub.com/api/v3/videos/sessions",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    },
    json={
        "prompt": "Mountain landscapes",
        "model": "luma-ray-2.0-flash",
        "duration_minutes": 30,
        "max_videos": 10,
        "interval_seconds": 60
    }
)

session_id = session_response.json()["session_id"]
websocket_url = session_response.json()["websocket_url"]

# 2. Connect to WebSocket for real-time updates
def on_message(ws, message):
    data = json.loads(message)
    if data["type"] == "video_generated":
        print(f"New video: {data['video_url']}")

ws = websocket.WebSocketApp(
    websocket_url,
    on_message=on_message
)
ws.run_forever()

Available Models

Luma AI

  • luma-ray-2.0-flash
  • luma-ray-2.0

Fast & high-quality video generation

Other Providers

  • runway-gen3
  • pollo-video-1.0

Various quality & price options

📋 Get Full Model List

Retrieve all available video generation models and their pricing:

GET https://api.mcphub.com/api/v3/media-pricing/models?media_type=video

API Endpoints

POST/api/v3/videos/generate

Generate a video from a text prompt

Request Body
prompt (required) - Text description of the video
model (required) - Model ID to use
duration (optional) - Video duration in seconds
aspect_ratio (optional) - e.g., "16:9", "9:16", "1:1"
POST/api/v3/videos/sessions

Create a video generation session

Request Body
prompt (required) - Base prompt for session
model (required) - Model ID to use
duration_minutes (optional) - Session duration (default: 30)
max_videos (optional) - Max videos to generate (default: 50)
interval_seconds (optional) - Seconds between generations (default: 60)
GET/api/v3/videos/sessions/:session_id

Get session details and generated videos

POST/api/v3/videos/sessions/:session_id/stop

Stop a running session

GET/api/v3/videos/history

Get your video generation history

Response Format

{
  "success": true,
  "video_id": "vid_abc123",
  "video_url": "https://...",
  "thumbnail_url": "https://...",
  "model": "luma-ray-2.0-flash",
  "processing_time": 45.2,
  "credits_used": 100.0,
  "remaining_credits": 900.0,
  "duration": 5,
  "aspect_ratio": "16:9",
  "prompt": "A serene mountain landscape at sunset with clouds moving",
  "status": "completed",
  "created_at": "2025-11-12T10:30:00Z"
}

WebSocket Real-Time Updates

When using sessions, connect to the WebSocket URL to receive real-time updates:

WebSocket Message Types

video_generated

New video has been generated

session_status

Session status update (active, completed, cancelled)

generation_progress

Progress update for current generation

Authentication

The Video Generation API uses JWT token authentication:

1

Get User ID

Sign in and get your user ID from your account

2

Request JWT Token

POST to /api/v3/user/token with X-User-Id header

3

Use Token

Include token in Authorization header for all API requests

Next Steps

📚 Related Docs

🚀 Get Started