Transparentes Routing und Aufschlüsselung der Ausführung
Der transparente GetVibe-Router: explizite Route über :alias oder automatisches Routing anhand der Schlüsselstrategie. Öffentliche Aliase, Failover, der Offenlegungs-/Debug-Header x-getvibe-route und die Felder route/address_as im Verlauf.
GetVibe ist ein transparenter Router: Sie wählen entweder explizit eine öffentliche Variante über das Suffix :alias aus oder lassen den Modellnamen ohne Suffix – dann wählt das Gateway die Route gemäß Ihrer Konto-/Schlüsselstrategie und wechselt bei Fehlern zu einer anderen verfügbaren Variante. In Antworten und im Verlauf werden ausschließlich öffentliche Routenbezeichner verwendet.
Zwei Modi: pin oder auto
| Parameter | Typ | Beschreibung |
|---|---|---|
Explicit pin | model:alias or model:N | Die Anfrage läuft immer über die ausgewählte Variante. Ein Failover zwischen Varianten ist deaktiviert: Bei 429/5xx wird der Fehler unverändert zurückgegeben (ein erneuter Versuch mit derselben Variante ist zulässig). |
Auto (bare model) | nur der Modellname | Das Gateway wählt die Variante anhand der Konto- oder Schlüsseleinstellungen aus. Bei 429/5xx und einer leeren 200-Antwort versucht es andere Varianten desselben Modells, unter Berücksichtigung von Kosten- und Eingabebeschränkungen. |
"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)Preisgrenzen: max_price und min_price
Jedes Modell wird über mehrere Kanäle zu unterschiedlichen Preisen bereitgestellt, also über eine Preisstaffel. Diese beiden Request-Body-Parameter bestimmen, welche Stufen dieser Staffel Sie bedienen dürfen. Beide werden in USD pro 1M Tokens angegeben, also in derselben Einheit und mit denselben Zahlen, die auf der Seite Models angezeigt werden. Sie werden mit unserem Preis verglichen, also mit dem Betrag, der Ihnen berechnet wird, niemals mit einem für Sie nicht sichtbaren Großhandelspreis.
| Parameter | Typ | Beschreibung |
|---|---|---|
max_price | Zahl oder Objekt | Obergrenze. Eine Zahl begrenzt BEIDE Teile; ein Objekt begrenzt sie separat: {"input": 0.5, "output": 2}. Ein ausgelassener Teil ist unbegrenzt. Einschließlich: Eine Grenze, die einem veröffentlichten Preis entspricht, lässt diesen Kanal zu. |
min_price | Zahl oder Objekt | Untergrenze, gleiche Form. Lehnt Kanäle ab, deren Preis DARUNTER liegt — für Aufrufer, die lieber nicht über den höchsten Rabatt im Angebot bedient werden möchten. Sie kann eine Anfrage nur teurer machen, niemals günstiger. |
{
"model": "deepseek-v4-flash-0731",
"messages": [{"role": "user", "content": "hi"}],
"max_price": 0.02,
"min_price": {"input": 0.001}
}Beide Seiten müssen passen, Eingabe und Ausgabe – niemals ein Durchschnitt aus beiden. Ein Kanal, der bei der Eingabe günstig und bei der Ausgabe teuer ist, erfüllt keine einheitliche Begrenzung mit einer einzigen Zahl.
Eine dauerhaft geltende Obergrenze, die einmal im Cabinet festgelegt wird
Ein Preislimit muss nicht bei jedem Aufruf erneut angegeben werden. Das Dashboard speichert ein Limit pro API-Schlüssel und pro Modell sowie einen Standardwert, der für jedes Modell gilt, für das Sie kein eigenes Limit festgelegt haben, und die API liest dieses Limit bei jeder Anfrage. Eine Anfrage mit max_price verwendet stattdessen diesen Wert für genau diesen Aufruf; eine Anfrage ohne diesen Parameter verwendet Ihr gespeichertes Limit. Priorität, vom spezifischsten zum allgemeinsten:
| Parameter | Typ | Beschreibung |
|---|---|---|
max_price in the request | pro Aufruf | Ersetzt die gespeicherte Obergrenze nur für diese Anfrage vollständig, nicht schrittweise zusammengeführt. |
key + model | stored | Das Ausgabenlimit dieses API-Schlüssels für dieses Modell. |
account + model | stored | Ihre Kontingentobergrenze für dieses Modell, die von Schlüsseln verwendet wird, für die keine eigene Obergrenze festgelegt ist. |
key / account default | stored | Die allgemeine Obergrenze für jedes Modell ohne eigene Obergrenze. |
Wo Sie die Preise lesen, die Sie begrenzen
GET /api/catalog veröffentlicht für jedes Modell ein channels-Array: einen Eintrag pro Kanal, auf dem eine Anfrage landen kann, nach dem Preis aufsteigend sortiert, jeweils mit der Adresse, über die Sie ihn fest angeben können, seinem inputUsd-/outputUsd-Preis pro 1M Tokens und der Angabe, ob er der Standard ist. Das sind genau die Zahlen, mit denen max_price und min_price verglichen werden, und genau die Zahlen, die Ihnen berechnet werden — eine Liste, nicht drei.
curl -s https://getvibeapi.com/api/catalog | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'Was Ihnen in Rechnung gestellt wird
Ihnen wird der Kanal berechnet, der die Anfrage tatsächlich verarbeitet hat, zuzüglich unseres festen Aufschlags — nicht die von Ihnen festgelegte Obergrenze und niemals mehr als diese. Wenn Sie einen Preis begrenzen und die Anfrage auf einer günstigeren Stufe verarbeitet wird, zahlen Sie den günstigeren Preis. Die Staffelung auf der Modellseite zeigt eine Spanne, und der „ab“-Wert ist die günstigste vorhandene Stufe — es handelt sich um einen tatsächlichen Preis, der Ihnen berechnet werden könnte, nicht um ein Versprechen, dass diese Anfrage dort landet. Setzen Sie max_price, wenn Sie eine garantierte Obergrenze benötigen.
Wenn nichts passt
Die Anfrage wird abgelehnt: HTTP 422 mit "type": "price_bound_no_lane", wobei die günstigsten und teuersten Kanalpreise für dieses Modell und die vollständige Liste channels angegeben werden, damit Sie anhand der Zahlen eine Grenze auswählen können, statt eine zu schätzen. lowest_passing_usd_per_million ist die kleinste Grenze, die derzeit einen Kanal zulässt — das eigene Preispaar eines Kanals, sodass die Übermittlung erfolgreich ist (die beiden cheapest-Segmente können aus unterschiedlichen Kanälen stammen). Dasselbe Feld erscheint, wenn der Austausch selbst Ihre Grenze abgelehnt hat: Dann handelt es sich um die nächste Preisstufe, die noch verfügbare Kapazität hat, und sie ist niemals niedriger als die von Ihnen gesendete Grenze. Wenn Ihre Grenze nicht das Limit war — die eigene Einkaufsobergrenze für den Kanal war es, und die Angebote darunter waren ausgelastet oder erschöpft — lautet die Antwort stattdessen HTTP 503 "type": "no_seller_available" mit Retry-After und ohne Preisvorschlag: Eine Erhöhung von max_price würde nicht helfen, ein erneuter Versuch in Kürze könnte jedoch erfolgreich sein. Die günstigste Stufe enthält oft ein einzelnes ausgelastetes Angebot. Für zuverlässige Zuweisungen sollten Sie die Grenze daher auf oder über dem priceTypical des Modells festlegen, wo sich der Großteil des Angebots befindet. Wir bedienen niemals unbemerkt einen teureren Kanal und ersetzen niemals ein anderes Modell. Ein fehlerhafter Wert — eine Zeichenfolge, null, eine negative Zahl oder ein unbekanntes Feld — ist 400 invalid_request_error und wird niemals stillschweigend ignoriert.
{
"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}
]
}
}Pool-Namen, die Sie fixieren können
Kanäle, die aus einem Anbieter-Abonnementpool bereitgestellt werden, sind über ihren Namen adressierbar. Schreiben Sie den Namen nach einem Doppelpunkt, genau wie jeden anderen Alias:
"model": "gpt-6.1-sol:codex" // pin a subscription pool
"model": "claude-opus-5.5:claude-code" // pin the Claude Code pool| Parameter | Typ | Beschreibung |
|---|---|---|
:codex | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :openai-codex. |
:qwencloud | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :alibaba-qwencloud. |
:zai | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :z-ai-glm-coding-plan. |
:claude-code | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:antigravity | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:grok | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:codebuddy | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:codebuddy-cn | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:clinepass | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:command-code | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :commandcode. |
:opencode | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :opencode-go. |
:mimo | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:kiro-pool | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:meta-ai | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:minimax-cn | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:qwencloud-alibaba-cn | pool | Adressieren Sie diesen Pool anhand seines Namens. |
:marketplace | pool | Adressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :bare-marketplace-alias. |
:nous | pool | Adressieren Sie diesen Pool anhand seines Namens. |
x-pv-deprecated-alias / x-pv-use-instead) angekündigt, hier jedoch nie angezeigt. Neue Integrationen sollten den Namen verwenden. Jeder Pool ist ein Kanal mit seiner eigenen Preistabelle; eine ältere Band-Schreibweise, die mit einer Ziffer endet (:claude-code-2), wird weiterhin diesem Pool zugeordnet.Öffentliche Aliase (:alias)
Das Suffix nach dem Doppelpunkt ist eine öffentliche Routenkennung, kein Upstream-Name. Die vollständige Liste für ein bestimmtes Modell finden Sie im Katalog (Models, Spalte «In API»). Wichtige Aliase:
| Parameter | Typ | Beschreibung |
|---|---|---|
:yellow | alias | Eine öffentliche Variante, die für viele Modelle angeboten wird; ihr Preis steht im Katalog. |
:codex / :claude-code / … | alias | Abonnement-Pools, oben unter „Pool-Namen, die Sie fest zuweisen können“ namentlich aufgeführt. |
:pixel / :flow | alias | Medienrouten (Bilder/Video), nicht Chat. |
Schlüsseleinstellungen
Für auto-Anfragen (Modellname ohne Suffix) werden die folgenden Einstellungen für jeden API-Schlüssel festgelegt (Dashboard → API-Schlüssel):
| Parameter | Typ | Beschreibung |
|---|---|---|
routingStrategy | string | priority (Standard) – die Reihenfolge von providerPriority, andernfalls die erste Variante im Katalog; price – die für uns günstigste Variante; latency – die schnellste gemäß den letzten Messungen; default – strikt die erste geeignete Variante. |
providerPriority | list | Priorität der internen Anbieter-Tags (lesbare Namen im Dashboard). Wird mit strategy=priority verwendet. |
disabledProviders | list | Schließen Sie Anbieter vom automatischen Routing aus. Ein expliziter :alias bleibt aufrufbar, sofern die Variante existiert. |
cacheOnly | boolean | Nur Varianten mit Unterstützung für prompt-cache — geeignet für einen sich wiederholenden Präfix. |
allowedModels und die Limits in der folgenden Tabelle.Routing-Strategie
| Parameter | Typ | Beschreibung |
|---|---|---|
priority (default) | strategy | Die übliche Standardroute. |
price | strategy | Wählen Sie unter den für das Modell verfügbaren Varianten die Variante mit dem niedrigsten Preis aus. |
latency | strategy | Wählen Sie anhand der aktuellen Messwerte die schnellste Variante aus. |
cacheOnly | boolean | Nur cache-aktivierte Varianten — geeignet für einen sich wiederholenden Prompt-Präfix. |
:yellow), wird diese immer berücksichtigt und nicht durch das Routing überschrieben. Die Konfiguration erfolgt pro Schlüssel unter Dashboard → API-Schlüssel.Explizite Anbieterauswahl
Fügen Sie nach einem Doppelpunkt einen Anbieter-Alias hinzu — er wird unabhängig von der Routing-Strategie berücksichtigt. Die vollständige Liste der Aliase und Beispiele finden Sie im Abschnitt 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 channelWichtige Limits
Für jeden API-Schlüssel können Sie im Dashboard Folgendes festlegen:
| Parameter | Typ | Beschreibung |
|---|---|---|
allowedModels | Modellliste | Whitelist der Modelle, die dieser Schlüssel aufrufen darf. Leer — alle sind zulässig. Eine Anfrage für ein Modell außerhalb der Liste erhält 403. |
routingStrategy / cacheOnly | override | Die Strategie und der Cache-Filter für diesen Schlüssel. |
limitRub | Ausgabenlimit | Ausgabenlimit für den Schlüssel. |
allowedIps | IP-Whitelist | IP-Beschränkung (siehe Abschnitt «Authentication»). |
Failover (nur automatisch)
Bei einem reinen Modellnamen kann das Gateway zu einer anderen öffentlichen Variante desselben Modells wechseln, wenn die aktuelle Variante 429, 5xx oder ein leeres 200 ohne Inhalt zurückgegeben hat. Einschränkungen:
- Anfragen mit Bildern/PDF werden nicht zu einem anderen Anbieter umgeschaltet (Kompatibilität mit Vision).
- Das Failover wechselt nicht zu einer deutlich teureren Variante (außer strategy=price).
- Die Anzahl der Versuche pro Clientanfrage ist nach oben begrenzt.
- Mit pin (
:alias) ist der anbieterübergreifende Failover-Mechanismus deaktiviert — Sie erhalten den Fehler der ausgewählten Route.
Das erneute Senden mit exponentiellem Backoff bei 429 wird unter Fehler und Limits beschrieben.
Flugaufschlüsselung — welche Route die Anfrage verarbeitet hat
Bei vertrauenswürdigen Clients für die Aufdeckung/Fehlerdiagnose sind nach Abschluss der Anfrage (einschließlich auto) Header verfügbar, die zeigen, welche öffentliche Variante tatsächlich ausgeführt wurde. Normalen Clients werden diese Daten nicht bereitgestellt.
Antwort-Header für vertrauenswürdige Reveal-/Debug-Clients (chat / messages / responses)
| Parameter | Typ | Beschreibung |
|---|---|---|
x-getvibe-route | string | Der öffentliche Routenalias: yellow, codex, claude-code, … |
x-getvibe-model | string | Der model-Wert für eine erneute feste Zuweisung: base oder base:alias (z. B. gpt-6.1-sol:yellow). Bei einer expliziten festen Zuweisung entspricht er Ihrer Auswahl. |
x-pv-generation-id | string | ID des Verlaufsdatensatzes (nicht als Stream). Siehe Guthaben und Verlauf. |
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:yellowNutzungsverlauf
In GET /v1/generations, GET /v1/usage und im Dashboard enthält jeder Datensatz die Felder:
| Parameter | Typ | Beschreibung |
|---|---|---|
model | string | Der Basisname des Modells (ohne interne Suffixe). |
route | string | null | Der öffentliche :alias der erfolgreichen Route. |
address_as | string | Der exakte Wert für das Modellfeld beim erneuten Pinnen (wie addressAs im Katalog). |
cost_detail | object | So wurde die Gebühr berechnet: Tokenzeilen mit ihrem Tarif pro 1M (lines), Aufschläge (adjustments) und die Gesamtsumme. Ein Marketplace-Kanal berechnet die Preisstufe (Leiterstufe), deren Anbieter die Anfrage ausgeführt hat. Wenn diese vom Listentarif abweicht, ist rateBasis "tier", die lines werden zum Tarif dieser Stufe angezeigt und ergeben zusammen die Gebühr, und tier bezeichnet den Tarif. realisedRate {input, output} ist der Preis pro 1M, zu dem die Anfrage tatsächlich abgerechnet wurde — finden Sie ihn in der Preisliste des Modells (/api/model-ladder), um zu sehen, welche Stufe die Anfrage ausgeführt hat; minimumCharge ist true (und realisedRate null), wenn die Anfrage stattdessen mit dem Mindestpreis pro Anfrage abgerechnet wurde. Senden Sie max_price, um die Stufe zu begrenzen. |
model und cost_usd verborgen (außer bei Clients mit einer Ausnahme zum Anzeigen). Die Aufschlüsselung der Flüge ist nur in Headern und im Verlauf enthalten, ohne SDKs zu beeinträchtigen.Einschränkungen
GetVibe stellt keine «rohe» Auflistung der Weiterleitungsstrecke bereit, in der Upstream-Anbieter im Request Body aufgeführt werden. Die Steuerung erfolgt über den öffentlichen :alias, die Schlüsselstrategie und das automatische Failover innerhalb des Modellkatalogs. Es gibt keine separate API zum «Ignorieren von Anbietern» und keine Routing-ZDR-Flags.