Skip to main content

Introduction

Official Forward refers to the solution that directly calls OpenAI’s official Sora API and transparently forwards it to users. Unlike the current default “reverse-engineered” solution, the Official Forward plan offers higher stability and more precise instruction following.
What is Official Forward?Official Forward is a transparent proxy forwarding service for OpenAI’s official API. Your requests are directly forwarded to OpenAI’s official servers, enjoying the same service quality and stability as OpenAI official.

Plan Comparison

AspectOfficial ForwardReverse-Engineered (Current Default)
Stability99.99% availabilityDepends on reverse engineering, may fluctuate
Instruction FollowingPrecise reproductionAverage
Image QualityStable, no blurOccasional blur
Duration Options4/8/12 seconds10/15 seconds
Image-to-VideoSupportedSupported
API MethodAsync onlySync + Async
PricingPer-second billingPer-call billing
How to choose?
  • Prioritize stability and quality: Choose Official Forward
  • Prioritize cost-effectiveness: Choose reverse-engineered (current default)

Supported Models and Pricing

sora-2 (Standard Model)

ResolutionPer Second4 sec8 sec12 sec
720×1280 (Portrait)$0.1$0.4$0.8$1.2
1280×720 (Landscape)$0.1$0.4$0.8$1.2

sora-2-pro (HD Model)

ResolutionPer Second4 sec8 sec12 sec
720×1280 (Portrait)$0.3$1.2$2.4$3.6
1280×720 (Landscape)$0.3$1.2$2.4$3.6
1024×1792 (Portrait HD)$0.5$2.0$4.0$6.0
1792×1024 (Landscape HD)$0.5$2.0$4.0$6.0
Prices above include our service fee.

How to Get Started

1

Create Token

Log in to laozhang.ai console, when creating a new token, select “Sora2官转” (Sora2 Official Forward) group.Official Forward Token Configuration
2

Configure Billing Mode

Billing mode must be set to “Pay-as-you-go”.
Official Forward plan does not support pay-per-call mode. You must use pay-as-you-go billing.
3

Call API to Generate Video

Follow the complete examples below to call the API.

API Reference

Basic Information

ConfigurationValue
Base URLhttps://api.laozhang.ai
AuthenticationAuthorization: Bearer YOUR_API_KEY
Request Formatmultipart/form-data

API Endpoints

EndpointMethodDescription
/v1/videosPOSTCreate video generation task
/v1/videos/{id}GETQuery task status
/v1/videos/{id}/contentGETDownload generated video

Request Parameters

ParameterTypeRequiredDescription
modelstringYesModel name: sora-2 or sora-2-pro
promptstringYesVideo description text
sizestringNoResolution, e.g. 1280x720 (default 720x1280)
secondsstringNoVideo duration: 4, 8, or 12 (default 4)
input_referencefileNoReference image file (for image-to-video)

Supported Resolutions (size parameter)

sora-2:
  • 720x1280 (Portrait, default)
  • 1280x720 (Landscape)
sora-2-pro:
  • 720x1280 (Portrait)
  • 1280x720 (Landscape)
  • 1024x1792 (Portrait HD)
  • 1792x1024 (Landscape HD)

Complete Examples

Text-to-Video (cURL)

Step 1: Create Video Generation Task
curl -X POST "https://api.laozhang.ai/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F model="sora-2" \
  -F prompt="A golden retriever playing fetch on a sunny beach, waves gently rolling in the background, cinematic lighting" \
  -F size="1280x720" \
  -F seconds="8"
Response Example:
{
  "id": "video_69788dc4a1c8819887468fbeffdda023",
  "object": "video",
  "model": "sora-2",
  "status": "queued",
  "progress": 0,
  "created_at": 1769508292,
  "size": "1280x720",
  "seconds": "8"
}

Image-to-Video (cURL)

Image-to-Video allows you to provide a reference image as the first frame of the video. The AI will generate a dynamic video based on this image.
curl -X POST "https://api.laozhang.ai/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F model="sora-2" \
  -F prompt="The camera slowly zooms in, the scene comes alive with gentle movement, cinematic atmosphere" \
  -F size="1280x720" \
  -F seconds="4" \
  -F input_reference="@your_image.jpeg;type=image/jpeg"
Image Requirements
  • Image resolution must match the size parameter (e.g., if size=1280x720, image must be 1280×720 pixels)
  • Supported formats: JPEG, PNG, WebP
  • Images containing real human faces are not supported (will be rejected by content moderation)
