Pengaturan Kunci API OpenCode AI — Konfigurasi Kompatibel OpenAI
Cara mengonfigurasi OpenCode AI dengan kunci API kustom dari APIMaster.ai. Tambahkan APIMaster sebagai penyedia kompatibel OpenAI di opencode.jsonc dan akses Claude, GPT-5.5, serta DeepSeek dengan input gambar (Vision) dan tingkatan Reasoning opsional.
OpenCode Desktop adalah klien grafis untuk OpenCode (saat ini beta): sesi agen lokal, pengeditan file, dan eksekusi shell. APIMaster.ai kompatibel dengan OpenAI — tambahkan di bawah Pengaturan → Penyedia → Penyedia Kustom.
Dapatkan Kunci API terlebih dahulu. Gunakan placeholder
your_apimaster_keydi bawah; tangkapan layar menyembunyikan kunci asli.
Prasyarat
- OpenCode Desktop terinstal dari opencode.ai/download.
- Windows:
opencode-desktop-win-x64.exe - macOS:
brew install --cask opencode-desktopatau.dmg - Linux:
.deb/.rpm/ AppImage
- Windows:
- Kunci API APIMaster dari konsol.
Langkah 1 — Buka Penyedia
- Luncurkan OpenCode Desktop dan buka ruang kerja.
- Klik ikon roda gigi (kiri bawah).
- Pilih Penyedia di bilah sisi.
- Gulir ke Penyedia Kustom (Tambahkan penyedia yang kompatibel dengan OpenAI berdasarkan URL dasar).
- Klik + Hubungkan.

Langkah 2 — Formulir penyedia kustom
| Bidang | Nilai |
|---|---|
| ID Penyedia | apimaster |
| Nama Tampilan | APIMaster.ai |
| URL Dasar | https://apimaster.ai/v1 |
| Kunci API | Kunci APIMaster Anda |

Biarkan Header kosong kecuali Anda melakukan autentikasi hanya melalui header.
Langkah 3 — Tambahkan model & Kirim
Pada layar berikutnya, petakan model (kiri = label di OpenCode, kanan = id model yang dikirim ke APIMaster — biasanya sama):
| Kiri | Kanan |
|---|---|
gpt-5.4 |
gpt-5.4 |
claude-sonnet-4-6 |
claude-sonnet-4-6 |
- Klik + Tambah model untuk baris tambahan.
- Klik Kirim.

Pilih id dari marketplace. Hindari model khusus pembuatan gambar (mis. gpt-image-2) untuk obrolan agen.
Butuh pengenalan gambar (Vision)?
gpt-5.5,claude-sonnet-4-6,claude-opus-4-7,claude-opus-4-8, danclaude-haiku-4-5mendukung input gambar, tetapi OpenCode memerlukan deklarasi kapabilitas tambahan — lihat Aktifkan input gambar untuk GPT dan Claude.
Langkah 4 — Pilih model
- Mulai atau buka sesi.
- Buka dropdown model di bawah input.
- Di bawah APIMaster.ai, pilih model (mis.
claude-sonnet-4-6).

Langkah 5 — Uji coba
Kirim hello atau tugas coding kecil. Balasan Asisten normal (pengeditan file / shell) berarti APIMaster terhubung.

