OpenCode AI APIキー設定 — OpenAI互換の構成方法
APIMaster.aiのカスタムAPIキーでOpenCode AIを設定する手順。opencode.jsoncにAPIMasterをOpenAI互換プロバイダーとして追加し、Claude、GPT-5.5、DeepSeekを画像入力(Vision)やオプションのReasoning階層で利用可能に。
OpenCode Desktop は OpenCode のグラフィカルクライアントです(現在ベータ版)。ローカルエージェントセッション、ファイル編集、シェル実行を提供します。APIMaster.ai は OpenAI 互換 です — 設定 → プロバイダ → カスタムプロバイダ で追加できます。
まず API キーを取得 してください。以下ではプレースホルダ
your_apimaster_keyを使用します。スクリーンショットでは実際のキーはマスクされています。
前提条件
- opencode.ai/download から OpenCode Desktop をインストールします。
- Windows:
opencode-desktop-win-x64.exe - macOS:
brew install --cask opencode-desktopまたは.dmg - Linux:
.deb/.rpm/ AppImage
- Windows:
- コンソール から APIMaster API キーを取得します。
ステップ 1 — プロバイダを開く
- OpenCode Desktop を起動し、ワークスペースを開きます。
- 歯車アイコン(左下)をクリックします。
- サイドバーで プロバイダ を選択します。
- カスタムプロバイダ(ベース URL で OpenAI 互換プロバイダを追加)までスクロールします。
- + 接続 をクリックします。

ステップ 2 — カスタムプロバイダフォーム
| フィールド | 値 |
|---|---|
| プロバイダ ID | apimaster |
| 表示名 | APIMaster.ai |
| ベース URL | https://apimaster.ai/v1 |
| API キー | あなたの APIMaster キー |

ヘッダーのみで認証する場合を除き、ヘッダー は空のままにします。
ステップ 3 — モデルを追加して送信
次の画面でモデルをマッピングします(左 = OpenCode でのラベル、右 = APIMaster に送信される モデル ID — 通常は同じです)。
| 左 | 右 |
|---|---|
gpt-5.4 |
gpt-5.4 |
claude-sonnet-4-6 |
claude-sonnet-4-6 |
- 行を追加するには + モデルを追加 をクリックします。
- 送信 をクリックします。

ID はマーケットプレイスから選択してください。エージェントチャットでは画像生成専用モデル(例: gpt-image-2)は避けてください。
画像認識(Vision)が必要ですか?
gpt-5.5、claude-sonnet-4-6、claude-opus-4-7、claude-opus-4-8、claude-haiku-4-5は画像入力をサポートしていますが、OpenCode では追加の capability 宣言が必要です — GPT と Claude で画像入力を有効にするを参照してください。
ステップ 4 — モデルを選択
- セッションを開始または開きます。
- 入力欄の下にある モデルドロップダウン を開きます。
- APIMaster.ai の下からモデルを選択します(例:
claude-sonnet-4-6)。

ステップ 5 — テスト
hello または小さなコーディングタスクを送信します。通常のアシスタント応答(ファイル編集/シェル)が返ってくれば、APIMaster は接続されています。