Step 2: Poll Task Status
curl "https://api.laozhang.ai/v1/videos/video_69788dc4a1c8819887468fbeffdda023" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response Example (In Progress):
{
  "id": "video_69788dc4a1c8819887468fbeffdda023",
  "object": "video",
  "status": "in_progress",
  "progress": 45,
  "created_at": 1769508292
}
Response Example (Completed):
{
  "id": "video_69788dc4a1c8819887468fbeffdda023",
  "object": "video",
  "status": "completed",
  "progress": 100,
  "created_at": 1769508292,
  "completed_at": 1769508592
}
Step 3: Download Video
curl "https://api.laozhang.ai/v1/videos/video_69788dc4a1c8819887468fbeffdda023/content" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o output.mp4

Python Example

import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.laozhang.ai"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

# Text-to-Video
def create_video(prompt, model="sora-2", seconds="8", size="1280x720"):
    response = requests.post(
        f"{BASE_URL}/v1/videos",
        headers=headers,
        data={
            "model": model,
            "prompt": prompt,
            "seconds": seconds,
            "size": size
        }
    )
    response.raise_for_status()
    return response.json()

# Image-to-Video
def create_video_from_image(prompt, image_path, model="sora-2", seconds="4", size="1280x720"):
    with open(image_path, "rb") as f:
        response = requests.post(
            f"{BASE_URL}/v1/videos",
            headers=headers,
            data={
                "model": model,
                "prompt": prompt,
                "seconds": seconds,
                "size": size
            },
            files={
                "input_reference": (image_path.split("/")[-1], f, "image/jpeg")
            }
        )
    response.raise_for_status()
    return response.json()

# Poll task status
def poll_status(video_id, timeout=600, interval=15):
    start_time = time.time()
    while time.time() - start_time < timeout:
        response = requests.get(
            f"{BASE_URL}/v1/videos/{video_id}",
            headers=headers
        )
        response.raise_for_status()
        data = response.json()

        status = data.get("status")
        progress = data.get("progress", 0)
        print(f"Status: {status}, Progress: {progress}%")

        if status == "completed":
            return data
        elif status == "failed":
            raise Exception(f"Video generation failed: {data.get('error')}")

        time.sleep(interval)

    raise TimeoutError("Video generation timeout")

# Download video
def download_video(video_id, output_path="output.mp4"):
    response = requests.get(
        f"{BASE_URL}/v1/videos/{video_id}/content",
        headers=headers
    )
    response.raise_for_status()

    with open(output_path, "wb") as f:
        f.write(response.content)
    print(f"Video saved to: {output_path}")

# Complete workflow
if __name__ == "__main__":
    # Text-to-Video
    job = create_video(
        prompt="A golden retriever playing fetch on a sunny beach",
        model="sora-2",
        seconds="8",
        size="1280x720"
    )
    print(f"Task created: {job['id']}")

    # Wait for completion
    result = poll_status(job["id"])
    print("Video generation completed!")

    # Download video
    download_video(job["id"], "my_video.mp4")

    # Image-to-Video example
    # job2 = create_video_from_image(
    #     prompt="The scene comes alive with gentle movement",
    #     image_path="reference.jpg",
    #     model="sora-2",
    #     seconds="4",
    #     size="1280x720"
    # )

Task Status Reference

StatusDescription
queuedTask queued, waiting to be processed
in_progressVideo is being generated
completedGeneration complete, ready for download
failedGeneration failed
Polling RecommendationVideo generation typically takes 2-5 minutes. We recommend polling status every 15-20 seconds to avoid excessive requests.

Developer Documentation

The Official Forward plan is fully compatible with OpenAI’s official API format. For more parameters and advanced usage, please refer to:

Important Notes

Key Limitations
  1. Async only: Official Forward does not support sync API, all requests are asynchronous
  2. Pay-as-you-go only: Must select “Pay-as-you-go” billing mode, “Pay-per-call” is not supported
  3. Group selection: Must select “Sora2官转” group when creating tokens
  4. Image limitation: Image-to-video does not support images containing real human faces

FAQ

Official Forward directly calls OpenAI’s official API with 99.99% stability; reverse-engineered is implemented through reverse engineering the official website, with lower prices but potentially affected stability.
OpenAI’s official Sora API itself only provides async calling method, so Official Forward also only supports async calls.
Official Forward supports OpenAI’s official 4/8/12 second duration options; reverse-engineered supports the official website interface’s 10/15 second durations.
Image resolution must match the target video’s size parameter. For example, if size=1280x720, the image must be 1280×720 pixels. Supported formats: JPEG, PNG, WebP. Images containing real human faces are not supported.