Satu gateway, semua client. Akses kompatibel Anthropic & OpenAI ke Claude Opus 5, Opus 4.8 dan GPT 5.6.
sk-mvx-…) ada di dashboard. Rahasiakan; rotasi kapan saja./v1/messages). SDK gaya OpenAI minta /v1. Domain selalu ohhmyagent.com.https://ohhmyagent.com/v1/messages # Anthropic Messages API
https://ohhmyagent.com/v1/chat/completions # OpenAI Chat Completions
https://ohhmyagent.com/v1/responses # OpenAI Responses API (Codex)
https://ohhmyagent.com/v1/models # list available modelsohh/claude-fable-5 # Claude Fable 5 (Fable Only wallet)
ohh/claude-opus-5 # Claude Opus 5 (GPT + Opus wallet)
ohh/claude-opus-4.8 # Claude Opus 4.8 (GPT + Opus wallet)
ohh/gpt-5.6 # GPT 5.6 auto-burst (Sol -> Terra -> Luna)
ohh/gpt-5.6-sol # pin GPT to the Sol deployment
ohh/gpt-5.6-terra # pin GPT to the Terra deployment
ohh/gpt-5.6-luna # pin GPT to the Luna deploymentGunakan ohh/gpt-5.6 untuk routing burst otomatis Sol → Terra → Luna. Tambah -sol/-terra/-luna hanya untuk mengunci route. Fable hanya tersedia lewat ohh/claude-fable-5 dan tidak pernah fallback ke GPT atau Opus.
Pembelian dan grant admin membuat entitlement pada tepat satu scope wallet. Grant Plan memakai aturan yang sama seperti checkout; grant tidak membuat saldo global.
| Plan / grant | Model yang dibuka | Saldo eligible |
|---|---|---|
| GPT + Opus | ohh/gpt-5.6*, ohh/claude-opus-5, ohh/claude-opus-4.8 | Lot GPT + Opus (all) |
| GPT Only | ohh/gpt-5.6* | Lot GPT Only lebih dulu; lalu lot GPT + Opus yang eligible |
| Fable Only | ohh/claude-fable-5 | Hanya lot Fable (fable) |
Allowance token: GPT + Opus dan Fable Only tersedia 30M / 90M / 150M / 300M / 450M. GPT Only menerima allowance terpisah sesuai paket yang ditampilkan. Setiap paket token disimpan sebagai lot independen 30 hari; Unlimited hanya memperpanjang scope yang dipilih.
Setiap request butuh API key kamu (sk-mvx-…). Kedua gaya header diterima di semua endpoint — kirim yang dihasilkan SDK kamu:
# Anthropic style
x-api-key: sk-mvx-your-key
anthropic-version: 2023-06-01
# OpenAI / Bearer style
Authorization: Bearer sk-mvx-your-keyGateway adalah proxy transparan: kirim body native dari API yang kamu panggil. Field umum:
| Field | API | Keterangan |
|---|---|---|
model | keduanya | Salah satu model ID di atas. Wajib. |
messages | keduanya | Array percakapan (role + content). Wajib. |
max_tokens | Anthropic | Maks token output. Wajib di /v1/messages. |
max_completion_tokens | OpenAI | Maks token output (GPT). Opsional. |
stream | keduanya | true = stream SSE. Default false. |
system | Anthropic | System prompt (string atau blok). |
temperature / top_p | keduanya | Sampling. Diabaikan untuk Opus (model thinking membuangnya). |
tools | keduanya | Definisi function/tool — lihat Tool calling. |
reasoning_effort | OpenAI | Kedalaman thinking GPT: none·low·medium·high·xhigh. |
output_config.effort | Anthropic | Kedalaman thinking Opus: low·medium·high·xhigh·max. |
Kamu menerima bentuk native dari endpoint yang dipanggil. Field model adalah slug publik kami (bukan deployment upstream). Contoh Anthropic non-stream:
{
"id": "msg_01…",
"type": "message",
"role": "assistant",
"model": "ohh/claude-opus-5",
"content": [{ "type": "text", "text": "Hello!" }],
"stop_reason": "end_turn",
"usage": { "input_tokens": 12, "output_tokens": 6 }
}input_tokens baru + cache_creation_input_tokens + cache_read_input_tokens. GPT mengikuti semantik OpenAI, yaitu prompt_tokens sudah termasuk cached input. Komponen upstream tetap disimpan untuk audit.Set field stream ke true. Kamu menerima Server-Sent Events. Anthropic mengirim message_start → content_block_delta … → message_delta → message_stop; OpenAI mengirim objek chat.completion.chunk diakhiri [DONE]. Gateway menerjemahkan transparan, jadi client Anthropic yang stream GPT tetap menerima event berbentuk Anthropic.
curl -N https://ohhmyagent.com/v1/messages \
-H "x-api-key: sk-mvx-your-key" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"ohh/claude-opus-5","max_tokens":256,"stream":true,
"messages":[{"role":"user","content":"Stream a haiku"}]}'Endpoint /v1/responses memakai Responses API OpenAI (dipakai OpenAI Codex). Kirim input (string atau array item) plus instructions opsional; set reasoning.effort untuk kedalaman thinking. Model ID Opus maupun GPT berfungsi.
curl https://ohhmyagent.com/v1/responses \
-H "authorization: Bearer sk-mvx-your-key" \
-H "content-type: application/json" \
-d '{"model":"ohh/gpt-5.6",
"input":"Write a haiku about the sea",
"reasoning":{"effort":"medium"}}'Response biasa (non-stream) — satu objek response; teksnya di output[].content[].text (juga di output_text):
{
"id": "resp_…",
"object": "response",
"status": "completed",
"model": "ohh/gpt-5.6",
"output": [
{ "type": "message", "role": "assistant",
"content": [{ "type": "output_text", "text": "Waves…" }] }
],
"output_text": "Waves…",
"usage": { "input_tokens": 9, "output_tokens": 17, "total_tokens": 26 }
}Versi stream — tambah "stream": true. Kamu menerima event SSE Responses berurutan seperti ini:
event: response.created
event: response.in_progress
event: response.output_item.added
event: response.content_part.added
event: response.output_text.delta # ← repeated, the tokens
event: response.output_text.done
event: response.content_part.done
event: response.output_item.done
event: response.completed # ← final, carries usageresponse.function_call_arguments.delta/.done di antara event item. GPT 5.6 juga mendukung tool bawaan Responses web_search dan mengirim event response.web_search_call.*; web_search_preview diterima sebagai alias kompatibilitas. Tool bawaan lain tanpa nama tidak diklaim didukung. Base URL untuk Codex https://ohhmyagent.com/v1 dengan wire_api = responses — lihat setup Codex di CLI Tools.Function calling penuh di kedua endpoint, kedua model. Gateway memetakan tool_use ↔ tool_calls otomatis. Bentuk Anthropic:
{
"model": "ohh/claude-opus-5",
"max_tokens": 1024,
"tools": [{
"name": "get_weather",
"description": "Get current weather for a city",
"input_schema": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}],
"messages": [{ "role": "user", "content": "Weather in Jakarta?" }]
}Bentuk OpenAI memakai array tools berisi objek type:function dan mengembalikan tool_calls. Kirim balik hasil tool sebagai pesan tool_result (Anthropic) atau role:tool (OpenAI) untuk melanjutkan.
Untuk request gambar, gunakan model yang mendukung image. Anthropic memakai blok image base64; OpenAI memakai image_url (data URL atau URL https).
{
"model": "ohh/claude-opus-5",
"max_tokens": 512,
"messages": [{ "role": "user", "content": [
{ "type": "image", "source": {
"type": "base64", "media_type": "image/png", "data": "<BASE64>" } },
{ "type": "text", "text": "What is in this image?" }
]}]
}Kontrol seberapa dalam model berpikir. Makin tinggi = reasoning lebih dalam + token lebih banyak.
| Model | Field | Nilai valid |
|---|---|---|
| Opus 5 / 4.8 | output_config.effort | low · medium · high · xhigh · max |
| GPT 5.6 | reasoning_effort | none · low · medium · high · xhigh |
{ "model":"ohh/claude-opus-5", "max_tokens":1024,
"output_config": { "effort": "max" },
"messages":[{"role":"user","content":"Prove there are infinitely many primes."}] }Prompt caching berjalan otomatis di upstream dan mempercepat context berulang. Penagihan bersifat full-uncached dan seragam untuk semua model: input wallet sama dengan total prompt token yang dilaporkan upstream — input baru ditambah pembuatan cache dan cache read — tanpa diskon cache. Untuk Opus kami otomatis menaruh cache breakpoint pada bagian prompt yang stabil (system prompt, tools, giliran lama) dan untuk GPT Azure caching berjalan otomatis; caching memperbaiki latency dan biaya upstream, tetapi wallet ditagih atas seluruh prompt_tokens yang diproses model. Pertahankan deployment, system prompt, urutan tool, dan history lama agar cache hit maksimal.
| Kode | Arti | Solusi |
|---|---|---|
400 | Request buruk / JSON invalid | Cek body & field wajib. |
401 | Key salah / tidak ada | Cek key; rotasi di dashboard. |
402 | Saldo habis | Top-up dompet token. |
403 | Akun ditangguhkan / diblokir | Buka tiket support. |
404 | Base URL salah | Claude Code = root; SDK = /v1. Jangan /v1/v1. |
413 | Body melewati batas keamanan request terautentikasi 16 MiB | Kurangi lampiran biner yang sangat besar; konteks agent panjang biasa tetap diterima. |
429 | ChatRateLimited / Rate limit terlampaui | Layanan otomatis menunggu dan retry hingga 95 detik. Jika masih muncul, kurangi concurrency dan hindari burst paralel. |
502/503 | Gangguan upstream | Auto-retry; coba lagi sebentar. |
529 | Upstream sibuk | Auto-retry dengan backoff. |
Tagihan per scope. Fable hanya memakai lot Fable. GPT memakai lot GPT Only lebih dulu, lalu lot GPT + Opus yang eligible. Opus hanya memakai lot GPT + Opus. Wallet tidak pernah saling memakai saldo di luar aturan ini.
Rate limit. 50 request/menit per akun (semua key berbagi) + 200 req/menit per IP. Body request terautentikasi maks 16 MiB. ChatRateLimited: Rate limit exceeded berarti laju request melewati RPM yang dibatasi layanan kami; ini bukan gangguan upstream.
Retry. Untuk 429, layanan mengikuti Retry-After, menunggu dengan jitter, dan retry otomatis hingga 95 detik. Error 502/503/529 sesaat memakai exponential backoff.
Masa berlaku. Paket token berlaku 30 hari sebagai lot independen, dipakai yang paling dekat kedaluwarsa dulu. Unlimited menumpuk masa akses, bukan token.
Pilih tool kamu. Tool Anthropic-native pakai URL root; tool OpenAI-compatible pakai /v1.
CLI — URL root saja; Claude Code menambahkan /v1/messages.
export ANTHROPIC_BASE_URL="https://ohhmyagent.com"
export ANTHROPIC_AUTH_TOKEN="sk-mvx-your-key"
export ANTHROPIC_DEFAULT_OPUS_MODEL="ohh/claude-opus-5"
claude --model opusExtension VS Code / Cursor — Windows, macOS, Linux
Ctrl+Shift+P) → Preferences: Open User Settings (JSON).claudeCode.environmentVariables di dalam dirinya sendiri.{
"claudeCode.disableLoginPrompt": true,
"claudeCode.environmentVariables": [
{ "name": "ANTHROPIC_BASE_URL", "value": "https://ohhmyagent.com" },
{ "name": "ANTHROPIC_AUTH_TOKEN", "value": "«redacted:sk-…»" },
{ "name": "ANTHROPIC_MODEL", "value": "ohh/claude-opus-5" },
{ "name": "ANTHROPIC_DEFAULT_OPUS_MODEL", "value": "ohh/claude-opus-5" },
{ "name": "ANTHROPIC_DEFAULT_SONNET_MODEL", "value": "ohh/claude-opus-5" },
{ "name": "ANTHROPIC_DEFAULT_HAIKU_MODEL", "value": "ohh/claude-opus-4.8" }
]
}/v1). Claude Code menambah /v1/messages; menambah /v1 di sini membuat 404 di /v1/v1/messages. Untuk GPT ubah DEFAULT_* menjadi ohh/gpt-5.6.npm i -g @openai/codexexport OHH_API_KEY="sk-mvx-your-key"~/.codex/config.toml:# ~/.codex/config.toml
model = "ohh/gpt-5.6"
model_provider = "ohh"
[model_providers.ohh]
name = "OhhMyAgent"
base_url = "https://ohhmyagent.com/v1"
env_key = "OHH_API_KEY"
wire_api = "responses"codex --model ohh/gpt-5.6 "Refactor this module"
codex --model ohh/claude-opus-5 "Review this diff"Windows / integrated terminal VS Code
# %USERPROFILE%\.codex\config.toml
model = "ohh/claude-opus-5"
model_provider = "ohh"
[model_providers.ohh]
name = "OhhMyAgent"
base_url = "https://ohhmyagent.com/v1"
env_key = "OHH_API_KEY"
wire_api = "responses"
# PowerShell (current terminal)
$env:OHH_API_KEY = "«redacted:sk-…»"
# Persist for new terminals (reopen VS Code after this)
[Environment]::SetEnvironmentVariable("OHH_API_KEY", "«redacted:sk-…»", "User")wire_api = responses). Di Windows, integrated terminal VS Code memakai %USERPROFILE%\.codex\config.toml dan environment variable User yang sama. Jangan pakai https://ohhmyagent.com; Codex OpenAI-compatible harus memakai https://ohhmyagent.com/v1.https://ohhmyagent.com/v1sk-mvx-your-keyohh/gpt-5.6 atau ohh/claude-opus-5, lalu klik Verify.https://ohhmyagent.com/v1sk-mvx-your-keyohh/claude-opus-5 / ohh/gpt-5.6.https://ohhmyagent.com/v1 · API Key: sk-mvx-your-key.ohh/gpt-5.6 atau ohh/claude-opus-5 dan aktifkan di daftar model.https://ohhmyagent.com/v1 · API Key: sk-mvx-your-key.ohh/claude-opus-5, ohh/gpt-5.6.attachment: true dan modalities.input: ["text", "image"]. Modelnya vision-capable; ini memberi tahu Kilo agar menampilkan UI attachment."claude-opus-4.8": {
"name": "Claude Opus 4.8",
"attachment": true,
"modalities": { "input": ["text", "image"], "output": ["text"] }
}https://ohhmyagent.com/v1 — Kilo memanggil /v1/messages. Model ID sama tetap berfungsi.{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ohh": {
"npm": "@ai-sdk/openai-compatible",
"name": "OhhMyAgent",
"options": { "baseURL": "https://ohhmyagent.com/v1", "apiKey": "{env:OHH_API_KEY}" },
"models": {
"claude-opus-5": { "name": "Claude Opus 5" },
"gpt-5.6": { "name": "GPT 5.6 · Auto Burst" }
}
}
}
}export OHH_API_KEY="sk-mvx-your-key"
opencode run --model "ohh/claude-opus-5" "Review this code"
opencode run --model "ohh/gpt-5.6" "Review this code"export OPENAI_API_BASE="https://ohhmyagent.com/v1"
export OPENAI_API_KEY="sk-mvx-your-key"
aider --model openai/ohh/gpt-5.6
aider --model openai/ohh/claude-opus-5openai/ pada model supaya Aider merutekannya lewat driver OpenAI-compatible ke base /v1 kami.models:
- name: Opus 5
provider: openai
model: ohh/claude-opus-5
apiBase: https://ohhmyagent.com/v1
apiKey: sk-mvx-your-key
- name: GPT 5.6
provider: openai
model: ohh/gpt-5.6
apiBase: https://ohhmyagent.com/v1
apiKey: sk-mvx-your-keyohh · Base URL: https://ohhmyagent.com/v1 · API Key: sk-mvx-your-key.claude-opus-5, claude-opus-4.8, gpt-5.6. 9Router menampilkannya sebagai ohh/claude-opus-5 dst./v1 sama — 9Router akan memanggil /v1/messages.# 9router provider (conceptual)
provider: ohh
type: openai_compatible
base_url: https://ohhmyagent.com/v1
api_key: sk-mvx-your-key
models: [claude-opus-5, claude-opus-4.8, gpt-5.6]9Router bisa mengintersep transparan tool yang meng-hardcode api.anthropic.com / api.openai.com dengan memasang CA MITM-nya dan menulis ulang upstream. Arahkan upstream yang diintersep ke kami:
api.anthropic.com → https://ohhmyagent.com (root, Anthropic) dan api.openai.com/v1 → https://ohhmyagent.com/v1.x-api-key: sk-mvx-your-key (atau Bearer) pada request yang ditulis ulang.ohh/… kalau tool mengirim nama khusus upstream.# litellm config.yaml
model_list:
- model_name: claude-opus-5
litellm_params:
model: openai/ohh/claude-opus-5
api_base: https://ohhmyagent.com/v1
api_key: sk-mvx-your-key
- model_name: gpt-5.6
litellm_params:
model: openai/ohh/gpt-5.6
api_base: https://ohhmyagent.com/v1
api_key: sk-mvx-your-key# Python · Anthropic SDK
from anthropic import Anthropic
client = Anthropic(api_key="sk-mvx-your-key", base_url="https://ohhmyagent.com")
msg = client.messages.create(
model="ohh/claude-opus-5", max_tokens=512,
messages=[{"role":"user","content":"Hello"}])
print(msg.content[0].text)// Node · OpenAI SDK
import OpenAI from "openai";
const client = new OpenAI({ apiKey: "sk-mvx-your-key", baseURL: "https://ohhmyagent.com/v1" });
const r = await client.chat.completions.create({
model: "ohh/gpt-5.6",
messages: [{ role: "user", content: "Hello" }],
});
console.log(r.choices[0].message.content);curl https://ohhmyagent.com/v1/messages \
-H "x-api-key: sk-mvx-your-key" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"ohh/claude-opus-5","max_tokens":1024,
"messages":[{"role":"user","content":"Hello!"}]}'curl https://ohhmyagent.com/v1/chat/completions \
-H "authorization: Bearer sk-mvx-your-key" \
-H "content-type: application/json" \
-d '{"model":"ohh/gpt-5.6",
"messages":[{"role":"user","content":"Hello!"}]}'Prefix mana — ohh/ atau oma/?
Pakai ohh/. ID canonical polos seperti claude-opus-5 / gpt-5.6 juga dikenali. ID Opus singkat lama tetap kompatibel, tetapi tidak lagi ditampilkan. Tidak ada oma/.
GPT 5.6 cuma OpenAI-compatible?
Tidak — jalan di kedua endpoint; kami terjemahkan transparan. Pilih endpoint sesuai SDK kamu.
Satu key untuk semua model?
Satu key bisa memanggil semua model ID, tetapi request hanya diizinkan dan ditagih dari wallet yang eligible untuk model tersebut. Saldo Fable, GPT Only, dan GPT + Opus tetap terpisah.
Sol / Terra / Luna?
Tiga route GPT 5.6, rate rata sama. ohh/gpt-5.6 auto-burst; kunci dengan -sol/-terra/-luna hanya jika mau route tetap.
Isi percakapan disimpan?
Tidak. Kami hanya simpan metadata (jumlah token, waktu, model). Isi percakapan diteruskan dan tidak disimpan.
401 — cek key benar & aktif; rotasi di dashboard.
404 — base URL salah. Claude Code = root (tanpa /v1); SDK = /v1. Jangan /v1/v1.
402 — top-up dompet token.
429 / ChatRateLimited — laju request melewati batas RPM layanan, bukan masalah upstream. Layanan otomatis menunggu dan retry hingga 95 detik. Jika masih muncul, kurangi concurrency, antrekan request, dan hindari burst paralel.
529 — upstream sibuk; auto-retry — coba lagi sebentar.
domain keliru — selalu pakai ohhmyagent.com.