Skip to content

Antigravity API 仕様

⚠️ 重要なヒント:これは Antigravity の内部 API 仕様であり、公開ドキュメントではありません。このチュートリアルは直接 API テストに基づいており、API の詳細を深く理解する必要がある開発者に適しています。

プラグインを使用したいだけの場合は、クイックスタート設定ガイド を参照してください。


このチュートリアルで学べること

  • Antigravity 統一ゲートウェイ API の動作原理を理解する
  • リクエスト/レスポンス形式と JSON Schema の制限を習得する
  • Thinking モデルと関数呼び出しの設定方法を知る
  • レート制限とエラー処理のメカニズムを理解する
  • API 呼び出しの問題をデバッグできるようになる

Antigravity API 概要

Antigravity は Google の統一ゲートウェイ API であり、Gemini スタイルのインターフェースを通じて Claude、Gemini などの複数の AI モデルにアクセスし、単一の形式と統一されたレスポンス構造を提供します。

Vertex AI との違い

Antigravity Vertex AI の直接モデル API ではありません。これは内部ゲートウェイであり、以下を提供します:

  • 単一の API 形式(すべてのモデルは Gemini スタイル)
  • プロジェクトレベルのアクセス(Google Cloud 認証を通じて)
  • モデルバックエンドへの内部ルーティング(Claude 用 Vertex AI、Gemini 用 Gemini API)
  • 統一されたレスポンス形式(candidates[] 構造)

コア機能

機能説明
単一 API 形式すべてのモデルは Gemini スタイルの contents 配列を使用
プロジェクトレベルアクセス有効な Google Cloud Project ID が必要
内部ルーティング正しいバックエンド(Vertex AI または Gemini API)に自動ルーティング
統一されたレスポンスすべてのモデルは candidates[] 構造を返す
Thinking サポートClaude と Gemini 3 は拡張推論をサポート

エンドポイントとパス

API 環境

環境URLステータス用途
Daily (Sandbox)https://daily-cloudcode-pa.sandbox.googleapis.com✅ アクティブ主要エンドポイント(CLIProxy と一致)
Productionhttps://cloudcode-pa.googleapis.com✅ アクティブGemini CLI モデル、loadCodeAssist
Autopush (Sandbox)https://autopush-cloudcode-pa.sandbox.googleapis.com❌ 使用不可非推奨

ソースコードの場所src/constants.ts:32-43

API パス

アクションパス説明
コンテンツ生成/v1internal:generateContent非ストリーミングリクエスト
ストリーミング生成/v1internal:streamGenerateContent?alt=sseストリーミングリクエスト(SSE)
コードアシスタントのロード/v1internal:loadCodeAssistプロジェクト発見(Project ID を自動取得)
ユーザーオンボーディング/v1internal:onboardUserユーザーガイダンス(通常は使用しない)

認証方式

OAuth 2.0 フロー

認可 URL: https://accounts.google.com/o/oauth2/auth
トークン URL: https://oauth2.googleapis.com/token

必要な Scopes

http
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/cclog
https://www.googleapis.com/auth/experimentsandconfigs

ソースコードの場所src/constants.ts:14-20

必要な Headers

Antigravity エンドポイント(デフォルト)

http
Authorization: Bearer {access_token}
Content-Type: application/json
User-Agent: antigravity/1.11.5 windows/amd64
X-Goog-Api-Client: google-cloud-sdk vscode_cloudshelleditor/0.1
Client-Metadata: {"ideType":"IDE_UNSPECIFIED","platform":"PLATFORM_UNSPECIFIED","pluginType":"GEMINI"}

Gemini CLI エンドポイント(:antigravity サフィックスのないモデル)

http
Authorization: Bearer {access_token}
Content-Type: application/json
User-Agent: google-api-nodejs-client/9.15.1
X-Goog-Api-Client: gl-node/22.17.0
Client-Metadata: ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI

ストリーミングリクエストの追加 Header

http
Accept: text/event-stream

ソースコードの場所src/constants.ts:73-83


リクエスト形式

基本構造

json
{
  "project": "{project_id}",
  "model": "{model_id}",
  "request": {
    "contents": [...],
    "generationConfig": {...},
    "systemInstruction": {...},
    "tools": [...]
  },
  "userAgent": "antigravity",
  "requestId": "{unique_id}"
}

Contents 配列(必須)

重要な制限

Gemini スタイル形式を使用する必要があります。Anthropic スタイルの messages 配列はサポートされていません

