Skip to main content
Looking for a more stable solution?This page introduces the Sync API (suitable for quick testing). For a more stable production environment solution, we recommend using the Async API.

Prerequisites

1

Get API Key

Login to laozhang.ai console to get your API key
2

Configure Billing Mode

Edit token settings, choose either billing mode (both have same price):
  • Pay-as-you-go (Recommended): Uses balance first, auto-switches when low. Suitable for most users
  • Pay-per-call: Direct charge per call. Suitable for strict budget control
Both modes have exactly the same price: $0.15/call (10s or 15s), only billing method differs.
Token settings
API calls will fail if billing mode is not set. Must complete this configuration first!

Text-to-Video Example

About @sama in ExamplesYou may notice @sama used in examples. This is OpenAI CEO Sam Altman’s authorized ID, allowing his likeness to appear in videos.This is optional:
  • ✓ Can use @sama or other verified IDs
  • ✓ Can skip it and use normal scene descriptions (e.g., “a cat in a garden”)
  • ✗ Cannot upload real person photos (will be rejected and charged)
Want yourself in the video? Requires Cameo certification in Sora iOS app. See FAQ
The simplest usage method - generate videos using only text descriptions.
curl -X POST "https://api.laozhang.ai/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora_video2",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "A happy cat playing with a ball in a sunny garden"
          }
        ]
      }
    ]
  }'

Image-to-Video Example

Supports uploading reference images (up to 1 image), supports both URL and Base64 methods.
curl -X POST "https://api.laozhang.ai/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora_video2",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Make this character jump off the desk and come to life"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://filesystem.site/cdn/download/20250407/OhFd8JofOAJCsNOCsM1Y794qnkNO3L.png"
            }
          }
        ]
      }
    ]
  }'

Streaming Output Example

Enable streaming output to view generation progress in real-time.
import openai
import re

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.laozhang.ai/v1"
)

stream = client.chat.completions.create(
    model="sora_video2",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "A cute cat playing with a ball in a sunny garden"
                }
            ]
        }
    ],
    stream=True
)

# Store full content to extract video link
full_content = ""

print("Generation progress:\n")
for chunk in stream:
    if chunk.choices[0].delta.content:
        content = chunk.choices[0].delta.content
        print(content, end='', flush=True)
        full_content += content

print("\n")

# Extract video link
video_url_match = re.search(r'https://[^\s\)]+\.mp4', full_content)
if video_url_match:
    video_url = video_url_match.group(0)
    print(f"\n✅ Video link: {video_url}")
    print("⚠️  Video valid for 1 day, download immediately!")
else:
    print("\n❌ Video link not found, generation may have failed")

Output Interpretation

Streaming Output Format

When "stream": true is enabled, API returns SSE (Server-Sent Events) format:
data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{"content":"```json\n{\n    \"prompt\": \"A happy cat playing with a ball in a sunny garden\",\n    \"mode\": \"Vertical Mode\"\n}\n```\n\n"},"finish_reason":null}]}

data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{"content":"> ⌛️ Task is in queue, please wait patiently...\n\n"},"finish_reason":null}]}

data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{"content":"> 🏃 Progress: 36.0%\n\n"},"finish_reason":null}]}

data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{"content":"> ✅ Video generated successfully, [Click here](https://sora.gptkey.asia/assets/sora/xxx.mp4) to view video~~~\n\n"},"finish_reason":null}]}

data: {"id":"foaicmpl-xxx","object":"chat.completion.chunk","created":1759759480,"model":"sora_video2","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":17,"completion_tokens":244,"total_tokens":261}}

data: [DONE]

Key Field Descriptions

  • choices[0].delta.content: Contains progress information or final video link
  • finish_reason: When "stop", generation is complete
  • usage: Last message contains token usage
  • Video link: Provided as Markdown link in success message

Generation Time

  • Queue Wait: Depends on peak hours
  • Video Generation: About 2-3 minutes (for 10-second video)
  • Total: 2-5 minutes on average

Next Steps

API Reference

View detailed API documentation

Code Examples

View more usage examples

Best Practices

Learn how to write better prompts

FAQ

Common issues and solutions

Important Notes

Remember to download videos immediately!Generated video URLs are valid for only 1 day. Please download to local storage after generation to avoid losing videos.
Model Selection
  • sora_video2: Vertical screen (704×1280), suitable for mobile viewing
  • sora_video2-landscape: Horizontal screen (1280×704), suitable for widescreen displays