API 文档

学习如何集成 Sora2 API 以编程方式生成精美视频

快速开始
只需 3 步即可开始使用 Sora2 API

💡 点击复制后可直接粘贴给 ChatGPT、Claude 等 AI 助手实现

1. 获取 API 密钥

创建账户并从控制台生成您的 API 密钥

获取 API 密钥

2. 发送首个请求

使用您的 API 密钥进行身份验证并开始生成视频

// Make your first video generation request
async function generateVideo() {
  const response = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A beautiful sunset over the ocean with gentle waves',
      aspectRatio: '16:9',
      duration: 10,
      type: 'text2video'
    })
  });
  
  const result = await response.json();
  console.log('Task ID:', result.data.taskId);
  console.log('Credits used:', result.data.creditsUsed);
  
  return result.data.taskId; // Save this for status checking
}

generateVideo();

3. 轮询结果

检查视频生成任务的状态并获取视频 URL

// Complete example: Generate and poll for video
async function generateAndWaitForVideo() {
  // Step 1: Start video generation
  const generateResponse = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A beautiful sunset over the ocean with gentle waves',
      aspectRatio: '16:9',
      duration: 10,
      type: 'text2video'
    })
  });
  
  const generateResult = await generateResponse.json();
  const taskId = generateResult.data.taskId;
  console.log('Video generation started, Task ID:', taskId);
  
  // Step 2: Poll for completion
  return new Promise((resolve, reject) => {
    const checkStatus = async () => {
      const statusResponse = await fetch('https://sora2api.org/api/check-video-status', {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer YOUR_API_KEY',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ taskId })
      });
      
      const statusResult = await statusResponse.json();
      const { status, progress, videoUrl } = statusResult.data;
      
      console.log(`Status: ${status}, Progress: ${progress}%`);
      
      if (status === 'succeeded') {
        console.log('Video ready! URL:', videoUrl);
        resolve(videoUrl);
      } else if (status === 'failed') {
        reject(new Error('Video generation failed'));
      } else {
        // Still processing, check again in 5 seconds
        setTimeout(checkStatus, 5000);
      }
    };
    
    checkStatus();
  });
}

// Usage
generateAndWaitForVideo()
  .then(videoUrl => console.log('Final video URL:', videoUrl))
  .catch(error => console.error('Error:', error));
身份验证
所有 API 请求必须在 Authorization 标头中包含您的 API 密钥

在 Authorization 标头中包含您的 API 密钥:

Authorization: Bearer YOUR_API_KEY

身份验证示例

curl -X POST https://sora2api.org/api/generate-video \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "A cat playing", "aspectRatio": "16:9", "duration": 10, "type": "text2video"}'
API 端点
POST/api/generate-video

启动视频生成任务并返回任务 ID

参数

promptrequired

视频的文本描述或操作提示(字符串,必需)

aspectRatiorequired

视频宽高比:"16:9"(横屏)或 "9:16"(竖屏)(字符串,必需)

durationoptional

视频时长(秒):10 或 15(数字,可选,默认:10)。费用按分辨率计算:480p 10秒 = 95积分,480p 15秒 = 143积分,720p 10秒 = 205积分,720p 15秒 = 308积分

imageUrloptional

已上传图片的公开 URL(字符串,可选,图片转视频时必需)

请求示例

{
  "prompt": "A beautiful sunset over the ocean",
  "aspectRatio": "16:9",
  "resolution": "480p",
  "duration": 10, // optional, default 10, can be 10 or 15 seconds
  "type": "text2video",
  "imageUrl": "https://yourdomain.com/image.jpg" // optional, for image2video
}

响应示例

{
  "code": 0,
  "data": {
    "success": true,
    "taskId": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx",
    "creditsUsed": 95,
    "message": "Video generation started"
  }
}
POST/api/check-video-status

检查视频生成任务的状态和进度

参数

taskIdrequired

从 generate-video 端点返回的任务 ID(字符串,必需)

请求示例

{
  "taskId": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx"
}

响应示例

{
  "code": 0,
  "data": {
    "status": "succeeded",
    "progress": 100,
    "videoUrl": "https://example.com/video.mp4",
    "id": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx"
  },
  "msg": "success"
}

状态码

running视频生成进行中
succeeded视频生成成功完成
failed视频生成失败(积分将被退还)
代码示例
文字转视频和图片转视频的完整示例

仅从文字描述生成视频:

async function generateTextToVideo() {
  // Step 1: Generate video
  const generateResponse = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A serene mountain landscape at sunrise',
      aspectRatio: '16:9',
      resolution: '480p', // optional: 480p or 720p, default 480p
      duration: 10, // optional: 10 or 15 seconds
      type: 'text2video'
    })
  });
  
  const { data } = await generateResponse.json();
  const taskId = data.taskId;
  
  // Step 2: Poll for status
  const pollStatus = async () => {
    const statusResponse = await fetch('https://sora2api.org/api/check-video-status', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ taskId })
    });
    
    const statusData = await statusResponse.json();
    
    if (statusData.data.status === 'succeeded') {
      console.log('Video URL:', statusData.data.videoUrl);
      return statusData.data.videoUrl;
    } else if (statusData.data.status === 'running') {
      // Poll again after 3 seconds
      setTimeout(pollStatus, 3000);
    } else {
      console.error('Generation failed');
    }
  };
  
  pollStatus();
}
错误处理
您可能遇到的常见错误及处理方法

常见错误码

401 Unauthorized

无效或缺少 API 密钥。请检查您的 Authorization 标头。

402 Payment Required

积分不足。请购买更多积分以继续。

400 Bad Request

无效的请求参数。请检查您的请求正文。

限制和定价

每个视频成本

95-308 积分

480p:10秒 95积分,15秒 143积分。720p:10秒 205积分,15秒 308积分

视频时长

10s / 15s

可选择 10秒 或 15秒

最大图片大小

5MB

用于图片转视频生成

视频 URL 有效期

2 小时

请在此期间内下载