正しい形式

json
{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Your message here" }
      ]
    },
    {
      "role": "model",
      "parts": [
        { "text": "Assistant response" }
      ]
    }
  ]
}

Role の値

  • user - ユーザー/人間のメッセージ
  • model - モデルのレスポンス(assistant ではない

Generation Config

json
{
  "generationConfig": {
    "maxOutputTokens": 1000,
    "temperature": 0.7,
    "topP": 0.95,
    "topK": 40,
    "stopSequences": ["STOP"],
    "thinkingConfig": {
      "thinkingBudget": 8000,
      "includeThoughts": true
    }
  }
}
フィールド説明
maxOutputTokensnumberレスポンスの最大トークン数
temperaturenumberランダム性(0.0 - 2.0)
topPnumbernucleus sampling しきい値
topKnumbertop-K sampling
stopSequencesstring[]生成を停止するトリガーワード
thinkingConfigobject拡張推論の設定(Thinking モデル)

System Instructions

形式の制限

System Instruction は**parts を含むオブジェクトである必要があり、純粋な文字列であってはなりません**。

json
// ✅ 正しい
{
  "systemInstruction": {
    "parts": [
      { "text": "You are a helpful assistant." }
    ]
  }
}

// ❌ 誤り - 400 エラーが返されます
{
  "systemInstruction": "You are a helpful assistant."
}

Tools / Function Calling

json
{
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": "get_weather",
          "description": "Get weather for a location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "City name"
              }
            },
            "required": ["location"]
          }
        }
      ]
    }
  ]
}

Function 命名規則

規則説明
最初の文字アルファベット(a-z, A-Z)またはアンダースコア(_)である必要があります
使用可能な文字a-zA-Z0-9、アンダースコア(_)、ドット(.)、コロン(:)、ハイフン(-)
最大長64 文字
使用不可スラッシュ(/)、スペース、その他の特殊文字

  • get_weather - 有効
  • mcp:mongodb.query - 有効(コロンとドットを使用可能)
  • read-file - 有効(ハイフンを使用可能)
  • mcp/query - 無効(スラッシュは使用不可)
  • 123_tool - 無効(アルファベットまたはアンダースコアで始める必要があります)

JSON Schema サポート

サポートされている機能

機能ステータス説明
type✅ サポートobjectstringnumberintegerbooleanarray
properties✅ サポートオブジェクトプロパティ
required✅ サポート必須フィールド配列
description✅ サポートフィールドの説明
enum✅ サポート列挙値
items✅ サポート配列要素の schema
anyOf✅ サポート内部的に any_of に変換
allOf✅ サポート内部的に all_of に変換
oneOf✅ サポート内部的に one_of に変換
additionalProperties✅ サポート追加プロパティの schema

サポートされていない機能(400 エラーの原因)

以下のフィールドは 400 エラーを引き起こします

  • const - 代わりに enum: [value] を使用
  • $ref - インライン schema 定義
  • $defs / definitions - インライン定義
  • $schema - これらのメタデータフィールドを削除
  • $id - これらのメタデータフィールドを削除
  • default - これらのドキュメントフィールドを削除
  • examples - これらのドキュメントフィールドを削除
  • title(ネスト) - ⚠️ ネストされたオブジェクトで問題を引き起こす可能性があります
json
// ❌ 誤り - 400 エラーが返されます
{ "type": { "const": "email" } }

// ✅ 正しい - 代わりに enum を使用
{ "type": { "enum": ["email"] } }

プラグインによる自動処理:プラグインは request-helpers.tscleanJSONSchemaForAntigravity() 関数を通じて、これらの変換を自動的に処理します。


レスポンス形式

非ストリーミングレスポンス

json
{
  "response": {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            { "text": "Response text here" }
          ]
        },
        "finishReason": "STOP"
      }
    ],
    "usageMetadata": {
      "promptTokenCount": 16,
      "candidatesTokenCount": 4,
      "totalTokenCount": 20
    },
    "modelVersion": "claude-sonnet-4-5",
    "responseId": "msg_vrtx_..."
  },
  "traceId": "abc123..."
}

ストリーミングレスポンス(SSE)

Content-Type: text/event-stream

