動画生成API呼び出しドキュメント
kozeaiは、OpenAI Soraと互換性のある動画生成インターフェースを提供します。**非同期タスク**モードを使用し、まずタスクを送信して`task_id`を取得し、次にタスクのステータスをポーリングし、完了後に動画コンテンツをダウンロードします。
認証
すべてのリクエストは`Authorization: Bearer
export KOZEAI_API_KEY="sk-your-token"
export KOZEAI_BASE_URL="https://api.kozeai.com"
インターフェース概要
| メソッド | パス | 目的 |
|---|---|---|
| POST | /v1/videos/generations |
動画タスクの作成 |
| GET | /v1/videos/{task_id} |
タスクステータスの照会 |
| GET | /v1/videos/{task_id}/content |
オンライン再生またはダウンロード | mp4
提出インターフェースから返されるタスクID(
task_12345の形式)は、現在のユーザーのみに属します。
1.動画タスクを作成します
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "video-ds-2.0",
プロンプト: 暖かい日差しの中を走る猫の9分16秒の映画のような動画、
秒: 15、
アスペクト比: 9分16秒
}
リクエストパラメータ
| パラメータ | タイプ | 必須 | 説明 |
|---|---|---|---|
model |
string | はい | ビデオモデル名(例:video-ds-2.0 | )
prompt |
string | はい | ビデオコンテンツの説明 | 秒 |
整数 | いいえ | 動画の長さ(秒)。アップストリームモデルのサポート範囲に基づきます。 |
アスペクト比 |
文字列 | いいえ | アスペクト比。一般的に使用されるのは9:16、16:9、1:1 | です。
画像 |
配列 | いいえ | 参照画像のURLまたはbase64 |
動画 |
配列 | いいえ | 参照動画URL |
音声 |
配列 | いいえ | 参照音声URL |
上流モデルによってサポートされるパラメータが異なる場合があります。
記載されていないパラメータは、アップストリームプロトコルに従って渡されます。
画像生成ビデオ(参照画像付き)
参照画像に基づいてビデオを生成するには、images配列を渡してください。
curl "$KOZEAI_BASE_URL/v1/videos/generations" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-H "Content-Type: application/json" \
-d {
モデル: video-ds-2.0,
プロンプト: 参考画像スタイルを使用して、スムーズな製品ビデオを作成します,
秒: 15,
アスペクト比: 9:16,
画像: ["https://example.com/input.png"],
"videos": ["https://example.com/input.mp4"],
"audios": ["https://example.com/input.mp3"]
}'
imagesは画像URLまたはbase64をサポートしています。videos/audiosはオプションの参考資料です。- チャットの自動補完インターフェース(記事末尾参照)からメッセージを送信する場合、画像をメッセージに添付するだけで、システムが自動的に
imagesパラメータに変換します。
レスポンス(送信成功)
{
"id": "task_12345",
"task_id": "task_12345",
"object": "video",
"model": status 値: queued (キューに追加済み)、in_progress (処理中)、completed (完了)、failed (失敗)。
2.タスクステータスのポーリング
送信によって返されるidを使用してポーリングします。推奨間隔は3~5秒です。
curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \
-H "Authorization: Bearer $KOZEAI_API_KEY"
レスポンス(生成中)
{
"id": "task_12345",
"object": "video",
"model": "video-ds-2.0",
"status": "in_progress",
"progress": "progress": "progress" 45,
"created_at": 1751000000
}
レスポンス(完了)
{
"id": "task_12345",
"object": "video",
"model": "model" "video-ds-2.0",
"status": "completed",
"progress": 100,
"created_at": 1751000000,
完了後、`metadata.content_url` には直接アクセスできる動画アドレスが表示されます。また、下記のコンテンツインターフェースを使用してダウンロードすることもできます。
レスポンス(失敗)
{
"id": "task_12345",
"object": "video",
"status": "failed",
"error": { "message": "失敗理由" }
}
3.動画コンテンツをダウンロード
curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \
-H "Authorization: Bearer $KOZEAI_API_KEY" \
-o result.mp4
- タスクが完了していない場合(キュー内/生成中)は409 Conflictを返します。
リクエストヘッダーを使用して、セグメントダウンロード/ドラッグアンドドロップ再生をサポートします。
video/mp4
.
完全な例
JavaScript (fetch + ポーリング)
const BASE = process.env.KOZEAI_BASE_URL;
const KEY = process.env.KOZEAI_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// 1. タスクの送信
const submit = await fetch(`${BASE}/v1/videos/generations`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'video-ds-2.0',
prompt: 'ガラスの上に置かれた香水瓶の滑らかなコマーシャルビデオ',
seconds: 15,
aspect_ratio: '9:16',
}),
});
const task = await submit.json();
const taskId = task.id;
// 2. 完了するまでポーリング
async function poll() {
while (true) {
const res = await fetch(`${BASE}/v1/videos/${taskId}`, { headers });
const data = await res.json();
if (data.status === 'completed') return data;
if (data.status === 'failed') throw new Error(data.error?.message || 'failed');
await new Promise((r) => setTimeout(r, 5000));
}
} const done = await poll();
// 3. 動画アドレスを取得
console.log('動画アドレス:', done.metadata?.content_url
|| `${BASE}/v1/videos/${taskId}/content`);
Python (requests + polling)
import os、time、requests
BASE = os.environ["KOZEAI_BASE_URL"]
KEY = os.environ["KOZEAI_API_KEY"]
headers = {"Authorization": f"Bearer {KEY}"}
# 1. タスクを送信
resp = requests.post(
f"{BASE}/v1/videos/generations",
headers=headers,
json={
"model": "video-ds-2.0",
"prompt": "暖かい中を走る猫の9分16秒の映画のようなビデオ日光"、
"秒": 15、
"アスペクト比": "9:16"、
}、
)
task_id = resp.json()["id]
# 2. ポーリング
while True:
data = requests.get(f "{BASE}/v1/videos/{task_id}", headers=headers).json()
if data["status"] == "completed":
break
if data["status"] == "failed":
raise RuntimeError(data.get("error", {}).get("message", "failed"))
time.sleep(5)
# 3. ダウンロード
mp4 = requests.get(f"{BASE}/v1/videos/{task_id}/content", headers=headers)
with open("result.mp4", "wb") as f: f.write(mp4.content)
チャット補完インターフェースで呼び出されます(互換性のある使用方法)
ビデオモデルは、/v1/chat/completions からも呼び出すことができ、チャットクライアントの再利用が容易になります。
リクエストを行う際は、`model` にビデオモデル名を渡すだけで、システムが自動的にビデオタスクに変換します。
curl $KOZEAI_BASE_URL/v1/chat/completions \
-H Authorization: Bearer $KOZEAI_API_KEY
\
-H Content-Type: application/json \
-d {
Model: } `returns "video-ds-2.0
,
"messages: [{"role: "user, "content: "日光の中を走る猫、シネマティック、9:16}]
}
チャット完了を返します
フォーマットは`message.content`で、タスクのステータスとリンク`/v1/videos/{task_id}`が含まれます。このリンクをクリックすると、完了後に動画が再生されます。チャットロビーページではこのメソッドが使用されます。
両方のエントリポイント(/v1/videos/generationsと/v1/chat/completions)は同じタスクシステムを共有しており、互いに競合しません。直接統合するには、標準の `/v1/videos/*` インターフェースを使用することをお勧めします。
エラーコード
| ステータスコード | 意味 |
|---|---|
| 401 | トークンが不足しているか、期限切れ、または無効です |
| 403 | 残高不足、または現在のグループにこのモデルへのアクセス権限がありません |
| 404 | タスクIDが存在しないか、現在のユーザーに属していません。 | または、モデルが設定されていません。
| 409 | 動画コンテンツが準備できていません(タスクがキューイング中/生成中です) |
| 429 | レート制限が発動しました |
| 502 | アップストリームサプライヤーが失敗したか、無効な結果を返しました |