Skip to main content
非同期タスク API は、2 つのエンドポイントと 1 つのリクエストエンベロープで構成されます。タスクを送信すると、すぐに ID が返され、生成は WideRouter 側で実行されます。 モデルの処理中も、リクエスト側で接続を維持する必要はありません。
HTTP 接続を 20–50 秒間開いたままにする必要がある場合は、この API を使用してください。すでに動作する同期インテグレーションがある場合は、移行する前に 同期または非同期の選択を参照してください。

エンドポイント

作成時のパスは複数形で、読み取り時は単数形であることに注意してください。リスト、キャンセル、削除のエンドポイントはありません。

タスクを作成する

リクエストボディは、常に次の3つのキーを持つエンベロープです。 modelinput、およびオプションのcallback_urlです。
レスポンスは3つのフィールドで構成され、1秒未満で返されます。

エンベロープのフィールド

エンベロープレベルの未知のキーは現在受け付けられ、無視されます。ただし、 この動作に依存せず、生成パラメータをそこに配置しないでください。生成パラメータはinputに指定します。

inputオブジェクト

inputには生成パラメータが含まれ、受け付けるフィールドはモデルによって異なります。その周囲のエンベロープは固定されていますが、内容は固定されていません。 input内のバリデーションは厳格です。モデルが認識しないキーはすべて 即座に拒否されるため、タイプミスを見逃さずに検出できます。

Nano Banana シリーズ

フィールドの完全な一覧、解像度の段階、アスペクト比、および画像編集。

結果をポーリングする

完了したタスクは次のようになります。

タスクのフィールド

レスポンスはタスクの進行に応じて拡張されます。タスクの実行中は、outputsexpires_atは単に存在しません。固定された形状を前提にせず、フィールドを防御的に読み取り、まずstatusに基づいて分岐してください。

ステータスの流れ

両方の終端状態は最終状態であり、読み取りエンドポイントはべき等です。完了したタスクを繰り返し読み取ると、バイト単位で同一の JSON が返されます。

待機時間

送信処理は 1 秒未満で完了し、負荷がかかってもその状態が維持されます。同時実行数 12 で 30 件のタスクを処理した測定では、p50 は 0.88 秒、p95 は 0.92 秒でした。時間がかかるのは生成処理自体で、モデルと解像度に応じておよそ 12~50 秒です。そのうち 0~11 秒はキュー待ちに費やされます。モデルごとの数値は各モデルのページに記載されています。
2~3 秒ごとにポーリングし、短い間隔でループしないでください。読み取りには単独でも往復に約 0.9 秒かかるため、それより速くポーリングしても何も得られず、レート制限を消費するだけです。

出力のダウンロード

outputsは、署名やクエリ文字列を含まないプレーンなhttpsURLで、APIとは異なるホスト名のWideRouterの配信CDNから提供されます。これにより、次の2点が導かれます。
1

認証されていません

APIキーを送信してはいけません。また、URL自体を秘密情報として扱ってください。 リンクを持っている人は誰でも、そのURLが有効な間は画像を取得できます。
2

24時間後に期限切れになります

expires_atは常にcreated_atに86400を加えた値です。保持する必要があるものはすべて 自分のストレージにコピーしてください。出力URLを永続的な参照として保存してはいけません。
ダウンロード時にはUser-Agentヘッダーを送信してください。 CDNの背後にはWAFがあり、 User-Agentがないリクエストや、デフォルトのPython-urllib/3.xのリクエストに対して、 空の403を返します。期限切れのリンクとまったく同じように見えますが、実際には異なります。 動作確認済み: ブラウザ、curlrequestsaxiosokhttp、Java、Go、 Postman。動作しないもの: ヘッダーのない生のurllib.request.urlopen(url)
画像は、C2PAコンテンツ認証情報マニフェストを含むJPEGとして返されます。測定されたファイルサイズは、 1Kで約0.4~0.7 MB、2Kで2.4~3.0 MB、4Kで7.5~8.2 MBです。 ファイル拡張子を推測するのではなく、レスポンスからContent-Typeを読み取ってください。

コールバック

作成時に callback_url を設定すると、WideRouter が完了したタスクをそこに POST するため、 ポーリングを完全に省略できます。
URL は https でなければなりません。それ以外のもの — http、ホスト名のみの値、文字列以外の値 — は送信時に invalid_callback_url で拒否されるため、誤記があっても、配信されないまま気づけないのではなく、 すぐに失敗します。 WideRouter はタスクオブジェクトを application/json として POST します。本文を解析する前に ルーティングに使用できるヘッダーも含まれます。 本文は、その時点で GET /v1/task/{task_id} が返す内容とバイト単位で同一です — フィールドも値も同じであるため、1つのハンドラーで両方の経路に対応できます。 テストでは配信は即時に行われました。3つのタスクのコールバックはすべて、タスクが completed に到達してから1秒以内に届きました。エンドポイントが 5xx を返した場合、 WideRouter は再試行します。確認された試行は、およそ0秒、10秒後、70秒後でした。
コールバックには署名がありません。 HMAC ヘッダーはなく、リクエストが WideRouter から送信されたことを 証明するのは URL だけです。ペイロードは正式な情報源ではなくヒントとして扱ってください。callback_url には推測しにくい長いパスを使用し、重要な処理を行う前にハンドラーで GET /v1/task/{task_id} を 再読み込みしてください。
コールバックはレイテンシーを最適化するものであり、配信を保証するものではありません。コールバックが届かない タスクに備えてポーリングのフォールバックを維持し、ハンドラーは冪等にしてください — 再試行によって同じタスクが複数回届く可能性があるため、タスク id をキーにします。

タスクが失敗した場合

failedタスクは、readエンドポイントでは依然として200です。失敗しているのはHTTPステータスではなく、 ボディです。
outputsexpires_atもない点に注意してください。入力取得の失敗は、モデル処理の前に発生するため高速で、 1秒未満です。

送信時のエラー

バリデーションは何かがキューに追加される前に行われるため、ここでの400には費用がかかりません。 エラーは一度に1つのフィールドを指し、paramは配列インデックス(input.images[0])を含む完全なパスを使用するため、失敗箇所をリクエストに直接対応付けられます。

ここで利用できるモデル

モデル ID は完全一致で照合されます。エイリアスはなく、-previewが付いた 名前は受け付けられません。非同期 API で提供されていない ID を送信すると、 キューに追加される前の送信時点でmodel_not_supportedが返されます。

Nano Banana シリーズ

Google の画像モデル — 各提供先での利用可否、パラメータ、実測レイテンシ。

同期と非同期の選択

どちらの方式も利用でき、いずれも非推奨ではありません。 サーバーレス関数、リバースプロキシ、またはモバイルクライアントの背後で実行する処理では、50 秒のリクエストに確実に耐えられるものはないため、通常は非同期のほうが適しています。単にバイト列を受け取りたいスクリプトでは、同期呼び出しのほうがシンプルです。

次のステップ

Nano Banana シリーズ

パラメータマトリクス、解像度の段階、および2つのモデルの違い。

クイックスタート

エンドツーエンドの同じフローを約5分で実行できます。