Tema
Bahasa

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

ParameterTipeDeskripsi
Explicit pinmodel:alias or model:NPermintaan 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 sajaGateway 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.

ParameterTipeDeskripsi
max_pricenumber atau objectBatas 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_pricenumber atau objectFloor, 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:

ParameterTipeDeskripsi
max_price in the requestper panggilanMenggantikan batas atas yang tersimpan hanya untuk permintaan ini — sepenuhnya, bukan digabungkan per bagian.
key + modelstoredBatas maksimum API key ini untuk model ini.
account + modelstoredBatas akun Anda untuk model ini, digunakan oleh key yang tidak menetapkan batas sendiri.
key / account defaultstoredBatas atas serbaguna untuk setiap model yang tidak memiliki batasnya sendiri.
Batas atas dan filter channel adalah dua kontrol yang berbeda dan keduanya saling melengkapi. Urutan channel dan pengecualian menentukan channel mana yang boleh melayani Anda; batas atas menentukan tingkat harga mana di dalamnya yang boleh mengisi permintaan. Tetapkan salah satu, keduanya, atau tidak sama sekali. Filter channel saja tidak bisa membatasi harga Anda: satu channel dapat menawarkan model yang sama pada banyak harga sekaligus, jadi mengecualikan channel tidak pernah membatasi berapa yang akhirnya ditagihkan oleh yang termurah.

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}
    ]
  }
}
Batas harga berlaku untuk model telanjang maupun pin eksplisit. Pada pin yang berada di luar batas, Anda mendapat 422 yang sama dengan yang menyebutkan pin tersebut — pin tidak pernah dipindahkan ke channel lain untuk Anda.

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
Pool yang dapat dialamatkan
ParameterTipeDeskripsi
:codexpoolAlamat pool ini berdasarkan nama. Juga diterima: :openai-codex.
:qwencloudpoolAlamat pool ini berdasarkan nama. Juga diterima: :alibaba-qwencloud.
:zaipoolAlamat pool ini berdasarkan nama. Juga diterima: :z-ai-glm-coding-plan.
:claude-codepoolAlamat pool ini berdasarkan nama.
:antigravitypoolAlamat pool ini berdasarkan nama.
:grokpoolAlamat pool ini berdasarkan nama.
:codebuddypoolAlamat pool ini berdasarkan nama.
:codebuddy-cnpoolAlamat pool ini berdasarkan nama.
:clinepasspoolAlamat pool ini berdasarkan nama.
:command-codepoolAlamat pool ini berdasarkan nama. Juga diterima: :commandcode.
:opencodepoolAlamat pool ini berdasarkan nama. Juga diterima: :opencode-go.
:mimopoolAlamat pool ini berdasarkan nama.
:kiro-poolpoolAlamat pool ini berdasarkan nama.
:meta-aipoolAlamat pool ini berdasarkan nama.
:minimax-cnpoolAlamat pool ini berdasarkan nama.
:qwencloud-alibaba-cnpoolAlamat pool ini berdasarkan nama.
:marketplacepoolAlamat pool ini berdasarkan nama. Juga diterima: :bare-marketplace-alias.
:nouspoolAlamat pool ini berdasarkan nama.
Nama-nama yang dapat dibaca ini adalah satu-satunya ejaan yang diiklankan oleh deployment ini. Bentuk huruf pendek lama masih dapat diresolusi selama masa migrasi dan diumumkan pada setiap respons (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:

ParameterTipeDeskripsi
:yellowaliasVarian publik yang ditawarkan untuk banyak model; harganya tercantum di katalog.
:codex / :claude-code / …aliasPool langganan, yang namanya tercantum di bagian “Nama pool yang dapat Anda sematkan” di atas.
:pixel / :flowaliasRute media (gambar/video), bukan chat.
Selengkapnya tentang varian suatu model — ada di bagian Model → Penyedia. Jika sufiks tidak tersedia untuk suatu model, permintaan akan mengembalikan 400.

Pengaturan kunci

Untuk permintaan auto (model tanpa varian), hal-hal berikut ditetapkan pada setiap kunci API (dasbor → API keys):

ParameterTipeDeskripsi
routingStrategystringpriority (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.
providerPrioritylistPrioritas tag penyedia internal (nama yang mudah dibaca di dasbor). Digunakan dengan strategy=priority.
disabledProviderslistKecualikan penyedia dari perutean otomatis. :alias eksplisit tetap dapat dipanggil jika variannya tersedia.
cacheOnlybooleanHanya varian dengan dukungan prompt-cache — cocok untuk prefiks yang berulang.
Pengaturan hanya berlaku untuk permintaan tanpa akhiran eksplisit. Kolom kunci yang kosong berarti nilai default. Lihat juga allowedModels dan batasan pada tabel di bawah.

Strategi routing

ParameterTipeDeskripsi
priority (default)strategyRute default yang biasa.
pricestrategyPilih varian dengan harga terendah di antara yang tersedia untuk model tersebut.
latencystrategyPilih varian tercepat berdasarkan pengukuran terbaru.
cacheOnlybooleanHanya varian yang mendukung cache — cocok untuk prefiks prompt yang berulang.
Strategi hanya berlaku untuk permintaan default. Jika Anda menetapkan varian secara eksplisit dengan akhiran (misalnya :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 channel

Batas key

Untuk setiap API key Anda dapat mengatur di dashboard:

ParameterTipeDeskripsi
allowedModelsdaftar modelDaftar putih model yang boleh dipanggil oleh key ini. Kosong — semua diizinkan. Permintaan untuk model di luar daftar akan mendapat 403.
routingStrategy / cacheOnlyoverrideStrategi dan filter cache untuk kunci ini.
limitRubbatas pengeluaranBatas pengeluaran untuk kunci.
allowedIpsWhitelist IPPembatasan IP (lihat bagian «Authentication»).
Ini berguna untuk menyerahkan key kepada tim dan integrasi: satu key — hanya model murah, key lain — dengan batas pengeluaran, key ketiga — dengan strateginya sendiri. Semua dikonfigurasi di dashboard.

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)

ParameterTipeDeskripsi
x-getvibe-routestringAlias rute publik: yellow, codex, claude-code, …
x-getvibe-modelstringNilai 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-idstringID 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:yellow

Riwayat penggunaan

Di GET /v1/generations, GET /v1/usage dan dashboard, setiap record memiliki field berikut:

ParameterTipeDeskripsi
modelstringNama model dasar (tanpa akhiran internal).
routestring | nullAlias publik dari rute yang menang.
address_asstringNilai persis untuk field model saat melakukan re-pinning (seperti addressAs pada katalog).
cost_detailobjectBagaimana 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.
Pada body respons endpoint yang kompatibel dengan OpenAI dari brand upstream, suffix internal di 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.

Routing GetVibe — :alias, auto-route, failover, rincian flight | GetVibe API