API ドキュメント
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));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/generate-video動画生成タスクを開始し、タスク ID を返します
パラメータ
promptrequired動画のテキスト説明またはアクションプロンプト(文字列、必須)
aspectRatiorequired動画のアスペクト比: "16:9"(横長)または "9:16"(縦長)(文字列、必須)
durationoptionalVideo duration in seconds: 10 or 15 (number, optional, default: 10). Cost depends on resolution: 480p 10s = 95 credits, 480p 15s = 143 credits, 720p 10s = 205 credits, 720p 15s = 308 credits
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"
}
}/api/check-video-status動画生成タスクのステータスと進捗状況を確認
パラメータ
taskIdrequiredgenerate-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"
}ステータスコード
テキスト説明のみから動画を生成:
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: 95 credits for 10s, 143 credits for 15s. 720p: 205 credits for 10s, 308 credits for 15s
動画の長さ
10s / 15s
10秒または15秒を選択
最大画像サイズ
5MB
画像から動画の生成用
動画 URL の有効期限
2 時間
この期間内にダウンロードしてください