Lanjutan: opencode.jsonc & Reasoning
Alur UI di atas cukup untuk memulai dengan cepat. Untuk mengonfigurasi tingkatan Reasoning / thinking effort (low, high, max, …) untuk id model yang sama, edit opencode.jsonc.
Lokasi file konfigurasi
| OS | Jalur |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
Buat file jika tidak ada. Restart OpenCode Desktop atau mulai sesi baru setelah menyimpan.
Kunci API (jangan dimasukkan ke jsonc)
Jangan menyimpan Kunci API Anda di opencode.jsonc.
Gunakan:
/connectdi terminal, atau- Pengaturan → Penyedia → Hubungkan Penyedia (sama dengan Langkah 1–2 di atas).
Simpan rahasia di penyimpanan autentikasi OpenCode; jsonc hanya mendefinisikan penyedia, model, dan varian Reasoning.
Penyedia APIMaster di jsonc
Provider id: apimaster. npm package: @ai-sdk/openai-compatible.
baseURL harus:
https://apimaster.ai/v1
Bukan https://apimaster.ai/ — OpenCode menambahkan /chat/completions. Tanpa /v1 Anda mendapatkan https://apimaster.ai/chat/completions → 404 Tidak Ditemukan.
Juga bukan
https://api.apimaster.ai/v1— host dengan awalanapi.dapat menyebabkan kegagalan TLS / koneksi saat pengujian. Host yang benar adalahhttps://apimaster.ai/v1.
Contoh lengkap dengan varian Reasoning — unduh dan timpa konfigurasi OpenCode:
- Unduh opencode.jsonc
- Timpa (atau simpan sebagai):
- macOS / Linux:
~/.config/opencode/opencode.jsonc - Windows:
C:\Users\<username>\.config\opencode\opencode.jsonc
- macOS / Linux:
- Konfigurasikan Kunci API melalui
/connectatau UI (jangan pernah di jsonc). - Restart OpenCode Desktop atau mulai sesi baru.
Cadangkan file yang ada sebelum menimpa, atau gabungkan hanya blok
provider.apimaster.
Minimal shape:
{
"$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" }
}
}
}
}
}
}
Bidang
attachmentdanmodalitiespadagpt-5.5di atas mengaktifkan input gambar (Vision) — lihat Aktifkan input gambar untuk GPT dan Claude. Hilangkan keduanya jika Anda hanya perlu obrolan teks.
Prinsip Reasoning
variants= beberapa tingkatan Reasoning untuk satu id model di UI.- Untuk API yang kompatibel dengan OpenAI, OpenCode memetakan
reasoningEffort→reasoning_effortdi body permintaan. - Nama varian harus cocok dengan parameter sebenarnya (
high→"reasoningEffort": "high"). - Setiap model mendukung tingkatan yang berbeda — konfigurasikan sesuai dokumen resmi; tidak ada pemetaan ulang tersembunyi.
Tingkatan Reasoning per model
| Model | Varian Reasoning | Catatan |
|---|---|---|
gpt-5.4 |
low, medium, high, xhigh |
Penalaran GPT |
gpt-5.5 |
low, medium, high, xhigh |
Penalaran GPT |
deepseek-v4-flash |
high, max |
Pemikiran DeepSeek (disarankan) |
deepseek-v4-pro |
high, max |
Pemikiran DeepSeek (disarankan) |
claude-sonnet-4-6 |
low, medium, high, max |
Upaya Claude Sonnet |
claude-opus-4-7 |
low, medium, high, xhigh, max |
Upaya Claude Opus |
claude-opus-4-8 |
low, medium, high, xhigh, max |
Upaya Claude Opus |
claude-haiku-4-5 |
none | Tidak ada tingkatan upaya yang belum dikonfirmasi |
minimax-m3 |
none | Tidak ada tingkatan upaya yang belum dikonfirmasi |
Lihat opencode.jsonc untuk file lengkap.
Mengganti Reasoning di OpenCode
- Simpan
opencode.jsonc, lalu restart atau sesi baru. - Gunakan dropdown model / Reasoning (mis.
gpt-5.4 / high). - Jika didukung di build Anda:
Ctrl + Shift + Dmengganti tingkatan Reasoning.
Aktifkan input gambar untuk GPT dan Claude
Model APIMaster.ai seperti gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, dan claude-haiku-4-5 mendukung input gambar / Vision — membaca tangkapan layar, foto, bagan untuk pengenalan, deskripsi, OCR, atau coding dari sebuah gambar.
Model yang mendukung gambar ≠ OpenCode mengirimkan gambar tersebut. Meskipun model APIMaster.ai itu sendiri mendukung vision, Anda harus mendeklarasikan kapabilitas di
opencode.jsonc. Jika tidak, OpenCode mungkin tidak mengirimkan gambar sebagai input multimodal — ia hanya memasukkan nama lampiran / file ke dalam prompt, dan model membalas sesuatu seperti "model saat ini tidak mendukung input gambar."
Dua bidang yang harus dideklarasikan
Untuk setiap model yang ingin Anda gunakan dengan gambar, tambahkan:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
attachment: truememberi tahu OpenCode bahwa model ini menerima lampiran.modalities.inputyang berisi"image"memberi tahu OpenCode bahwa model ini mendukung input gambar, sehingga OpenCode mengonversi gambar menjadi konten multimodalimage_url.
Contoh lengkap (GPT dan Claude)
Unduh opencode.jsonc (bidang sudah disertakan), atau gabungkan blok provider.apimaster di bawah ke dalam konfigurasi Anda yang ada:
{
"$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"]
}
}
}
}
}
}
Catatan:
- Untuk mengaktifkan input gambar hanya untuk
gpt-5.5, tambahkanattachmentdanmodalitieshanya padagpt-5.5; biarkan yang lain tidak berubah. - Untuk mengaktifkan hanya Claude, tambahkan bidang ini hanya pada model Claude.
- Pertahankan varian Reasoning yang ada pada setiap model (
low/medium/high/xhigh/max) — bidang gambar dan Reasoning tidak saling bertentangan. - Setelah mengedit
opencode.jsonc, keluar sepenuhnya dan restart OpenCode, atau setidaknya mulai sesi baru, agar konfigurasi dimuat ulang. - Jangan pernah memasukkan Kunci API ke file ini — konfigurasikan melalui
/connectatau UI (lihat Keamanan di bawah).
Sumber gambar: utamakan unggahan lokal / base64
- Disarankan: unggah PNG / JPG lokal di OpenCode. Idealnya OpenCode mengonversinya menjadi data URL base64 (
data:image/png;base64,...) sebelum mengirim ke APIMaster — ini adalah jalur kerja yang terverifikasi. - Melewatkan URL gambar publik secara langsung dapat gagal. APIMaster / upstream mungkin gagal mengunduh gambar publik karena jaringan, format, ukuran, MIME, atau proteksi hotlink, mengembalikan:
Dalam kasus itu, gunakan data URL base64 atau unggahan lokal alih-alih mengandalkan sisi model untuk mengunduh URL publik.Error while downloading file. Upstream status code: 400.
Uji bahwa pengenalan gambar berfungsi
Opsi A — Uji di OpenCode
- Beralih ke
apimaster/gpt-5.5atauapimaster/claude-sonnet-4-6di dropdown model. - Unggah gambar PNG / JPG.
- Ketik:
Describe the main content of this image.
- Dengan konfigurasi yang benar, model seharusnya mendeskripsikan konten gambar.
- Jika model hanya menyebutkan nama file / lampiran, atau membalas "image input not supported," kemungkinan OpenCode tidak mengirimkan konten gambar — periksa bidang
attachmentdanmodalitiesmodel dan restart OpenCode.
Opsi B — Uji melalui API secara langsung
Berguna untuk membedakan masalah model APIMaster dari masalah adaptor OpenCode. Jangan pernah menuliskan kunci asli secara hardcode — gunakan variabel lingkungan.
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
}'
Ganti model ke claude-sonnet-4-6 untuk menguji Claude dengan cara yang sama (terverifikasi HTTP 200 dengan pengenalan gambar).
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.
Respons 200 yang mendeskripsikan gambar berarti input gambar berfungsi di sisi APIMaster; jika OpenCode masih gagal, masalahnya ada di konfigurasi
attachment/modalitiesOpenCode atau restart yang terlewat.
Pemecahan Masalah
Pengaturan UI
| Masalah | Perbaikan |
|---|---|
| 401 | Periksa kunci; rotasi jika terekspos |
| Model tidak ditemukan | URL Dasar harus https://apimaster.ai/v1; id model harus cocok dengan marketplace |
| Tidak ada model APIMaster | Edit penyedia di Pengaturan → tambahkan pemetaan → Kirim |
| Lambat / waktu habis | Coba model lain; gunakan Penguji Kunci API |
Reasoning / jsonc
Mengapa hanya high dan max untuk DeepSeek?
Upaya pemikiran resmi yang kompatibel dengan OpenAI untuk DeepSeek adalah high dan max. Hindari low / medium / xhigh yang dipetakan ulang secara tidak terduga.
Mengapa max untuk Claude Sonnet, bukan xhigh?
Tingkatan tertinggi Sonnet adalah max; xhigh untuk Opus (claude-opus-4-7 / claude-opus-4-8).
Mengapa tidak ada varian untuk Haiku atau MiniMax M3?
Tanpa nilai reasoningEffort yang terdokumentasi, lewati varian — model tetap berfungsi; UI hanya tidak akan menampilkan sub-tingkatan Reasoning.
Masih mendapatkan 400?
baseURL=https://apimaster.ai/v1(bukan root situs).- Ejaan id model cocok dengan marketplace.
- Kunci dikonfigurasi melalui
/connectatau UI. - Hapus
variantssementara — jika permintaan biasa berfungsi,reasoning_effortyang dipilih mungkin tidak didukung untuk model tersebut.
Input gambar / Vision
Mengapa OpenCode mengatakan "the current model does not support image input"?
gpt-5.5dan beberapa model Claude APIMaster.ai memang mendukung input gambar; pesan ini biasanya berarti OpenCode tidak mengirimkan gambar sebagai input multimodal.- Periksa bahwa model di
opencode.jsoncmemiliki:"attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] } - Pastikan Anda me-restart OpenCode setelah mengedit.
- Pastikan
baseURLadalahhttps://apimaster.ai/v1. - Pastikan Kunci API APIMaster valid.
- Jika URL gambar publik gagal, gunakan data URL base64 atau unggahan lokal.
Mengapa model hanya melihat nama lampiran, bukan gambarnya?
- Biasanya OpenCode tidak membaca dan mengonversi lampiran menjadi input gambar — ia hanya memasukkan nama file / lampiran ke dalam prompt.
- Aktifkan
attachment: truedanmodalities.input: ["text", "image"], dan gunakan model yang mendukung input gambar.
Mengapa URL gambar publik mengalami error?
- APIMaster atau upstream mungkin terbatas oleh jaringan, format, ukuran file, MIME, proteksi hotlink, atau proxy saat mengunduh gambar publik.
- Pada
Error while downloading file. Upstream status code: 400., beralih ke data URL base64.
Masih tidak berfungsi setelah menambahkan attachment?
- Keluar sepenuhnya dan restart OpenCode.
- Mulai sesi baru untuk menguji.
- Pastikan model aktif sesi adalah model yang Anda konfigurasikan dengan bidang gambar.
- Pastikan Kunci API valid.
- Periksa log OpenCode untuk error 401 / 400 / unsupported image / invalid content type.
- Gunakan Opsi B — Uji melalui API secara langsung dengan gambar base64 untuk memisahkan masalah model APIMaster dari masalah adaptor OpenCode.
Keamanan
- Jangan memasukkan Kunci API APIMaster ke
opencode.jsonc; file itu hanya menyimpan penyedia, model, kapabilitas gambar, dan Reasoning. - Jangan menempelkan kunci ke obrolan, tangkapan layar, issue, dokumen publik, atau repo kode.
- Rotasi kunci yang muncul di tangkapan layar atau log — cabut dan buat ulang di konsol, lalu perbarui penyedia di OpenCode.
- Utamakan alur
/connectOpenCode, variabel lingkungan, atau penyimpanan kredensial lokal untuk mengelola Kunci API. - OpenCode dapat membaca/menulis file dan menjalankan perintah shell — gunakan hanya ruang kerja tepercaya.
Daftar Periksa
- OpenCode Desktop terinstal
- Penyedia kustom terhubung atau
apimasterdiopencode.jsonc - URL Dasar /
baseURL=https://apimaster.ai/v1(bukanhttps://apimaster.ai/) - Kunci API melalui
/connectatau UI (bukan di jsonc) - Setidaknya satu model obrolan dipetakan
- (Opsional) Varian Reasoning sesuai dengan tingkatan resmi
- Pesan uji berhasil
Daftar periksa input gambar
-
baseURLadalahhttps://apimaster.ai/v1(bukanhttps://api.apimaster.ai/v1) - Menggunakan model berkemampuan vision, mis.
gpt-5.5atau model Claude berkemampuan Vision - Model memiliki
attachment: true -
modalities.inputmodel berisi"image" - OpenCode di-restart setelah mengedit
opencode.jsonc - Kunci API valid
- Gambar uji adalah format umum (PNG / JPG)
- Jika URL gambar publik gagal, sudah mencoba data URL base64
Ringkasan
- Kunci:
baseURL(https://apimaster.ai/v1), id model, Kunci API (/connectatau UI), opsional varian Reasoning. - Nama varian = nilai
reasoning_effortsebenarnya. - Konfigurasikan tingkatan per model; lewati varian jika tidak didukung (Haiku, MiniMax M3).