ドキュメント
Seevio APIで開発する
あなたのプロダクトに動画生成機能を組み込みましょう。モデルを選び、リクエストを送信後、ポーリングまたはウェブフック経由で生成結果を受け取ることができます。
モデルの選択
各モデルのリファレンスには、すべてのパラメータ、料金、実装例が掲載されています。1つのモデルページを見るだけで、統合を完了させることができます。
認証
ダッシュボードでAPIキーを作成してください。APIキーの全体が表示されるのは作成時の1回のみです。キーは安全なサーバー上で管理し、すべてのリクエストのヘッダーに Bearer トークンとして含めて送信してください。
ベースURL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonこれらのサンプルコードを実行する前に、環境変数 SEEVIO_API_KEY を設定してください。JavaScriptのサンプルはサーバー上の Node.js で、Pythonのサンプルは requests ライブラリを使用して実行します。
クイックスタート
この例では、Seedance 2.5を使用して、720pで5秒間の動画を生成します。生成モードやパラメータの上限については、各モデルのリファレンスを開いてご確認ください。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'タスク作成時のレスポンス例
リクエストが承認されると、APIは次のJSONレスポンスを返します。taskIdは、その後のステータス照会に使用するタスク識別子です。creditsは、このタスクに確保されたクレジット数を示します。このレスポンスはタスクの作成が完了したことを示すものであり、動画の生成完了を意味するものではありません。動画の生成結果を取得するには、タスクステータスをポーリングするか、Webhookを使用する必要があります。
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}タスクのステータス確認
GET https://api.seevio.ai/v1/tasks/{taskId}サンプルのIDを、作成時に返された taskId に置き換えてください。ステータス確認は、そのAPIキーを所有するユーザーのタスクのみ可能です。権限がない、または存在しないIDの場合は HTTP 404 が返されます。
最初は10〜20秒間隔でポーリングを開始し、HTTP 429(レートリミット)が発生した場合は間隔を空け、ステータスが completed または failed になったら終了します。本番環境ではウェブフックの使用を推奨します。以下の各コード例は、1回のステータス確認リクエストを行うものです。
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| ステータス | 説明と制約条件 |
|---|---|
queued | 受け付けられ、処理待ちの状態です。 |
generating | 動画を生成中です。 |
completed | 生成成功(最終状態)。有効期限が切れる前に data.results から動画をダウンロードしてください。 |
failed | 生成失敗(最終状態)。failed_reason と billing_status を確認してください。 |
| フィールド | データ型 | 説明と制約条件 |
|---|---|---|
id | string | タスク識別子。作成時のレスポンスに含まれる taskId と同一です。 |
created_at | number | Unixタイムスタンプ(秒)で表されるタスク作成日時。 |
model | string | このタスクに使用された公開モデルのID。 |
billing_status | string | reserved(仮確保)、charged(決済完了)、refunded(返金済み)、または refund_failed(返金失敗)。 |
credits | number | このタスクのために仮確保されたクレジット。返金された後もこの値は保持されます。実際の課金結果を判断するには billing_status を参照してください。 |
failed_reason | string | null | タスクが失敗した場合のエラー理由。それ以外は null。ステータス確認時にタスクが失敗している場合、レスポンスに data は含まれません。 |
data | object | タスクが失敗していない場合に返されます。出力結果と処理の詳細が含まれます。 |
data.results | string[] | 動画URLの配列。生成が完了するまで、または動画の有効期限が切れた後は空になります。 |
data.video_expires_at | string | null | ISO 8601 形式のタイムスタンプで表される動画の有効期限。まだ利用できない場合は null。この期限までに結果を保存してください。 |
data.last_frame_url | string | null | 最終フレームがリクエストされ、取得可能な場合はそのURL。それ以外は null。 |
data.processing_time | number | null | プロバイダー側での処理時間(秒)。取得できない場合は null。 |
タスク完了時:動画生成結果を含むクエリレスポンス
クエリのレスポンスとしてstatus=completedが返された場合は、動画の生成が完了しています。data.resultsから動画のURLを取得し、data.video_expires_atの期限までにダウンロードしてください。billing_status=chargedは、確保されていたクレジットの決済が確定したことを示します。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}タスク失敗時:エラー原因と決済詳細を含むクエリレスポンス
クエリのレスポンスとしてstatus=failedが返された場合は、動画生成が正常に終了しなかったことを意味します。失敗の理由はfailed_reasonで、返金結果はbilling_statusで確認できます。この例では、refundedとなっておりクレジットが返却されたことを示しています。creditsには最初に確保された額がそのまま表示され、レスポンスにdataは含まれません。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}ウェブフック
本番環境への統合では、タスク作成時に callback_url を指定してください。すべてのモデルリファレンスに、コールバックのペイロード情報と受信サーバーの実装例が掲載されています。
作成リクエスト時に callback_url を設定すると、タスクが完了または失敗した際、JSONデータが POST リクエストで送信されます。受信側は15秒以内に 2xx レスポンスを返してください。配信に失敗した場合は再試行されます。同一のタスクIDで重複してコールバックを受信することがあるため、冪等(べきとう)な処理を行ってください。
コールバックエンドポイントは、JSON形式のリクエストボディ(Content-Type: application/json)を含むPOSTリクエストを受け付ける必要があります。
コールバックを指定してタスクを作成
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
},
"callback_url": "https://example.com/webhooks/seevio"
}'ウェブフックのペイロードはステータス確認時のレスポンスと異なり、billing_status と credits が除外されます。失敗の詳細は data.failed_reason および data.credits_refunded に含まれます。ウェブフックの created_at は、イベントが生成されたUnixタイムスタンプ(秒)です。
タスク完了:処理成功時のコールバックペイロード
生成が成功すると、コールバックのステータスは「status=completed」になります。idでタスクを特定し、data.resultsから動画のURLを取得してください。data.video_expires_atの期限が切れる前に、結果をダウンロードして保存してください。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}タスク失敗:処理失敗時のコールバックペイロード
生成が失敗すると、コールバックのステータスは「status=failed」になります。idでタスクを特定し、data.failed_reasonで失敗の理由、data.credits_refundedで返還されたクレジット数を確認してください。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}レシーバーの実装例
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData.data;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}このNext.jsのサンプルコードは、JSON形式のコールバックボディを読み込み、成功したタスクと失敗したタスクを直接処理します。実際のアプリケーション開発では、永続化処理やタスクIDの重複排除を追加してください。また、時間のかかる処理はキューに登録してから、コールバックへの応答を返すようにしてください。
エラー
HTTPエラーは、code と message を含む error オブジェクトを返します。正常に受け付けられたタスクであっても後から失敗することがあるため、タスクのステータスを確認するか、失敗時のコールバックを適切に処理してください。
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | フィールド | 対処方法 |
|---|---|---|
| 400 | invalid_request | JSONの構文、プロンプトの有無、パラメータの範囲、またはメディアURLに問題があります。修正して再試行してください。 |
| 401 | invalid_api_key | Bearer トークンが正しいか、およびAPIキーが有効化されているかを確認してください。 |
| 402 | insufficient_credits | クレジットを追加するか、タスクの消費想定を減らしてください。レスポンスには、必要なクレジット数と現在の保有クレジット数が含まれる場合があります。 |
| 403 | forbidden | エラーメッセージに記載されているアカウントレベルの制限事項を確認してください。 |
| 404 | not_found | タスクIDが正しいか、およびそのキーがタスクの作成者と一致しているかを確認してください。 |
| 429 | rate_limited | Retry-After ヘッダーに示された秒数が経過した後に再試行してください。 |
| 500 | internal_error | エラーメッセージとAPIログを確認してください。注意深く再試行してください。作成リクエストを再送信すると、新たに課金対象となるタスクが作成される可能性があります。 |