処理中...
プログラムでAI動画を生成。同じモデル、同じ品質、あなたのコードベースで。
# 1. Start a generation
curl -X POST https://www.bananapro.video/api/generate \
-H "Authorization: Bearer bpv_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cat astronaut floating in space",
"model": "seedance"
}'
# 2. Poll for the result
curl "https://www.bananapro.video/api/generation-status?id=YOUR_ID" \
-H "Authorization: Bearer bpv_live_xxxxxxxxxxxx"すべてのAPIリクエストにはAPIキーが必要です。Authorizationヘッダーに含めてください。
Authorization: Bearer bpv_live_xxxxxxxxxxxx/api/generate新しい動画生成を開始します。動画は非同期で生成されます — ポーリングまたはWebhookコールバックで結果を取得してください。
promptmodelaspectRatiodurationresolutionimageUrlcallback_url{
"success": true,
"data": {
"id": "fa6fd0ef-f5a8-44af-b8f4-565f0521f9cd",
"status": "processing",
"model": "seedance",
"prompt": "A cat astronaut floating in space",
"created_at": "2026-03-27T21:42:05.788Z"
},
"remaining_credits": 1450
}/api/generation-status?id=YOUR_IDこのエンドポイントをポーリングして生成のステータスを確認します。生成エンドポイントから返されたidを使用してください。
{
"id": "fa6fd0ef-...",
"status": "processing",
"video_url": null,
"thumbnail_url": null,
"created_at": "2026-03-27T21:42:05.788Z"
}{
"id": "fa6fd0ef-...",
"status": "completed",
"video_url": "https://fal.media/files/.../video.mp4",
"thumbnail_url": null,
"created_at": "2026-03-27T21:42:05.788Z"
}5〜10秒ごとにポーリングしてください。生成はモデルに応じて通常1〜3分かかります。
ポーリングの代わりに、生成作成時にcallback_urlを指定できます。動画が完成したらPOSTで結果をお送りします — ポーリング不要です。
curl -X POST https://www.bananapro.video/api/generate \
-H "Authorization: Bearer bpv_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cat astronaut floating in space",
"model": "seedance",
"callback_url": "https://your-app.com/webhook/video-ready"
}'動画が完成(または失敗)すると、callback_urlにPOSTリクエストを送信します:
// POST to your callback_url
{
"id": "fa6fd0ef-...",
"status": "completed",
"video_url": "https://fal.media/files/.../video.mp4",
"thumbnail_url": null,
"created_at": "2026-03-27T21:42:05.788Z",
"completed_at": "2026-03-27T21:43:12.673Z"
}sora-2Sora 2OpenAI's flagship model - cinematic quality
veo-3.1Veo 3.1 FastGoogle's model with native audio
kling-2.6Kling 2.6 ProHigh-fidelity with audio support
kling-1.6-elementsKling ElementsMulti-image fusion (2-4 images)
wan-2.5Wan 2.5Ultra-realistic, best value
ray-3Ray 2 FlashLuma's fast creative generation
seedanceSeedance 1.0 LiteByteDance - fast & efficient
minimaxHailuo 02 StandardMiniMax - ultra-realistic humans
import requests
import time
API_KEY = "bpv_live_xxxxxxxxxxxx"
BASE_URL = "https://www.bananapro.video"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 1. Start generation
response = requests.post(f"{BASE_URL}/api/generate", headers=HEADERS, json={
"prompt": "A cat astronaut floating in space",
"model": "seedance",
"aspectRatio": "16:9"
})
generation = response.json()
gen_id = generation["data"]["id"]
print(f"Generation started: {gen_id}")
print(f"Remaining credits: {generation['remaining_credits']}")
# 2. Poll until completed
while True:
status = requests.get(
f"{BASE_URL}/api/generation-status?id={gen_id}",
headers=HEADERS
).json()
if status["status"] == "completed":
print(f"Video ready: {status['video_url']}")
break
elif status["status"] == "failed":
print(f"Generation failed: {status.get('error')}")
break
time.sleep(5)const API_KEY = "bpv_live_xxxxxxxxxxxx";
const BASE_URL = "https://www.bananapro.video";
// 1. Start generation
const response = await fetch(`${BASE_URL}/api/generate`, {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
prompt: "A cat astronaut floating in space",
model: "seedance",
aspectRatio: "16:9"
})
});
const { data, remaining_credits } = await response.json();
console.log(`Generation started: ${data.id}`);
console.log(`Remaining credits: ${remaining_credits}`);
// 2. Poll until completed
while (true) {
const status = await fetch(
`${BASE_URL}/api/generation-status?id=${data.id}`,
{ headers: { "Authorization": `Bearer ${API_KEY}` } }
).then(r => r.json());
if (status.status === "completed") {
console.log(`Video ready: ${status.video_url}`);
break;
} else if (status.status === "failed") {
console.error(`Failed: ${status.error}`);
break;
}
await new Promise(r => setTimeout(r, 5000));
}