Perutean transparan dan rincian flight
Router GetVibe yang transparan: rute eksplisit melalui :alias atau perutean otomatis berdasarkan strategi kunci. Alias publik, failover, header pengungkapan/debug x-getvibe-route, dan kolom route/address_as dalam riwayat.
GetVibe adalah router transparan: Anda memilih varian publik secara eksplisit melalui akhiran :alias, atau membiarkan nama model tanpa akhiran — maka gateway memilih rute sesuai strategi akun/kunci Anda dan, jika terjadi kegagalan, beralih ke varian lain yang tersedia. Hanya pengenal rute publik yang digunakan dalam respons dan riwayat.
Dua mode: pin atau auto
| Parameter | Tipe | Deskripsi |
|---|---|---|
Explicit pin | model:alias or model:N | Permintaan selalu melewati varian yang dipilih. Failover antar-varian dimatikan: pada 429/5xx error dikembalikan apa adanya (percobaan ulang pada varian yang sama diperbolehkan). |
Auto (bare model) | nama model saja | Gateway memilih varian sesuai pengaturan akun atau key. Pada 429/5xx dan 200 kosong, ia mencoba varian lain dari model yang sama, dengan batasan biaya dan input. |
"model": "claude-opus-4.8" // auto — key strategy
"model": "claude-opus-4.8:yellow" // pin — :yellow only, no switching to other channels
"model": "claude-opus-4.8:2" // pin — catalog variant #2 (legacy :N syntax)Batas harga: max_price dan min_price
Setiap model dilayani oleh beberapa kanal dengan harga berbeda — sebuah tangga. Dua parameter body permintaan ini menentukan tingkat tangga mana yang boleh melayani Anda. Keduanya USD per 1M token, satuan dan angka yang sama seperti yang ditampilkan halaman Models. Keduanya dibandingkan dengan harga kami — yang Anda bayar — bukan dengan angka grosir yang tidak dapat Anda lihat.
| Parameter | Tipe | Deskripsi |
|---|---|---|
max_price | number atau object | Batas atas. Sebuah angka membatasi KEDUA leg; sebuah objek membatasinya secara terpisah: {"input": 0.5, "output": 2}. Leg yang dihilangkan tidak dibatasi. Inklusif: batas yang sama dengan harga yang dipublikasikan menerima channel tersebut. |
min_price | number atau object | Floor, bentuk sama. Menolak channel yang harganya DI BAWAH batas ini — untuk pemanggil yang lebih memilih tidak dilayani oleh diskon terdalam di bursa. Ini hanya dapat membuat permintaan lebih mahal, tidak pernah lebih murah. |
{
"model": "deepseek-v4-flash-0731",
"messages": [{"role": "user", "content": "hi"}],
"max_price": 0.02,
"min_price": {"input": 0.001}
}Kedua sisi harus terpenuhi, input dan output — jangan pernah mengambil rata-rata keduanya. Kanal yang murah pada input dan mahal pada output tidak memenuhi batas satu angka.
Batas tetap, ditetapkan sekali di kabinet
Batas atas tidak harus disertakan pada setiap panggilan. Dashboard menyimpan satu batas per API key dan per model, plus satu default yang mencakup setiap model yang belum Anda tetapkan secara eksplisit, dan API membacanya pada setiap permintaan. Permintaan yang membawa max_price memakai nilai itu sebagai gantinya untuk satu panggilan tersebut; permintaan yang tidak membawa apa pun memakai batas atas tersimpan Anda. Prioritas, dari yang paling spesifik:
| Parameter | Tipe | Deskripsi |
|---|---|---|
max_price in the request | per panggilan | Menggantikan batas atas yang tersimpan hanya untuk permintaan ini — sepenuhnya, bukan digabungkan per bagian. |
key + model | stored | Batas maksimum API key ini untuk model ini. |
account + model | stored | Batas akun Anda untuk model ini, digunakan oleh key yang tidak menetapkan batas sendiri. |
key / account default | stored | Batas atas serbaguna untuk setiap model yang tidak memiliki batasnya sendiri. |
Di mana membaca harga yang Anda batasi
GET /api/catalog mempublikasikan array channels untuk setiap model: satu entri per channel yang bisa menjadi tujuan permintaan, dari yang termurah lebih dulu, masing-masing dengan alamat yang bisa Anda gunakan untuk menyematkannya, harga inputUsd / outputUsd per 1M token dan apakah itu default. Itulah angka persis yang dibandingkan dengan max_price dan min_price, dan angka persis yang menjadi dasar penagihan Anda — satu daftar, bukan tiga.
curl -s https://getvibeapi.com/api/catalog | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'Apa yang Anda ditagih
Anda ditagih untuk channel yang benar-benar melayani permintaan, ditambah markup tetap kami — bukan untuk batas atas yang Anda tetapkan, dan tidak pernah lebih dari itu. Jika Anda membatasi pada suatu harga dan permintaan terisi pada tingkat yang lebih murah, Anda membayar yang lebih murah. Tangga harga di halaman model menunjukkan rentang, dan angka “from” adalah tingkat termurah yang ada — itu harga nyata yang bisa Anda bayar, bukan janji bahwa permintaan ini akan mendarat di sana. Tetapkan max_price saat Anda butuh batas atas yang terjamin.
Saat tidak ada yang cocok
Permintaan ditolak: HTTP 422 dengan "type": "price_bound_no_lane", yang mencantumkan harga channel termurah dan termahal untuk model tersebut serta daftar channels lengkapnya, sehingga Anda dapat memilih batas dari angka-angka itu alih-alih menebaknya. lowest_passing_usd_per_million adalah batas terkecil yang saat ini menerima sebuah channel — pasangan milik satu channel itu sendiri, jadi mengirimkannya akan lolos (kedua leg cheapest boleh berasal dari channel yang berbeda). Field yang sama muncul ketika bursa itu sendiri menolak batas Anda: maka nilainya adalah tingkat harga berikutnya yang masih memiliki pasokan, dan tidak pernah lebih rendah daripada batas yang Anda kirimkan. Ketika batas Anda bukan penyebabnya — melainkan plafon pembelian kami sendiri untuk channel tersebut, sementara penawaran di bawahnya sedang sibuk atau habis — jawabannya adalah HTTP 503 "type": "no_seller_available" dengan Retry-After dan tanpa harga saran: menaikkan max_price tidak akan membantu, mencoba lagi sebentar lagi mungkin bisa. Tingkat termurah sering kali hanya menampung satu penawaran yang sibuk, jadi untuk pengisian yang andal tetapkan batas pada atau di atas priceTypical model tersebut, tempat sebagian besar pasokan berada. Kami tidak pernah diam-diam melayani channel yang lebih mahal, dan kami tidak pernah menggantinya dengan model lain. Nilai yang salah bentuk — string, nol, negatif, field yang tidak dikenal — adalah 400 invalid_request_error, tidak pernah diabaikan begitu saja.
{
"error": {
"message": "No channel of model "deepseek-v4-flash-0731" is priced within your max_price $0.0001 in / $0.0001 out...",
"type": "price_bound_no_lane",
"code": 422,
"param": "max_price",
"cheapest_usd_per_million": {"input": 0.0065, "output": 0.013},
"dearest_usd_per_million": {"input": 0.0528, "output": 0.1584},
"lowest_passing_usd_per_million": {"input": 0.0205, "output": 0.0613},
"channels": [
{"address": "deepseek/deepseek-v4-flash-0731:codebuddy-cn", "label": "codebuddy-cn", "inputUsd": 0.0205, "outputUsd": 0.0613, "isDefault": true},
{"address": "deepseek/deepseek-v4-flash-0731:qwencloud", "label": "qwencloud", "inputUsd": 0.0378, "outputUsd": 0.1132, "isDefault": false}
]
}
}Nama pool yang dapat Anda pin
Channel yang dilayani dari pool langganan vendor dapat dialamatkan dengan nama. Tuliskan nama setelah titik dua, persis seperti alias lainnya:
"model": "gpt-6.1-sol:codex" // pin a subscription pool
"model": "claude-opus-5.5:claude-code" // pin the Claude Code pool| Parameter | Tipe | Deskripsi |
|---|---|---|
:codex | pool | Alamat pool ini berdasarkan nama. Juga diterima: :openai-codex. |
:qwencloud | pool | Alamat pool ini berdasarkan nama. Juga diterima: :alibaba-qwencloud. |
:zai | pool | Alamat pool ini berdasarkan nama. Juga diterima: :z-ai-glm-coding-plan. |
:claude-code | pool | Alamat pool ini berdasarkan nama. |
:antigravity | pool | Alamat pool ini berdasarkan nama. |
:grok | pool | Alamat pool ini berdasarkan nama. |
:codebuddy | pool | Alamat pool ini berdasarkan nama. |
:codebuddy-cn | pool | Alamat pool ini berdasarkan nama. |
:clinepass | pool | Alamat pool ini berdasarkan nama. |
:command-code | pool | Alamat pool ini berdasarkan nama. Juga diterima: :commandcode. |
:opencode | pool | Alamat pool ini berdasarkan nama. Juga diterima: :opencode-go. |
:mimo | pool | Alamat pool ini berdasarkan nama. |
:kiro-pool | pool | Alamat pool ini berdasarkan nama. |
:meta-ai | pool | Alamat pool ini berdasarkan nama. |
:minimax-cn | pool | Alamat pool ini berdasarkan nama. |
:qwencloud-alibaba-cn | pool | Alamat pool ini berdasarkan nama. |
:marketplace | pool | Alamat pool ini berdasarkan nama. Juga diterima: :bare-marketplace-alias. |
:nous | pool | Alamat pool ini berdasarkan nama. |
x-pv-deprecated-alias / x-pv-use-instead), tetapi bentuk itu tidak pernah ditampilkan di sini dan integrasi baru harus menggunakan nama tersebut. Setiap pool adalah satu kanal dengan tangga harganya sendiri; ejaan band lama yang berakhiran angka (:claude-code-2) masih diresolusi ke pool tersebut.Alias publik (:alias)
Sufiks setelah titik dua adalah pengenal rute publik, bukan nama upstream. Daftar lengkap untuk model tertentu ada di katalog (Models, kolom «In API»). Alias utama:
| Parameter | Tipe | Deskripsi |
|---|---|---|
:yellow | alias | Varian publik yang ditawarkan untuk banyak model; harganya tercantum di katalog. |
:codex / :claude-code / … | alias | Pool langganan, yang namanya tercantum di bagian “Nama pool yang dapat Anda sematkan” di atas. |
:pixel / :flow | alias | Rute media (gambar/video), bukan chat. |
Pengaturan kunci
Untuk permintaan auto (model tanpa varian), hal-hal berikut ditetapkan pada setiap kunci API (dasbor → API keys):
| Parameter | Tipe | Deskripsi |
|---|---|---|
routingStrategy | string | priority (default) — urutan providerPriority, jika tidak maka varian pertama di katalog; price — varian termurah bagi kami; latency — yang tercepat berdasarkan pengukuran terbaru; default — secara kaku varian pertama yang memenuhi syarat. |
providerPriority | list | Prioritas tag penyedia internal (nama yang mudah dibaca di dasbor). Digunakan dengan strategy=priority. |
disabledProviders | list | Kecualikan penyedia dari perutean otomatis. :alias eksplisit tetap dapat dipanggil jika variannya tersedia. |
cacheOnly | boolean | Hanya varian dengan dukungan prompt-cache — cocok untuk prefiks yang berulang. |
allowedModels dan batasan pada tabel di bawah.Strategi routing
| Parameter | Tipe | Deskripsi |
|---|---|---|
priority (default) | strategy | Rute default yang biasa. |
price | strategy | Pilih varian dengan harga terendah di antara yang tersedia untuk model tersebut. |
latency | strategy | Pilih varian tercepat berdasarkan pengukuran terbaru. |
cacheOnly | boolean | Hanya varian yang mendukung cache — cocok untuk prefiks prompt yang berulang. |
:yellow) varian tersebut selalu dihormati dan perutean tidak menimpanya. Dikonfigurasi per kunci di dasbor → API keys.Pemilihan provider secara eksplisit
Tambahkan alias provider setelah titik dua — alias ini dipatuhi terlepas dari strategi routing. Daftar lengkap alias dan contohnya — di bagian Models → Providers.
"model": "claude-opus-4.8" // auto — key strategy
"model": "claude-opus-4.8:yellow" // explicitly pin the :yellow channel
"model": "claude-opus-4.8:kiro-pool" // explicitly pin the :kiro-pool channelBatas key
Untuk setiap API key Anda dapat mengatur di dashboard:
| Parameter | Tipe | Deskripsi |
|---|---|---|
allowedModels | daftar model | Daftar putih model yang boleh dipanggil oleh key ini. Kosong — semua diizinkan. Permintaan untuk model di luar daftar akan mendapat 403. |
routingStrategy / cacheOnly | override | Strategi dan filter cache untuk kunci ini. |
limitRub | batas pengeluaran | Batas pengeluaran untuk kunci. |
allowedIps | Whitelist IP | Pembatasan IP (lihat bagian «Authentication»). |
Failover (hanya auto)
Dengan bare model gateway dapat beralih ke varian publik lain dari model yang sama jika varian saat ini mengembalikan 429, 5xx, atau 200 kosong tanpa konten. Batasan:
- Permintaan dengan gambar/PDF tidak dialihkan ke penyedia lain (kompatibilitas vision).
- Failover tidak beralih ke varian yang jauh lebih mahal (kecuali strategy=price).
- Ada batas atas jumlah percobaan per permintaan klien.
- Dengan pin (
:alias) failover antar-provider mati — Anda mendapat error dari rute yang dipilih.
Mencoba ulang dengan exponential backoff pada 429 dijelaskan di Errors and limits.
Rincian flight — route mana yang melayani permintaan
Untuk klien reveal/debug yang tepercaya, setelah permintaan selesai (termasuk auto) header tersedia yang menunjukkan varian public mana yang benar-benar dijalankan. Klien biasa tidak diberikan data ini.
Header respons untuk klien trusted reveal/debug (chat / messages / responses)
| Parameter | Tipe | Deskripsi |
|---|---|---|
x-getvibe-route | string | Alias rute publik: yellow, codex, claude-code, … |
x-getvibe-model | string | Nilai model untuk penyematan ulang: base atau base:alias (misalnya gpt-6.1-sol:yellow). Dengan penyematan eksplisit, nilainya sesuai dengan pilihan Anda. |
x-pv-generation-id | string | ID catatan riwayat (non-stream). Lihat Saldo dan riwayat. |
curl -sD - https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","messages":[{"role":"user","content":"ping"}],"max_tokens":8}' \
-o /dev/null | grep -i getvibe
# x-getvibe-route: yellow
# x-getvibe-model: gpt-6.1-sol:yellowRiwayat penggunaan
Di GET /v1/generations, GET /v1/usage dan dashboard, setiap record memiliki field berikut:
| Parameter | Tipe | Deskripsi |
|---|---|---|
model | string | Nama model dasar (tanpa akhiran internal). |
route | string | null | Alias publik dari rute yang menang. |
address_as | string | Nilai persis untuk field model saat melakukan re-pinning (seperti addressAs pada katalog). |
cost_detail | object | Bagaimana biaya dihitung: baris token dengan tarifnya per 1M (lines), biaya tambahan (adjustments) dan totalnya. Kanal marketplace menagih tingkat harga (anak tangga ladder) yang penjualnya memenuhi permintaan, jadi bila itu berbeda dari tarif daftar, rateBasis adalah "tier", lines ditampilkan pada tarif tier tersebut dan berjumlah sama dengan biaya, dan tier menyebutkan tarifnya. realisedRate {input, output} adalah harga per 1M yang sebenarnya ditagihkan untuk permintaan tersebut — temukan di price ladder model (/api/model-ladder) untuk melihat anak tangga mana yang memenuhinya; minimumCharge bernilai true (dan realisedRate null) bila permintaan ditagih berdasarkan minimum per permintaan. Kirim max_price untuk membatasi anak tangganya. |
model dan cost_usd tetap tersembunyi (kecuali klien dengan pengecualian reveal). Rincian flight hanya ada di header dan history, tanpa merusak SDK.Batasan
GetVibe tidak menyediakan daftar waterfall «mentah» yang menampilkan penyedia upstream di dalam body permintaan. Kendali dilakukan melalui :alias publik, strategi kunci, dan auto-failover di dalam katalog model. Tidak ada API «ignore providers» terpisah atau flag routing ZDR.