詳細設定: opencode.jsonc と Reasoning
上記の UI フローで簡単に開始できます。同じモデル ID に対して Reasoning / thinking effort の階層(low、high、max など)を設定するには、opencode.jsonc を編集します。
設定ファイルの場所
| OS | パス |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<ユーザー名>\.config\opencode\opencode.jsonc |
ファイルがない場合は作成してください。保存後、OpenCode Desktop を再起動するか、新しいセッション を開始します。
API キー(jsonc には記述しないでください)
API キーを opencode.jsonc に保存 しないでください。
以下のいずれかを使用してください。
- ターミナルで
/connectを実行、または - 設定 → プロバイダ → プロバイダに接続(ステップ 1〜2 と同じ)
シークレットは OpenCode の認証ストアに保管し、jsonc にはプロバイダ、モデル、Reasoning バリアントのみを定義します。
jsonc での APIMaster プロバイダ
プロバイダ ID: apimaster。npm パッケージ: @ai-sdk/openai-compatible。
baseURL は次のように指定する必要があります:
https://apimaster.ai/v1
https://apimaster.ai/ ではありません — OpenCode は /chat/completions を追加します。/v1 がないと https://apimaster.ai/chat/completions になり、404 Not Found になります。
https://api.apimaster.ai/v1も使用しないでください —api.プレフィックス付きホストはテストで TLS / 接続の失敗 を引き起こす場合があります。正しいホストはhttps://apimaster.ai/v1です。
Reasoning バリアントを含む完全な例 — ダウンロードして OpenCode の設定を上書きします。
- opencode.jsonc をダウンロード
- 以下に上書き(または保存):
- macOS / Linux:
~/.config/opencode/opencode.jsonc - Windows:
C:\Users\<ユーザー名>\.config\opencode\opencode.jsonc
- macOS / Linux:
/connectまたは UI で API キーを設定(jsonc には絶対に記述しない)。- OpenCode Desktop を再起動 するか、新しいセッションを開始します。
上書きする前に既存ファイルをバックアップするか、
provider.apimasterブロックのみをマージしてください。
最小構成:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"apimaster": {
"name": "APIMaster.ai",
"npm": "@ai-sdk/openai-compatible",
"options": { "baseURL": "https://apimaster.ai/v1" },
"models": {
"gpt-5.5": {
"name": "gpt-5.5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"high": { "reasoningEffort": "high" }
}
}
}
}
}
}
上記の
gpt-5.5のattachmentおよびmodalitiesフィールドは 画像入力(Vision)を有効にします — GPT と Claude で画像入力を有効にするを参照してください。テキストチャットのみを利用する場合は省略してください。
Reasoning の基本原則
variants= 1 つのモデル ID に対して複数の Reasoning 階層を UI で提供します。- OpenAI 互換 API では、OpenCode が
reasoningEffortをリクエストボディのreasoning_effortにマッピングします。 - バリアント名は実際のパラメータと一致させる必要があります(
high→"reasoningEffort": "high")。 - モデルごとにサポートされる階層は異なります — 公式ドキュメントに従って設定してください。隠れた再マッピングはありません。
モデル別 Reasoning 階層
| モデル | Reasoning バリアント | 備考 |
|---|---|---|
gpt-5.4 |
low, medium, high, xhigh |
GPT reasoning |
gpt-5.5 |
low, medium, high, xhigh |
GPT reasoning |
deepseek-v4-flash |
high, max |
DeepSeek thinking(推奨) |
deepseek-v4-pro |
high, max |
DeepSeek thinking(推奨) |
claude-sonnet-4-6 |
low, medium, high, max |
Claude Sonnet effort |
claude-opus-4-7 |
low, medium, high, xhigh, max |
Claude Opus effort |
claude-opus-4-8 |
low, medium, high, xhigh, max |
Claude Opus effort |
claude-haiku-4-5 |
なし | 未確認の effort 階層なし |
minimax-m3 |
なし | 未確認の effort 階層なし |
完全なファイルは opencode.jsonc を参照してください。
OpenCode での Reasoning 切り替え
opencode.jsoncを保存し、再起動 または 新しいセッション を開始します。- モデル / Reasoning ドロップダウン を使用します(例:
gpt-5.4 / high)。 - ビルドでサポートされている場合:
Ctrl + Shift + Dで Reasoning 階層を切り替えます。
GPT と Claude で画像入力を有効にする
APIMaster.ai の gpt-5.5、claude-sonnet-4-6、claude-opus-4-7、claude-opus-4-8、claude-haiku-4-5 などのモデルは 画像入力 / Vision をサポートしています — スクリーンショット、写真、チャートの読み取り、認識、説明、OCR、画像からのコーディングが可能です。
モデルが画像をサポートすること ≠ OpenCode が画像を送信すること。 APIMaster.ai のモデル自体が Vision をサポートしていても、
opencode.jsoncで capability を宣言する 必要があります。宣言しないと、OpenCode は画像をマルチモーダル入力として送信せず、添付ファイル / ファイル名 をプロンプトに入れるだけになり、モデルは「現在のモデルは画像入力をサポートしていません」のような応答を返します。
宣言すべき 2 つのフィールド
画像で使用したい各モデルに、次を追加します。
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
attachment: trueは、このモデルが 添付ファイルを受け入れる ことを OpenCode に伝えます。modalities.inputに"image"を含めること は、このモデルが 画像入力をサポートする ことを OpenCode に伝え、OpenCode が画像をマルチモーダルなimage_urlコンテンツに変換します。
完全な例(GPT と Claude)
opencode.jsonc(フィールドを既に含む)をダウンロードするか、以下の provider.apimaster ブロックを既存の設定にマージしてください。
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": [],
"provider": {
"apimaster": {
"name": "APIMaster.ai",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://apimaster.ai/v1"
},
"models": {
"gpt-5.5": {
"name": "gpt-5.5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" }
}
},
"claude-sonnet-4-6": {
"name": "claude-sonnet-4-6",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"max": { "reasoningEffort": "max" }
}
},
"claude-opus-4-7": {
"name": "claude-opus-4-7",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" },
"max": { "reasoningEffort": "max" }
}
},
"claude-opus-4-8": {
"name": "claude-opus-4-8",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"variants": {
"low": { "reasoningEffort": "low" },
"medium": { "reasoningEffort": "medium" },
"high": { "reasoningEffort": "high" },
"xhigh": { "reasoningEffort": "xhigh" },
"max": { "reasoningEffort": "max" }
}
},
"claude-haiku-4-5": {
"name": "claude-haiku-4-5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
}
}
}
}
}
備考:
gpt-5.5のみで画像入力を有効にするには、gpt-5.5にだけattachmentとmodalitiesを追加し、他は変更しないでください。- Claude のみを有効にするには、これらのフィールドを Claude モデルにだけ追加してください。
- 各モデルの既存の Reasoning バリアント(
low/medium/high/xhigh/max)はそのまま残してください — 画像フィールドと Reasoning は競合しません。 opencode.jsoncを編集した後は OpenCode を完全に終了して再起動するか、少なくとも 新しいセッション を開始して設定を再読み込みしてください。- このファイルに API キーを記述しないでください —
/connectまたは UI で設定してください(下記のセキュリティを参照)。
画像ソース: ローカルアップロード / base64 を優先
- 推奨: OpenCode でローカルの PNG / JPG をアップロードします。理想的には、OpenCode が APIMaster に送信する前に base64 データ URL(
data:image/png;base64,...)に変換します — これが検証済みの動作するパスです。 - 公開画像 URL を直接渡すと失敗する場合があります。 APIMaster / 上流は、ネットワーク、フォーマット、サイズ、MIME、ホットリンク保護などの理由で公開画像のダウンロードに失敗し、次を返すことがあります。
その場合は、モデル側での公開 URL のダウンロードに頼らず、base64 データ URL またはローカルアップロードを使用してください。Error while downloading file. Upstream status code: 400.
画像認識が機能することをテストする
オプション A — OpenCode でテスト
- モデルドロップダウンで
apimaster/gpt-5.5またはapimaster/claude-sonnet-4-6に切り替えます。 - PNG / JPG 画像をアップロードします。
- 次を入力します。
Describe the main content of this image.
- 設定が正しければ、モデルは 画像の内容を説明する はずです。
- モデルが ファイル / 添付ファイル名 のみに言及したり、「画像入力はサポートされていません」と応答したりする場合、OpenCode が 画像コンテンツを送信していない 可能性があります — モデルの
attachmentとmodalitiesフィールドを確認し、OpenCode を再起動してください。
オプション B — API を直接テスト
APIMaster モデルの問題 と OpenCode アダプタの問題 を切り分けるのに便利です。実際のキーをハードコーディングしないでください — 環境変数を使用してください。
Linux / macOS:
export APIMASTER_API_KEY="your APIMaster API key"
curl https://apimaster.ai/v1/chat/completions \
-H "Authorization: Bearer $APIMASTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Describe this image." },
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,YOUR_IMAGE_BASE64"
}
}
]
}
],
"max_tokens": 1000
}'
model を claude-sonnet-4-6 に変更すると、同じ方法で Claude をテストできます(画像認識で HTTP 200 を確認済み)。
Windows PowerShell:
$env:APIMASTER_API_KEY = "your APIMaster API key"
# Convert a local image to base64, put it into image_url.url as data:image/png;base64,...
# Then call https://apimaster.ai/v1/chat/completions with the same JSON body.
画像を説明する 200 応答は APIMaster 側で画像入力が機能している ことを意味します。それでも OpenCode で失敗する場合、問題は OpenCode の
attachment/modalities設定、または再起動の欠如にあります。
トラブルシューティング
UI 設定
| 問題 | 解決策 |
|---|---|
| 401 | キーを確認。露出した場合はローテーション。 |
| モデルが見つからない | ベース URL が https://apimaster.ai/v1 であること、モデル ID がマーケットプレイスと一致していることを確認。 |
| APIMaster モデルが表示されない | 設定でプロバイダを編集 → マッピングを追加 → 送信。 |
| 遅い / タイムアウト | 別のモデルを試す。API Key Tester を使用。 |
Reasoning / jsonc
なぜ DeepSeek では high と max だけなのか?
DeepSeek の公式 OpenAI 互換 thinking effort は high と max です。low / medium / xhigh は予測不能に再マッピングされるため避けてください。
なぜ Claude Sonnet では xhigh ではなく max なのか?
Sonnet の最上位階層は max です。xhigh は Opus(claude-opus-4-7 / claude-opus-4-8)用です。
なぜ Haiku や MiniMax M3 にはバリアントがないのか?reasoningEffort の値が文書化されていないため、バリアントはスキップします。モデルは動作しますが、UI に Reasoning サブ階層は表示されません。
それでも 400 エラーが出る場合
baseURL=https://apimaster.ai/v1(サイトルートではありません)。- モデル ID のスペルがマーケットプレイスと一致していること。
/connectまたは UI でキーが設定されていること。variantsを一時的に削除 — プレーンなリクエストが成功する場合、選択したreasoning_effortがそのモデルでサポートされていない可能性があります。
画像入力 / Vision
なぜ OpenCode は「現在のモデルは画像入力をサポートしていません」と表示するのか?
- APIMaster.ai の
gpt-5.5といくつかの Claude モデルは 画像入力をサポートしています。このメッセージは通常、OpenCode が画像をマルチモーダル入力として送信していない ことを意味します。 opencode.jsoncのモデルに次があることを確認してください。"attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] }- 編集後に OpenCode を再起動 したことを確認してください。
baseURLがhttps://apimaster.ai/v1であることを確認してください。- APIMaster API キーが有効であることを確認してください。
- 公開画像 URL が失敗する場合は、base64 データ URL またはローカルアップロードを使用してください。
なぜモデルは画像ではなく添付ファイル名だけを見るのか?
- 通常、OpenCode が添付ファイルを読み取って画像入力に変換せず、ファイル / 添付ファイル名 をプロンプトに入れただけです。
attachment: trueとmodalities.input: ["text", "image"]を有効にし、画像入力をサポートするモデルを使用してください。
なぜ公開画像 URL がエラーになるのか?
- APIMaster または上流は、公開画像のダウンロード時にネットワーク、フォーマット、ファイルサイズ、MIME、ホットリンク保護、プロキシによって制限される場合があります。
Error while downloading file. Upstream status code: 400.が出た場合は、base64 データ URL に切り替えてください。
attachment を追加してもまだ機能しない場合
- OpenCode を 完全に終了して再起動 します。
- 新しいセッション を開始してテストします。
- セッションのアクティブなモデルが、画像フィールドで設定したモデル であること を確認します。
- API キーが有効であることを確認します。
- OpenCode のログで 401 / 400 / unsupported image / invalid content type エラーを確認します。
- オプション B — API を直接テストで base64 画像を使用し、APIMaster モデルの問題 と OpenCode アダプタの問題 を切り分けます。
セキュリティ
- APIMaster API キーを
opencode.jsoncに記述 しないでください。このファイルにはプロバイダ、モデル、画像 capability、Reasoning のみを保持します。 - キーをチャット、スクリーンショット、Issue、公開ドキュメント、コードリポジトリに貼り付け ないでください。
- スクリーンショットやログに表示されたキーはローテーションしてください — コンソールで取り消して再生成し、OpenCode のプロバイダを更新してください。
- API キーの管理には OpenCode の
/connectフロー、環境変数、またはローカルの認証情報ストレージを優先してください。 - OpenCode はファイルの読み書きやシェルコマンドの実行が可能です — 信頼できるワークスペースのみを使用してください。
チェックリスト
- OpenCode Desktop をインストール
- カスタムプロバイダに接続 または
opencode.jsoncにapimasterを設定 - ベース URL /
baseURL=https://apimaster.ai/v1(https://apimaster.ai/ではない) -
/connectまたは UI で API キーを設定(jsonc には記述しない) - 少なくとも 1 つのチャットモデルをマッピング
- (オプション)Reasoning バリアントが公式階層と一致している
- テストメッセージが成功する
画像入力チェックリスト
-
baseURLがhttps://apimaster.ai/v1である(https://api.apimaster.ai/v1ではない) - Vision 対応モデルを使用(例:
gpt-5.5または Vision 対応の Claude モデル) - モデルに
attachment: trueがある - モデルの
modalities.inputに"image"が含まれている -
opencode.jsoncを編集後、OpenCode を 再起動 した - API キーが有効である
- テスト画像が一般的なフォーマット(PNG / JPG)である
- 公開画像 URL が失敗する場合、base64 データ URL を試した
まとめ
- キー:
baseURL(https://apimaster.ai/v1)、モデル ID、API キー(/connectまたは UI)、オプションの Reasoning バリアント。 - バリアント 名 = 実際の
reasoning_effort値。 - 階層は モデルごとに 設定。サポートされていない場合はバリアントをスキップ(Haiku、MiniMax M3 など)。