Login
Back to Blog
AI Video Generation APIs Guide 2026 - Sora 2, Veo3, Kling, Luma, and Runway Compared

AI Video Generation APIs Guide 2026 - Sora 2, Veo3, Kling, Luma, and Runway Compared

C
Crazyrouter Team
January 22, 2026
75 viewsEnglishTutorial
Share:

AI video generation has reached production quality. This guide covers all major video generation APIs available through Crazyrouter, with code examples and best practices.

Supported Video Generation Models#

ProviderModelsPriceStrengths
OpenAIsora-2, sora-2-pro$0.30-0.50Consistency, physics
Googleveo3, veo3.1, veo3-pro$0.30-0.50Quality, audio
Kuaishoukling-v2-5-turbo, kling-v2-6$0.30Speed, quality
Lumaluma_video_api$0.30Creativity
Runwayrunwayml-gen4_turbo$0.30Control, editing

OpenAI Sora 2 API#

Sora Models Available#

ModelPriceUse Case
sora-2$0.30Standard video
sora-2-pro$0.50High quality
sora-2-landscape$0.3016:9 format
sora-2-portrait$0.309:16 format
sora-2-landscape-hd$0.40HD landscape
sora-2-portrait-hd$0.40HD portrait
sora-2-characters$0.35Character reference

Create Video (Unified Format)#

bash
curl -X POST "https://crazyrouter.com/v1/video/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "model": "sora-2",
    "prompt": "A cinematic shot of a golden retriever running through a field of sunflowers at sunset, slow motion, 4K quality",
    "duration": 10,
    "aspect_ratio": "16:9"
  }'

Query Video Status#

bash
curl "https://crazyrouter.com/v1/video/query?task_id={task_id}" \
  -H "Authorization: Bearer sk-your-api-key"

OpenAI Native Format#

bash
# Create video
curl -X POST "https://crazyrouter.com/v1/videos" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "model": "sora-2",
    "prompt": "A timelapse of a flower blooming in a garden"
  }'

# Query status
curl "https://crazyrouter.com/v1/videos/{video_id}" \
  -H "Authorization: Bearer sk-your-api-key"

# Download video
curl "https://crazyrouter.com/v1/videos/{video_id}/content" \
  -H "Authorization: Bearer sk-your-api-key" \
  -o output.mp4

Sora with Character Reference#

bash
# First create a character
curl -X POST "https://crazyrouter.com/sora/v1/characters" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "name": "Hero Character",
    "image_url": "https://example.com/character.jpg"
  }'

# Then use in video
curl -X POST "https://crazyrouter.com/v1/videos" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "model": "sora-2-characters",
    "prompt": "The character walks through a futuristic city",
    "character_id": "char_abc123"
  }'

Google Veo3 API#

Veo3 generates high-quality videos with native audio:

Veo Models Available#

ModelPriceUse Case
veo3$0.30Standard
veo3.1$0.35Latest version
veo3-pro$0.50High quality
veo3-fast$0.20Quick generation
veo3.1-fast$0.25Fast latest
veo3-frames$0.25Frame control

Text-to-Video#

bash
curl -X POST "https://crazyrouter.com/fal-ai/veo3" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "A drone shot flying over the Grand Canyon at sunrise, cinematic, 4K"
  }'

Veo3 Fast (Quicker Generation)#

bash
curl -X POST "https://crazyrouter.com/fal-ai/veo3/fast" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "Ocean waves crashing on a rocky shore"
  }'

Image-to-Video#

bash
curl -X POST "https://crazyrouter.com/fal-ai/veo3/image-to-video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "The person in the image starts walking forward",
    "image_url": "https://example.com/person.jpg"
  }'

Check Veo3 Status#

bash
curl "https://crazyrouter.com/fal-ai/veo3/requests/{request_id}" \
  -H "Authorization: Bearer sk-your-api-key"

Kling API#

Kling offers excellent quality with fast generation:

Kling Models Available#

ModelPriceUse Case
kling-v2-5-turbo$0.30Fast, quality
kling-v2-6$0.35Latest version
kling-v2-master$0.40Best quality
kling-v1-6$0.25Stable
kling-video-o1$0.35Reasoning

Text-to-Video#

