ドキュメントに戻る

動画生成 API

API キーで Veo 3.1 のテキストから動画・画像から動画のタスクを作成し、画像と同じ /api/status エンドポイントで結果を取得します。

Nano AI API ベース URL: https://nanobnana.com

認証

すべてのリクエストで API キーを Bearer トークンとして送信してください。タスクの作成とステータス確認には同じキーを使います。キーはダッシュボードの API Keys ページで作成できます。

http
Authorization: Bearer YOUR_API_KEY

モデルとクレジット

model フィールドには下表のいずれかの値を指定してください。それ以外の値は HTTP 400 で拒否され、クレジットは消費されません。

model の値モデルテキストから動画(クレジット)画像から動画(クレジット)
veo3_fastVeo 3.1 Fast(デフォルト)2535
veo3Veo 3.1 Quality180180

veo3-fast は veo3_fast の別名として使えます。model を省略すると veo3_fast になります。image_urls に URL が 1 つ以上ある場合は画像から動画の料金になります。

動画タスクの作成

リクエストを検証し、クレジットを消費して task_id を返します。動画は非同期で生成されます。/api/status をポーリングするか、callback_url を指定して結果を受け取ってください。

リクエストボディJSON
prompt:string

生成する動画のテキスト説明。

model:任意string

veo3_fast(別名 veo3-fast)または veo3。それ以外の値は HTTP 400 を返します。 デフォルト値 veo3_fast.

image_urls:任意string[]

画像から動画に使う公開画像 URL。1 枚の場合はその画像を中心に動画が作られ、2 枚の場合は最初と最後のフレームになります。キャメルケースの imageUrls も別名として使えます。両方を送った場合は image_urls が優先されます。

aspect_ratio:任意string

16:9、9:16、Auto のいずれか。Auto はアップロード画像に合わせて動画をトリミングします。 デフォルト値 16:9.

translation:任意boolean

true の場合、生成前にプロンプトを英語に翻訳します。 デフォルト値 true.

watermark:任意string

動画に追加する透かしテキスト。

callback_url:任意string

タスク終了時に最終結果を POST で受け取る公開 URL。

サポートされていないフィールド

duration、resolution、単数形の image_url はこの API には含まれず、無視されます。動画の長さはモデルが決めます。画像は image_urls 配列で送ってください。

bash
curl -X POST "https://nanobnana.com/api/video/generate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
    "model": "veo3_fast",
    "image_urls": ["https://example.com/first-frame.jpg"],
    "aspect_ratio": "16:9"
  }'
{
  "code": 200,
  "message": "success",
  "data": {
    "task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv"
  }
}

タスクステータスの確認

動画タスクの ID は veo で始まり bksv で終わります。/api/status は自動で判別し、タスク完了時に動画 URL を返します。

クエリパラメータ
task_id:string

POST /api/video/generate が返した task_id。

model:任意string

task_id が veo…bksv 形式でない場合に veo3 を指定すると、動画タスクとして照会します。

bash
curl "https://nanobnana.com/api/status?task_id=veo24223f74e4f445ec9c4403b532cc328fbksv" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "task_id": "veo24223f74e4f445ec9c4403b532cc328fbksv",
    "request": {
      "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
      "model": "veo3_fast",
      "image_urls": [
        "https://example.com/first-frame.jpg"
      ],
      "aspect_ratio": "16:9"
    },
    "response": null,
    "status": "IN_PROGRESS",
    "status_code": 3,
    "status_text": "IN_PROGRESS",
    "consumed_credits": 35,
    "created_at": "2026-10-04 17:05:12",
    "model": "veo3"
  },
  "model": "veo3"
}

ステータスの値

  • IN_PROGRESS · status_code: 3 — 動画はまだ生成中です。ポーリングを続けてください。
  • COMPLETED · status_code: 1 — 動画が完成しました。response に動画 URL が入ります。
  • FAILED · status_code: 2 — 生成に失敗しました。error_message に理由が入り、クレジットは自動で返金されます。

課金と返金

  • クレジットはタスク作成時、生成開始前に消費されます。
  • 作成リクエストが HTTP 200 を返さなかった場合、タスクは作成されず、消費したクレジットはすぐに返金されます。返金されたクレジット数はレスポンスに記載されます。
  • 作成済みのタスクが最終的に FAILED になった場合、クレジットは自動で返金され、ステータスレスポンスの consumed_credits は 0 になります。

ポーリングの例

動画生成には通常数分かかります。status_code が 3 の間は 10 秒ごとに照会し、1 または 2 になったら停止してください。

javascript
async function waitForVideo(taskId) {
  while (true) {
    const res = await fetch(`https://nanobnana.com/api/status?task_id=${taskId}`, {
      headers: { Authorization: 'Bearer YOUR_API_KEY' }
    });
    const payload = await res.json();
    if (!res.ok) throw new Error(payload.message);

    const task = payload.data;
    if (task.status_code === 1) return task.response[0];
    if (task.status_code === 2) throw new Error(task.error_message || 'Video generation failed');

    await new Promise((resolve) => setTimeout(resolve, 10000));
  }
}

コールバック

callback_url を指定すると、タスクの完了時または失敗時に、次の JSON を含む POST リクエストを送信します。URL はインターネットから到達できる必要があります。

{
  "code": 200,
  "message": "success",
  "data": {
    "request": {
      "prompt": "The camera slowly pushes in as the city lights turn on at dusk",
      "model": "veo3_fast",
      "image_urls": [
        "https://example.com/first-frame.jpg"
      ],
      "aspect_ratio": "16:9"
    },
    "response": [
      "https://example.com/generated-video.mp4"
    ],
    "status": "COMPLETED",
    "created_at": "2026-10-04 17:05:12"
  }
}

よくあるエラー

{
  "code": 400,
  "message": "prompt is required",
  "data": null
}