ドキュメントAPI リファレンスGemini API

Gemini API

Google Gemini 互換エンドポイント:generateContent、streamGenerateContent、countTokens。

POST/v1beta/models/{model}:generateContent

Google Gemini API のリクエストボディと互換の対話エンドポイントです。モデル名とアクションはパスに含めます({model}:generateContent)。認証は x-goog-api-key ヘッダーを使います。

Google 公式の ?key= クエリパラメータはサポートしていません。キーは必ず x-goog-api-key ヘッダーで指定してください(Google GenAI SDK は既定でこのヘッダーを使います)。

リクエストボディ

フィールド型必須説明
contentsarrayはい対話コンテンツ。各要素は role(user/model)と parts(テキストまたはインラインメディア)を持ちます。
systemInstructionobjectいいえシステムプロンプト({ "parts": [{ "text": … }] })。
generationConfigobjectいいえ生成パラメータ:temperature、maxOutputTokens など。
request.sh
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"}]}]
  }'

レスポンス

response.json
{
  "candidates": [
    {
      "content": {
        "parts": [{ "text": "Waves fold into foam..." }],
        "role": "model"
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 14,
    "candidatesTokenCount": 23,
    "totalTokenCount": 37
  }
}

ストリーミング生成

POST/v1beta/models/{model}:streamGenerateContent

?alt=sse を付けると SSE で増分返却され、各 data: 行がレスポンス断片になります。alt=sse なしの場合は完全な JSON 配列が返ります。詳細はストリーミングを参照。

トークンカウント

POST/v1beta/models/{model}:countTokens
count_tokens.sh
curl "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.responseModalitiesarray["TEXT", "IMAGE"]。画像だけが必要なら ["IMAGE"]。
generationConfig.imageConfig.aspectRatiostring1:1、3:2、2:3、3:4、4:3、4:5、5:4、9:16、16:9、21:9。
generationConfig.imageConfig.imageSizestring1K(既定)、2K、4K。gemini-3.1-flash-image は 0.5K も可、gemini-3.1-flash-lite-image は 1K のみ、gemini-2.5-flash-image はこのフィールド非対応。
generate_image.sh
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"}
    }
  }'
response.json
{
  "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 枚)、テキスト指示と一緒に送るだけです。リクエストの他の部分は変わりません。

edit_request.json
{
  "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)で、画像は最後のチャンクにまとめて届きます。