# Sora 2 Pro > OpenAI's professional video generation model with higher resolution support up to 1080p, native audio synthesis, and durations up to 20 seconds ## Quick Reference - Model ID: sora-2-pro - Creator: OpenAI - Status: active - Family: sora - Base URL: https://api.lumenfall.ai/v1 ## Specifications - Max Video Duration: 20 seconds - Input Modalities: text, image - Output Modalities: video ## Model Identifiers - Primary Slug: sora-2-pro ## Tags video-generation, text-to-video, image-to-video ## Available Providers ### Replicate - Config Key: replicate/sora-2-pro - Provider Model ID: openai/sora-2-pro - Pricing: $0.300/second, $0.500/second - Source: https://replicate.com/openai/sora-2-pro ### fal.ai - Config Key: fal/sora-2-pro - Provider Model ID: fal-ai/sora-2/text-to-video/pro - Pricing: $0.300/second, $0.500/second - Source: https://fal.ai/models/fal-ai/sora-2/text-to-video/pro ### OpenAI - Config Key: openai/sora-2-pro - Provider Model ID: sora-2-pro - Pricing: $0.300/second, $0.500/second - Source: https://openai.com/api/pricing/ ## Image Gallery 1 images available for this model. - Curated examples: 1 - "A vibrant, sun-drenched pottery studio where a ceramicist’s hands expertly shape a spinning clay vase. The camera slo..." ## Example Prompt The following prompt was used to generate an example video in our playground: A vibrant, sun-drenched pottery studio where a ceramicist’s hands expertly shape a spinning clay vase. The camera slowly zooms in, capturing the wet texture of the clay and fine dust motes dancing in the light. In the soft-focus background, a capybara wearing a tiny yellow neckerchief sits peacefully on a wooden stool, watching the process. On the wall, a neon sign glows with the words "Sora 2 Pro." Cinematic lighting, 4k, hyper-realistic textures, peaceful atmosphere. ## Code Examples ### Text to Video (Async Generation) The video API is asynchronous: submit a generation request, then poll for the result. #### cURL # Step 1: Submit video generation request VIDEO_ID=$(curl -s -X POST \ https://api.lumenfall.ai/v1/videos \ -H "Authorization: Bearer $LUMENFALL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "sora-2-pro", "prompt": "A serene mountain landscape at sunset", "size": "1024x1024" }' | jq -r '.id') echo "Video ID: $VIDEO_ID" # Step 2: Poll for completion while true; do RESULT=$(curl -s \ https://api.lumenfall.ai/v1/videos/$VIDEO_ID \ -H "Authorization: Bearer $LUMENFALL_API_KEY") STATUS=$(echo $RESULT | jq -r '.status') echo "Status: $STATUS" if [ "$STATUS" = "completed" ]; then echo $RESULT | jq -r '.output.url' break elif [ "$STATUS" = "failed" ]; then echo $RESULT | jq -r '.error.message' break fi sleep 5 done #### JavaScript const BASE_URL = 'https://api.lumenfall.ai/v1'; const API_KEY = 'YOUR_API_KEY'; // Step 1: Submit video generation request const submitRes = await fetch(`${BASE_URL}/videos`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'sora-2-pro', prompt: 'A serene mountain landscape at sunset', size: '1024x1024' }) }); const { id: videoId } = await submitRes.json(); console.log('Video ID:', videoId); // Step 2: Poll for completion while (true) { const pollRes = await fetch(`${BASE_URL}/videos/${videoId}`, { headers: { 'Authorization': `Bearer ${API_KEY}` } }); const result = await pollRes.json(); if (result.status === 'completed') { console.log('Video URL:', result.output.url); break; } else if (result.status === 'failed') { console.error('Error:', result.error.message); break; } await new Promise(r => setTimeout(r, 5000)); } #### Python import requests import time BASE_URL = "https://api.lumenfall.ai/v1" API_KEY = "YOUR_API_KEY" HEADERS = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # Step 1: Submit video generation request response = requests.post( f"{BASE_URL}/videos", headers=HEADERS, json={ "model": "sora-2-pro", "prompt": "A serene mountain landscape at sunset", "size": "1024x1024" } ) video_id = response.json()["id"] print(f"Video ID: {video_id}") # Step 2: Poll for completion while True: result = requests.get( f"{BASE_URL}/videos/{video_id}", headers=HEADERS ).json() if result["status"] == "completed": print(f"Video URL: {result['output']['url']}") break elif result["status"] == "failed": print(f"Error: {result['error']['message']}") break time.sleep(5) ## Frequently Asked Questions ### How much does Sora 2 Pro cost? Sora 2 Pro starts at $0.3 per video through Lumenfall. Pricing varies by provider. Lumenfall does not add any markup to provider pricing. ### How do I use Sora 2 Pro via API? You can use Sora 2 Pro through Lumenfall's OpenAI-compatible API. Send requests to the unified endpoint with model ID "sora-2-pro". Code examples are available in Python, JavaScript, and cURL. ### Which providers offer Sora 2 Pro? Sora 2 Pro is available through Replicate, fal.ai, and OpenAI on Lumenfall. Lumenfall automatically routes requests to the best available provider. ## Links - Model Page: https://lumenfall.ai/models/openai/sora-2-pro - About: https://lumenfall.ai/models/openai/sora-2-pro/about - Providers, Pricing & Performance: https://lumenfall.ai/models/openai/sora-2-pro/providers - API Reference: https://lumenfall.ai/models/openai/sora-2-pro/api - Benchmarks: https://lumenfall.ai/models/openai/sora-2-pro/benchmarks - Use Cases: https://lumenfall.ai/models/openai/sora-2-pro/use-cases - Gallery: https://lumenfall.ai/models/openai/sora-2-pro/gallery - Playground: https://lumenfall.ai/playground?model=sora-2-pro - API Documentation: https://docs.lumenfall.ai