Gemini API
Google Gemini 互換エンドポイント:generateContent、streamGenerateContent、countTokens。
/v1beta/models/{model}:generateContentGoogle Gemini API のリクエストボディと互換の対話エンドポイントです。モデル名とアクションはパスに含めます({model}:generateContent)。認証は x-goog-api-key ヘッダーを使います。
Google 公式の ?key= クエリパラメータはサポートしていません。キーは必ず x-goog-api-key ヘッダーで指定してください(Google GenAI SDK は既定でこのヘッダーを使います)。
リクエストボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
contents | array | はい | 対話コンテンツ。各要素は role(user/model)と parts(テキストまたはインラインメディア)を持ちます。 |
systemInstruction | object | いいえ | システムプロンプト({ "parts": [{ "text": … }] })。 |
generationConfig | object | いいえ | 生成パラメータ:temperature、maxOutputTokens など。 |
curl "https://soleapi.com/v1beta/models/gemini-3.7-flash:generateContent" \
-H "x-goog-api-key: $SOLEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "Write a haiku about the sea"}]}]
}'レスポンス
{
"candidates": [
{
"content": {
"parts": [{ "text": "Waves fold into foam..." }],
"role": "model"
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 14,
"candidatesTokenCount": 23,
"totalTokenCount": 37
}
}ストリーミング生成
/v1beta/models/{model}:streamGenerateContent?alt=sse を付けると SSE で増分返却され、各 data: 行がレスポンス断片になります。alt=sse なしの場合は完全な JSON 配列が返ります。詳細はストリーミングを参照。
トークンカウント
/v1beta/models/{model}:countTokenscurl "https://soleapi.com/v1beta/models/gemini-3.7-flash:countTokens" \
-H "x-goog-api-key: $SOLEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "Write a haiku about the sea"}]}]
}'
# => { "totalTokens": 14 }画像生成(Nano Banana)
Gemini の画像モデル(gemini-2.5-flash-image、gemini-3-pro-image、gemini-3.1-flash-image、gemini-3.1-flash-lite-image)には専用の画像エンドポイントはありません。上記の generateContent / streamGenerateContent をそのまま使います。リクエストボディはテキスト対話と同じで、generationConfig.responseModalities で画像が欲しいことを宣言するだけです。生成された画像は parts 内の inlineData(base64)として返ります。
| フィールド | 型 | 説明 |
|---|---|---|
generationConfig.responseModalities | array | ["TEXT", "IMAGE"]。画像だけが必要なら ["IMAGE"]。 |
generationConfig.imageConfig.aspectRatio | string | 1:1、3:2、2:3、3:4、4:3、4:5、5:4、9:16、16:9、21:9。 |
generationConfig.imageConfig.imageSize | string | 1K(既定)、2K、4K。gemini-3.1-flash-image は 0.5K も可、gemini-3.1-flash-lite-image は 1K のみ、gemini-2.5-flash-image はこのフィールド非対応。 |
curl "https://soleapi.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
-H "x-goog-api-key: $SOLEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "A watercolor lighthouse at dawn"}]}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'{
"candidates": [
{
"content": {
"parts": [
{ "text": "Here is the lighthouse." },
{ "inlineData": { "mimeType": "image/png", "data": "iVBORw0KGgo..." } }
],
"role": "model"
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 9,
"candidatesTokenCount": 1694,
"candidatesTokensDetails": [
{ "modality": "TEXT", "tokenCount": 14 },
{ "modality": "IMAGE", "tokenCount": 1680 }
],
"totalTokenCount": 1703
}
}画像の編集:参照画像を inlineData として contents[].parts に入れ(最大 14 枚)、テキスト指示と一緒に送るだけです。リクエストの他の部分は変わりません。
{
"contents": [{
"parts": [
{ "text": "Turn the sky into a starry night" },
{ "inlineData": { "mimeType": "image/jpeg", "data": "<base64>" } }
]
}],
"generationConfig": { "responseModalities": ["TEXT", "IMAGE"] }
}画像は出力トークン(usageMetadata.candidatesTokensDetails の modality = IMAGE の数)で課金されます。単価はモデルページを参照してください。1K 画像は約 1,120〜1,290 トークン、2K は約 1,680、4K は約 2,000〜2,520 です。ストリーミングはテキストと同じ(streamGenerateContent?alt=sse)で、画像は最後のチャンクにまとめて届きます。