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

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
I