Gemini 3.8 Flash(Google)の対話 API です。3.8 世代の Flash モデルで、長時間にわたるコーディング、エージェントのワークフロー、複雑な推論向けに設計されています。動的思考(簡単な質問にはすばやく、難しい質問にはじっくり考えて回答)を備え、コンテキストウィンドウは約 100 万トークン、出力は最大 64K トークンで、画像入力に対応しています。OpenAI SDK 互換です。
📥 コンテキスト長(最大入力):約 1,000,000 トークン(100 万トークン級の長いコンテキスト)。
Playground で試す →クイックスタート
2 ステップで動きます:まずリクエストを送信し、次にストリーミングで回答を受け取ります。YOUR_API_KEY をご自身のキーに置き換えれば、下のコマンドはそのまま実行できます。エンドポイントは OpenAI の Chat Completions と同じなので、既存の OpenAI のコードは base_url と model を変えるだけで使えます。
ステップ 1 · リクエストを送信
curl https://nezhagate.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.8-flash", "messages": [{"role": "user", "content": "光合成を一文で説明してください"}]}'レスポンス(HTTP 200)
{
"id": "chatcmpl-7f3c9a1e2b4d6f8a",
"object": "chat.completion",
"created": 1791281400,
"model": "gemini-3.8-flash",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "光合成とは、植物が日光を使って二酸化炭素と水から糖をつくり、酸素を放出するしくみです。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 42,
"total_tokens": 60,
"prompt_tokens_details": {"cached_tokens": 0}
}
}message.content が回答です。usage はこのリクエストで課金されるトークン数です。そのうち prompt_tokens_details.cached_tokens はキャッシュにヒットした分で、キャッシュ料金で課金されます。
ステップ 2 · ストリーミングで受け取る(推奨)
curl -N https://nezhagate.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.8-flash", "stream": true, "messages": [{"role": "user", "content": "光合成を一文で説明してください"}]}'ストリームは標準的な SSE です。各チャンクの本文は choices[0].delta.content に入り、最後のチャンクに usage が付き、data: [DONE] で終わります。回答が長い場合や思考モデルでは、ストリーミングを使ってください。ストリーミングしないリクエストは約 10 分で切断されます。
Python(OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="https://nezhagate.com/v1", api_key="YOUR_API_KEY")
# 1. 一問一答
resp = client.chat.completions.create(
model="gemini-3.8-flash",
messages=[{"role": "user", "content": "光合成を一文で説明してください"}],
)
print(resp.choices[0].message.content)
# 2. ストリーミング
stream = client.chat.completions.create(
model="gemini-3.8-flash",
messages=[{"role": "user", "content": "光合成を一文で説明してください"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)認証
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
コンソールで API Key を作成すると利用を開始できます。
仕様早見表
| コンテキストウィンドウ | ~1,000,000 トークン |
| 1 回の最大出力 | 64K トークン |
| 入力 | テキスト、画像 |
| 思考 | 動的思考:どれだけ考えるかをモデルが決めます |
| ツール呼び出し | 保証なし:tools が無視され、モデルがそのまま回答することがあります |
| ウェブ検索 | 対応(web_search: true。検索自体は無料) |
| エンドポイント | /v1/chat/completions |
| ストリーミング | 対応(stream: true、SSE) |
| 課金方法 | トークン単位:入力、出力(思考を含む)、キャッシュヒットをそれぞれの料金で課金し、失敗は課金されません |
リクエストパラメータ
POST /v1/chat/completions のリクエスト本文(JSON)で、OpenAI の Chat Completions と同じです。よく使うパラメータと、このモデルでの実際の動作は次のとおりです:
| パラメータ | 種別 | 必須 | 説明 |
|---|---|---|---|
| model | string | はい | モデル ID:gemini-3.8-flash。 |
| messages | array | はい | 会話のメッセージの配列です。各メッセージは role(system / user / assistant / tool)と content を持ちます。content は文字列、または text と image_url のパーツからなる配列です(画像入力については下記を参照)。複数ターンの対話では、これまでの履歴をすべて順番どおりに送ってください。 |
| stream | boolean | いいえ | true にすると SSE でストリーミングし、最後のチャンクに usage が付きます。既定は false です。 |
| max_tokens | integer | いいえ | 出力の上限で、思考トークンも含みます。小さすぎると、モデルが回答を書く前に上限を使い切ることがあり、その場合ゲートウェイは 400 max_tokens_too_small を返し、課金はしません(512 以上を推奨)。一部のモデルでは、小さすぎる値は回答を最後まで書ける下限まで自動で引き上げられます。その場合も、課金は実際の使用量の分だけです。 |
| temperature / top_p | number | いいえ | サンプリングパラメータで、送ったとおりモデルに渡されます(temperature は 0〜2)。思考モデルでは反映されないことがあります。 |
| web_search | boolean | いいえ | true にすると、まずウェブ検索を行い、その結果を参考資料としてモデルに渡します。詳しくは下記をご覧ください。 |
そのほかの OpenAI のパラメータ(stop、seed、user など)は送ったとおりモデルに渡されます。反映されるかどうかはモデルによります。
料金
トークン単位で課金します。下の表は 100 万トークンあたりの最新の料金です。課金されるのは成功したリクエストの実際の使用量だけで、失敗、タイムアウト、拒否の場合は課金されません。1 クレジット = $0.005 です。
| 種類 | USD / 100 万トークン | クレジット / 100 万トークン |
|---|---|---|
| 入力 | $0.60 | 120 |
| 出力(思考を含む) | $3.60 | 720 |
| キャッシュヒット | $0.06 | 12 |
たとえば、入力 2,000 トークン、出力 1,000 トークン(思考を含む)のリクエストは約 $0.0048 です。
思考
動的思考です。質問ごとにどれだけ考えるかをモデルが自分で決め、簡単な質問にはすばやく答え、難しい質問ではより深く考えます。追加のパラメータは不要です。思考トークンも出力の上限に含まれるため、max_tokens を小さくしすぎないでください。
思考トークンは usage.completion_tokens に含まれ、出力料金で課金されます(一部のモデルは completion_tokens_details.reasoning_tokens で内訳も返します)。
プロンプトキャッシュ
パラメータは不要です。繰り返し送られる長い先頭部分(同じシステムプロンプトや、会話の前半のターンなど)は、モデル提供元によって自動でキャッシュされることがあり、キャッシュされた部分はより安いキャッシュ料金で課金されます。キャッシュされるかどうか、どれだけヒットするかはモデル提供元によります。変わらない部分をメッセージの先頭に置くと、ヒットしやすくなります。
キャッシュヒットしたトークン数は usage.prompt_tokens_details.cached_tokens で返ります。この部分はキャッシュヒット料金、残りの入力は入力料金で課金されます。
画像入力
content の配列に image_url のパーツを入れます。推奨は base64 の data URI(data:image/png;base64,...)で、確実に読み込めます。公開されている画像のリンクは先にダウンロードする必要があり、まれに取得できない、またはタイムアウトすることがあります。画像はモデル提供元の規則に従って入力トークンに換算されます。
curl https://nezhagate.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.8-flash", "messages": [{"role": "user", "content": [{"type": "text", "text": "この画像には何が写っていますか"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}}]}]}'ウェブ検索
リクエストに "web_search": true を加えます(または tools に {"type": "web_search"} を入れます)。ゲートウェイはまず会話の内容をもとにウェブをリアルタイムで検索し、最大 5 件の結果とそのリンクを参考資料としてモデルに渡します。モデルはそれを踏まえて回答し、出典を示します。検索自体は無料で、参考資料は入力トークンとして課金されます。
curl https://nezhagate.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.8-flash", "web_search": true, "messages": [{"role": "user", "content": "今日の主なテクノロジーニュースは何ですか"}]}'安定性と自動再試行
エラーと返金
エラーは error オブジェクト(message、type、code、param)で返ります。判定には HTTP ステータスコードと code を使い、message の文面では判定しないでください。失敗したリクエストは課金されません。完全な一覧は エラーコード をご覧ください。
| HTTP | code | 原因 | 対処 |
|---|---|---|---|
| 400 | invalid_messages / invalid_role / invalid_max_tokens | 対話リクエストの messages がない・空・形式が正しくない、role が許可された値ではない、または max_tokens が正の整数ではありません。param が該当するフィールドを示します。 | param が示すフィールドを直してください。 |
| 400 | model_not_found | モデル ID のつづりが違う・model がない・そのモデルをこのエンドポイントでは使えない(たとえば対話モデルで画像のエンドポイントを呼び出した)のいずれかです。 | GET /v1/models または API リファレンス にあるモデル ID を使ってください。 |
| 400 | max_tokens_too_small | 推論モデルが max_tokens をすべて思考に使い切り、回答を書けませんでした(ストリーミングしない対話)。 | max_tokens を増やしてから再試行してください。 |
| 400 | content_filter | モデルはリクエストを処理しましたが、何も返しませんでした。多くの場合、内容がモデル提供元の安全ポリシーに触れたためです。 | プロンプトを調整してから再試行してください。同じプロンプトのままでは、たいてい再び拒否されます。 |
| 4xx | invalid_request | モデル提供元がリクエストを拒否しました(コンテキストが長すぎる、対応していないパラメータがあるなど)。ステータスコードと message はモデル提供元が返したまま渡され、code はモデル提供元の値です。 | message の内容に沿ってリクエストを変更してください。 |
| 401 | invalid_api_key | キーが存在しない・削除された・無効化されているか、アカウントが停止されています。 | コンソールの「API Keys」ページでキーを確認してください。 |
| 402 | insufficient_quota | このリクエストの分を確保するだけの残高がありません。ゲートウェイはまずリクエストにかかりうる最大の費用を確保するため、同時に多くの呼び出しを送ったときにも起こることがあります。 | 一度に多くの呼び出しを送った直後なら、数秒待って再試行してください。そうでなければチャージしてください。 |
| 403 | permission_denied | そのモデルがキーのモデル許可リストに入っていません。 | 許可リストにあるモデルを使うか、コンソールで許可リストを変更してください。 |
| 429 | rate_limit_exceeded | このキーに設定した 1 分あたりのリクエスト数の上限を超えました(直近 60 秒で数えます)。Retry-After ヘッダーは付きません。 | 数秒待ってから再試行するか、コンソールでこのキーの上限を引き上げてください。 |
| 429 | rate_limit_exceeded | このモデルが混み合っていて、リクエストは送られませんでした。対話エンドポイントでのみ発生し、画像と動画のタスクは拒否されずに順番待ちになります。OpenAI 互換のエンドポイントでは Retry-After が付きます。 | Retry-After の秒数だけ待ってから再試行してください。 |
| 502 | upstream_timeout | 上流がタイムアウトしました(最初のトークンがなかなか返ってこない場合を含みます)。 | 再試行してください。長い回答には stream: true を使ってください。 |
| 502 | upstream_unavailable | 上流でエラーが起きたか、一時的に利用できません。 | しばらくしてから再試行してください。 |
| 502 | upstream_busy | モデル提供元がレート制限をかけています。モデル提供元の 429 をそのまま 429 として返すことはなく、代わりにこの 502 を返します。 | しばらくしてから再試行してください。 |
| 502 | empty_completion | モデル提供元が空の内容を返しました。リクエストの内容に対する判定ではありません。 | 再試行してください。 |
| 502 | upstream_prompt_filter | モデル提供元の事前チェックでプロンプトが止められました。モデルによる判定ではありません。 | しばらくしてから再試行するか、言い回しを少し変えてください。 |
| 503 | model_maintenance | モデルのメンテナンス中で、リクエストを受け付けていません。その間、別のモデルが代わりに回答することもありません。 | メンテナンスが終わってから再試行してください。状況は サービス状態 で確認できます。 |
ストリーミングで出力が始まった後にエラーが起きても、ステータスコードは変わりません。エラーは error を含むデータ行としてストリーム内に届くか、ストリームが(data: [DONE] なしで)そのまま終わります。いずれの場合も、途中で切れたものとして扱ってください。