data: {"response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "Hello"}]}}], "usageMetadata": {...}, "modelVersion": "...", "responseId": "..."}, "traceId": "..."}

data: {"response": {"candidates": [{"content": {"role": "model", "parts": [{"text": " world"}]}, "finishReason": "STOP"}], "usageMetadata": {...}}, "traceId": "..."}

レスポンスフィールドの説明

フィールド説明
response.candidatesレスポンス候補配列
response.candidates[].content.role常に "model"
response.candidates[].content.partsコンテンツ部分の配列
response.candidates[].finishReasonSTOPMAX_TOKENSOTHER
response.usageMetadata.promptTokenCount入力トークン数
response.usageMetadata.candidatesTokenCount出力トークン数
response.usageMetadata.totalTokenCount総トークン数
response.usageMetadata.thoughtsTokenCountThinking トークン数(Gemini)
response.modelVersion実際に使用されたモデル
response.responseIdリクエスト ID(形式はモデルによって異なります)
traceIdデバッグ用トレース ID

Response ID 形式

モデルタイプ形式
Claudemsg_vrtx_...msg_vrtx_01UDKZG8PWPj9mjajje8d7u7
GeminiBase64 スタイルypM9abPqFKWl0-kPvamgqQw
GPT-OSSBase64 スタイルy5M9aZaSKq6z2roPoJ7pEA

Function Call レスポンス

モデルが関数を呼び出したい場合:

json
{
  "response": {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "functionCall": {
                "name": "get_weather",
                "args": {
                  "location": "Paris"
                },
                "id": "toolu_vrtx_01PDbPTJgBJ3AJ8BCnSXvUqk"
              }
            }
          ]
        },
        "finishReason": "OTHER"
      }
    ]
  }
}

Function 結果の提供

json
{
  "contents": [
    { "role": "user", "parts": [{ "text": "What's the weather?" }] },
    { "role": "model", "parts": [{ "functionCall": { "name": "get_weather", "args": {...}, "id": "..." } }] },
    { "role": "user", "parts": [{ "functionResponse": { "name": "get_weather", "id": "...", "response": { "temperature": "22C" } } }] }
  ]
}

Thinking / 拡張推論

Thinking の設定

Thinking をサポートするモデル(*-thinking)の場合:

json
{
  "generationConfig": {
    "maxOutputTokens": 10000,
    "thinkingConfig": {
      "thinkingBudget": 8000,
      "includeThoughts": true
    }
  }
}

重要な制限

maxOutputTokensthinkingBudget より大きくある必要があります

Thinking レスポンス(Gemini)

Gemini モデルは署名付き thinking を返します:

json
{
  "parts": [
    {
      "thoughtSignature": "ErADCq0DAXLI2nx...",
      "text": "Let me think about this..."
    },
    {
      "text": "The answer is..."
    }
  ]
}

Thinking レスポンス(Claude)

Claude thinking モデルには thought: true の部分が含まれる場合があります:

json
{
  "parts": [
    {
      "thought": true,
      "text": "Reasoning process...",
      "thoughtSignature": "..."
    },
    {
      "text": "Final answer..."
    }
  ]
}

プラグインによる処理:プラグインは thinking 署名を自動的にキャッシュし、マルチターン会話での署名エラーを回避します。詳細は advanced/session-recovery/ を参照してください。


エラーレスポンス

エラー構造

json
{
  "error": {
    "code": 400,
    "message": "Error description",
    "status": "INVALID_ARGUMENT",
    "details": [...]
  }
}

一般的なエラーコード

CodeStatus説明
400INVALID_ARGUMENT無効なリクエスト形式
401UNAUTHENTICATED無効または期限切れのトークン
403PERMISSION_DENIEDリソースへのアクセス権限なし
404NOT_FOUNDモデルが見つかりません
429RESOURCE_EXHAUSTEDレート制限超過

レート制限レスポンス

json
{
  "error": {
    "code": 429,
    "message": "You have exhausted your capacity on this model. Your quota will reset after 3s.",
    "status": "RESOURCE_EXHAUSTED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.RetryInfo",
        "retryDelay": "3.957525076s"
      }
    ]
  }
}

プラグインによる処理:プラグインは 429 エラーを自動的に検出し、アカウントを切り替えるかリセット時間まで待機します。詳細は advanced/rate-limit-handling/ を参照してください。


サポートされていない機能

以下の Anthropic/Vertex AI 機能はサポートされていません

