画像生成(OpenAI Images API)
OpenAI Images API 形式での同期画像生成です。パラメーター、最大 300 秒の待機、完成した画像に対する請求のみ、Cherry Studio の設定について説明します。編集は非同期の /api/media/generate を経由します。
POST /v1/images/generations は OpenAI Images API 形式で画像を生成します。リクエストを送信すると、同じレスポンスで画像が返されます。これは POST /api/media/generate と同じキュー上のアダプターです。モデル、価格、残高チェック、サプライヤーのフェイルオーバー、請求が共有されるため、同じ生成であればどちらのアドレスでも料金は同じです。
curl https://getvibeapi.com/v1/images/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"nano-banana","prompt":"a red bicycle on a bridge","n":1,"size":"1024x1024"}'レスポンス(HTTP 200):
{
"created": 1792706400,
"data": [{ "url": "https://getvibeapi.com/media/r/…/0.png" }]
}キーは Authorization: Bearer sk-pv-… または x-api-key として渡します。公式 OpenAI SDK はそのまま動作します。
from openai import OpenAI
client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...", timeout=600)
image = client.images.generate(model="nano-banana", prompt="a red bicycle on a bridge", size="1024x1024")
print(image.data[0].url)ボディパラメータ
| パラメーター | タイプ | 説明 |
|---|---|---|
modelreq. | string | /api/media-catalog の画像モデル ID(kind: "image")です。例:nano-banana、gpt-image-2、flux-2。ベンダー接頭辞付き ID(google/nano-banana)と固定バリアント(gpt-image-2:network)も受け付けられます。動画モデルと音声モデルはここでは 400 で拒否されます。 |
promptreq. | string | 画像の説明です。 |
n | number | 1 件のみです。各生成は、それぞれ固有の価格を持つ別個のジョブになります。複数の画像を生成する場合は、複数のリクエストを送信してください。 |
size | string | アスペクト比として処理されます:1024x1024 → 1:1、1792x1024 → 16:9、1024x1792 → 9:16、1536x1024 → 3:2、1024x1536 → 2:3。その他の値も正確に縮約されます(1920x1080 → 16:9)。モデルが提供していない比率は、対応サイズの一覧とともに拒否されます。最も近い値への置き換えはありません。"auto" またはフィールドなしの場合は、モデルのデフォルトになります。 |
quality | string | カタログで quality パラメーターが指定されているモデルに限ります。対応していない値は拒否されます。"auto" の場合は省略されます。 |
response_format | "url" | "b64_json" | デフォルトでは url です。b64_json はファイルをレスポンス本文で返します(最大 20 MB)。 |
user | string | 受け付けられますが、無視されます。 |
未知のフィールド、および background、style、output_format、output_compression、moderation、stream、partial_images は、暗黙的に削除されるのではなく、名前に基づいて 400 で拒否されます。そうでなければ、要求していない画像の料金を支払うことになるためです。元画像が必要なモデル(編集、アップスケーリング、インペインティング)は、ここでは画像を渡す方法がないため動作しません。POST /api/media/generate を使用してください。
待機とタイムアウト
ジョブが完了するまで、最大 300 秒間リクエストを保持します。所要時間の中央値はモデルによって 15~85 秒です。最も遅いモデルでは、個々の生成に 3~4 分かかります。クライアントのタイムアウトを少なくとも 300 秒に設定してください(OpenAI SDK のデフォルトは 600 です)。
- ジョブの作成後に発生したエラーを含め、すべてのレスポンスにジョブ ID を示す
x-pv-media-job-idヘッダーが含まれます。 - ジョブが 300 秒以内に完了しなかった場合、
504とcause: image_generation_timeoutが返され、メッセージにジョブ ID が含まれます。生成は継続して実行されるため、GET /api/media/jobs/{id}から取得してください。 - 接続が切断された場合(アプリのタイムアウト、ネットワーク障害)でも、ジョブは完了まで処理されます。
GET /v1/images/generations?limit=20(最大 100)には、このキーの最近の画像と、そのステータス、リンク、請求額cost_rubが一覧表示されます。
請求
送信時には請求されません。正常に完了した生成にのみ、/api/media-catalog および POST /api/media/price の見積もりと同じ価格で請求されます。生成に失敗した場合は、"Nothing was charged" と記載された 502 が返され、料金は発生しません。請求額は x-pv-cost-rub ヘッダーで返されます。残高で生成料金をまかなえない場合は、ジョブが開始される前に 402 が返されます。
data[].url 内のリンクは当社ドメインを指しており、生成完了後 7 日間有効です。その後は 410 media_result_expired になります。ファイルはご自身の環境に保存してください。エラー
| パラメーター | タイプ | 説明 |
|---|---|---|
400 | invalid_request_error | Invalid body: unknown_parameter, unsupported_parameter, unsupported_n, unsupported_size, unsupported_quality, unsupported_model_kind. Fix the request. |
401 / 403 | authentication_error / permission_error | キーが無効であるか、呼び出し元の IP がキーの許可リストに登録されていません。 |
402 | insufficient_quota | この生成に必要な残高が不足しています。ジョブは作成されませんでした。 |
404 | not_found_error | model_not_found — そのような画像モデルはありません。/api/media-catalog を参照してください。 |
429 | rate_limit_error | メディアのレート制限です。Retry-After の後に再試行してください。 |
502 | upstream_error | 生成に失敗しました。料金は発生していないため、再試行できます。 |
503 | upstream_error | 現在、すべてのサプライヤーでモデルを利用できません。ジョブは作成されていないため、後でもう一度試すか、別のモデルを選択してください。 |
504 | upstream_error | image_generation_timeout — ジョブはまだ実行中です。x-pv-media-job-id の ID を使用して取得してください。 |
デスクトップアプリ(Cherry Studio など)
OpenAI 互換プロバイダーを通じて画像を生成できるアプリであれば動作します。ここでは Cherry Studio を例に説明します。
- タイプ OpenAI のプロバイダーを、API アドレス
https://getvibeapi.com(アプリが/v1自体を追加します)と、ご自身のsk-pv-…キーで追加します。 https://getvibeapi.com/api/media-catalogの ID(kind: "image"のエントリのみ)を使ってモデルを手動で追加します。例:nano-bananaまたはgpt-image-2。アプリのモデル一覧にはテキストモデルが表示されます。メディアモデルは一覧にありません。- 通常のチャットではなく、アプリのペイント/画像生成機能から生成してください。チャットはリクエストを
/v1/chat/completionsに送信しますが、そこでは画像モデルは動作しません。 - アプリでリクエストタイムアウトを設定できる場合は、少なくとも 300 秒に設定してください。アプリが途中で諦めた画像は
GET /v1/images/generationsに一覧表示されます。アプリから再試行すると、新しい生成が作成され、別途請求されます。
このようなアプリでアップロードした画像を編集するモードは/v1/images/editsと呼ばれ、こちらでも提供されています(以下をご覧ください)。
Editing: /v1/images/edits
POST /v1/images/editsはOpenAI SDKのリクエスト(multipart/form-data:image内のファイル、またはimage[]内の複数のファイルで、prompt、model、size、quality、response_formatを含むもの)またはimages: [{"image_url": "…"}]を含むJSONを受け取ります。上記の生成と同様に機能し、ソース画像がある場合のPOST /api/media/generateと同じレスポンス、同じ待機時間、同じx-pv-media-job-id、同じ料金になります。編集に失敗した場合は課金されません。モデルの編集モードはカタログから選択されます。maskは400 unsupported_parameterで拒否され、ソース画像を受け取らないモデルの場合はmodel_cannot_editで拒否されます。マスク編集を行うにはPOST /api/media/generateを使用してGET /api/media/jobs/{id}をポーリングしてください — 非同期生成ガイドをご覧ください。動画は同期的には生成されません。/v1/video/generationsと/v1/videosも410を返します(詳細)。
Nano Banana ProのID
カタログおよび新しいコードでは nano-banana-pro を使用してください。既存の非同期クライアントを移行する場合、値 gemini-3-pro-image は /api/media/generate リクエストの model フィールドでのみ引き続き受け入れられ、同じ公開モデルに解決されます。これはディスカバリや料金には公開されません。