bash
curl -X POST "https://crazyrouter.com/kling/v1/videos/text2video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "A cat playing with a ball of yarn in a cozy living room",
    "duration": "5",
    "aspect_ratio": "16:9"
  }'

Image-to-Video#

bash
curl -X POST "https://crazyrouter.com/kling/v1/videos/image2video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "The landscape comes alive with moving clouds",
    "image_url": "https://example.com/landscape.jpg",
    "duration": "5"
  }'

Multi-Image Reference#

bash
curl -X POST "https://crazyrouter.com/kling/v1/videos/multi-image2video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "These characters meet and shake hands",
    "image_urls": ["https://example.com/char1.jpg", "https://example.com/char2.jpg"]
  }'

Video Extension#

bash
curl -X POST "https://crazyrouter.com/kling/v1/videos/video-extend" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "video_url": "https://example.com/original.mp4",
    "prompt": "Continue the scene with the character walking away"
  }'

Lip Sync#

bash
curl -X POST "https://crazyrouter.com/kling/v1/videos/lip-sync" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "video_url": "https://example.com/face.mp4",
    "audio_url": "https://example.com/speech.mp3"
  }'

Luma Dream Machine API#

Generate Video#

bash
curl -X POST "https://crazyrouter.com/luma/generations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "A magical forest with glowing mushrooms and fireflies at night"
  }'

Extend Video#

bash
curl -X POST "https://crazyrouter.com/luma/generations/{task_id}/extend" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "prompt": "The camera slowly zooms out to reveal more of the forest"
  }'

Runway Gen-4 API#

Runway Models#

ModelPriceDuration
runwayml-gen4_turbo-5$0.305 seconds
runwayml-gen4_turbo-10$0.5010 seconds
runwayml-gen3a_turbo-5$0.255 seconds
runwayml-gen3a_turbo-10$0.4010 seconds

Image-to-Video#

bash
curl -X POST "https://crazyrouter.com/runwayml/v1/image_to_video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-api-key" \
  -d '{
    "promptImage": "https://example.com/image.jpg",
    "promptText": "The scene comes to life with gentle movement"
  }'

Pricing Comparison#

ModelPrice per Video
sora-2$0.30
sora-2-pro$0.50
veo3$0.30
veo3-pro$0.50
veo3-fast$0.20
kling-v2-5-turbo$0.30
luma_video_api$0.30
runwayml-gen4_turbo-5$0.30

Pricing Disclaimer: The prices shown in this article are for demonstration purposes only and may change at any time. Actual billing will be based on the real-time prices displayed when you make your request.

Python Helper Class#

python
import requests
import time

# Required: User-Agent header for Cloudflare/WAF
default_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"
}

class VideoGenerator:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://crazyrouter.com"
        self.headers = {
            **default_headers,
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }

    def create_video(self, prompt, model="sora-2"):
        response = requests.post(
            f"{self.base_url}/v1/video/create",
            headers=self.headers,
            json={
                "model": model,
                "prompt": prompt
            }
        )
        return response.json()

    def wait_for_video(self, task_id, timeout=300):
        start_time = time.time()
        while time.time() - start_time < timeout:
            response = requests.get(
                f"{self.base_url}/v1/video/query",
                headers=self.headers,
                params={"task_id": task_id}
            )
            data = response.json()
            if data.get("status") == "completed":
                return data.get("video_url")
            elif data.get("status") == "failed":
                raise Exception(f"Video generation failed: {data}")
            time.sleep(5)
        raise TimeoutError("Video generation timed out")

# Usage
generator = VideoGenerator("sk-your-api-key")
task = generator.create_video("A beautiful sunset timelapse over the ocean")
video_url = generator.wait_for_video(task["task_id"])
print(f"Video ready: {video_url}")

Use Case Recommendations#

Use CaseRecommended Model
Marketing videosSora 2 Pro or Veo3 Pro
Social media contentKling (fast) or Veo3 Fast
Artistic/creativeLuma Dream Machine
Product demosRunway Gen-4
Talking head videosKling Lip Sync
Quick previewsVeo3 Fast

Getting Started#

  1. Sign up at Crazyrouter
  2. Get your API key from the console
  3. Choose the video model that fits your needs
  4. Start generating videos

For questions, contact support@crazyrouter.com

Related Articles