API 文档
学习如何集成 Sora2 API 以编程方式生成精美视频
Table of Contents
快速开始
只需 3 步即可开始使用 Sora2 API
💡 点击复制后可直接粘贴给 ChatGPT、Claude 等 AI 助手实现
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 小时
请在此期间内下载