機能エラー
anthropic_versionUnknown field
messages 配列Unknown field(contents を使用する必要があります)
max_tokensUnknown field(maxOutputTokens を使用する必要があります)
純粋な文字列 systemInstructionInvalid value(オブジェクト形式を使用する必要があります)
system_instruction(ルートレベルの snake_case)Unknown field
JSON Schema constUnknown field(代わりに enum: [value] を使用)
JSON Schema $refサポートされていません(インライン定義)
JSON Schema $defsサポートされていません(インライン定義)
Tool 名に / が含まれるInvalid(代わりに _ または : を使用)
Tool 名が数字で始まるInvalid(アルファベットまたはアンダースコアで始める必要があります)

完全なリクエストの例

json
{
  "project": "my-project-id",
  "model": "claude-sonnet-4-5",
  "request": {
    "contents": [
      {
        "role": "user",
        "parts": [
          { "text": "Hello, how are you?" }
        ]
      }
    ],
    "systemInstruction": {
      "parts": [
        { "text": "You are a helpful assistant." }
      ]
    },
    "generationConfig": {
      "maxOutputTokens": 1000,
      "temperature": 0.7
    }
  },
  "userAgent": "antigravity",
  "requestId": "agent-abc123"
}

レスポンス Headers

Header説明
x-cloudaicompanion-trace-idデバッグ用トレース ID
server-timingリクエスト所要時間

Antigravity vs Vertex AI Anthropic の比較

機能AntigravityVertex AI Anthropic
エンドポイントcloudcode-pa.googleapis.comaiplatform.googleapis.com
リクエスト形式Gemini スタイル contentsAnthropic messages
anthropic_version使用しない必須
モデル名シンプル(claude-sonnet-4-5バージョン付き(claude-4-5@date
レスポンス形式candidates[]Anthropic content[]
マルチモデルサポートあり(Claude、Gemini など)Anthropic のみ

このレッスンのまとめ

このチュートリアルでは、Antigravity 統一ゲートウェイ API の内部仕様について詳しく説明しました:

  • エンドポイント:3 つの環境(Daily、Production、Autopush)、Daily Sandbox が主要エンドポイント
  • 認証:OAuth 2.0 + Bearer Token、必要な scopes と headers
  • リクエスト形式:Gemini スタイルの contents 配列、System Instruction と Tools をサポート
  • JSON Schema:一般的な機能をサポート、const$ref$defs はサポートされていません
  • レスポンス形式candidates[] 構造、ストリーミング SSE をサポート
  • Thinking:Claude と Gemini 3 は拡張推論をサポート、thinkingConfig が必要
  • エラー処理:標準エラー形式、429 はリトライ遅延を含む

API 呼び出しの問題をデバッグする場合、プラグインのデバッグモードを使用できます:

bash
OPENCODE_ANTIGRAVITY_DEBUG=1 opencode

次のレッスンのプレビュー

これは最後のレッスン付録です。技術的な詳細についてさらに知りたい場合は、以下を参照できます:

スタートアップフェーズに戻る必要がある場合は、Antigravity Auth とは からやり直すことができます。


付録:ソースコード参照

クリックしてソースコードの場所を表示

更新日時:2026-01-23

機能ファイルパス行番号
API エンドポイント定数src/constants.ts:32-4332-43
Antigravity Headerssrc/constants.ts:73-7773-77
Gemini CLI Headerssrc/constants.ts:79-8379-83
OAuth Scopessrc/constants.ts:14-2014-20
リクエスト変換の主要ロジックsrc/plugin/request.ts:11-2000+
JSON Schema クリーンアップsrc/plugin/request-helpers.ts全体
思考署名キャッシュsrc/plugin/cache.ts全体

重要な定数

  • ANTIGRAVITY_ENDPOINT_DAILY = "https://daily-cloudcode-pa.sandbox.googleapis.com" - Daily Sandbox エンドポイント
  • ANTIGRAVITY_ENDPOINT_PROD = "https://cloudcode-pa.googleapis.com" - Production エンドポイント
  • ANTIGRAVITY_DEFAULT_PROJECT_ID = "rising-fact-p41fc" - デフォルトプロジェクト ID
  • SKIP_THOUGHT_SIGNATURE = "skip_thought_signature_validator" - 思考署名検証をスキップするセンチネル値

重要な関数

  • cleanJSONSchemaForAntigravity(schema) - JSON Schema をクリーンアップして Antigravity API の要件に適合させる
  • prepareAntigravityRequest(request) - Antigravity API リクエストを準備して送信する
  • createStreamingTransformer() - ストリーミングレスポンストランスフォーマーを作成する