Design
Sprache

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

ParameterTypBeschreibung
Explicit pinmodel:alias or model:NDie 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 ModellnameDas 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.

ParameterTypBeschreibung
max_priceZahl oder ObjektObergrenze. 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_priceZahl oder ObjektUntergrenze, 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:

ParameterTypBeschreibung
max_price in the requestpro AufrufErsetzt die gespeicherte Obergrenze nur für diese Anfrage vollständig, nicht schrittweise zusammengeführt.
key + modelstoredDas Ausgabenlimit dieses API-Schlüssels für dieses Modell.
account + modelstoredIhre Kontingentobergrenze für dieses Modell, die von Schlüsseln verwendet wird, für die keine eigene Obergrenze festgelegt ist.
key / account defaultstoredDie allgemeine Obergrenze für jedes Modell ohne eigene Obergrenze.
Das Preislimit und der Kanalfilter sind zwei verschiedene Einstellungen, die gemeinsam wirken. Die Kanalreihenfolge und Ausschlüsse bestimmen, welche Kanäle Sie bedienen dürfen; das Preislimit bestimmt, welche Preisstufe innerhalb dieser Kanäle die Anfrage bedienen darf. Sie können eine, beide oder keine Einstellung festlegen. Ein Kanalfilter allein kann Ihren Preis nicht begrenzen: Ein Kanal kann dasselbe Modell gleichzeitig zu vielen Preisen anbieten, daher begrenzt das Ausschließen von Kanälen niemals den Betrag, den der günstigste verbleibende Kanal letztendlich berechnet.

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}
    ]
  }
}
Preisgrenzen gelten sowohl für ein reines Modell als auch für eine explizite Fixierung. Wenn eine Fixierung selbst außerhalb der Grenze liegt, erhalten Sie denselben 422-Fehler, in dem die Fixierung genannt wird – die Fixierung wird niemals für Sie in einen anderen Kanal verschoben.

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
Adressierbare Pools
ParameterTypBeschreibung
:codexpoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :openai-codex.
:qwencloudpoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :alibaba-qwencloud.
:zaipoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :z-ai-glm-coding-plan.
:claude-codepoolAdressieren Sie diesen Pool anhand seines Namens.
:antigravitypoolAdressieren Sie diesen Pool anhand seines Namens.
:grokpoolAdressieren Sie diesen Pool anhand seines Namens.
:codebuddypoolAdressieren Sie diesen Pool anhand seines Namens.
:codebuddy-cnpoolAdressieren Sie diesen Pool anhand seines Namens.
:clinepasspoolAdressieren Sie diesen Pool anhand seines Namens.
:command-codepoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :commandcode.
:opencodepoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :opencode-go.
:mimopoolAdressieren Sie diesen Pool anhand seines Namens.
:kiro-poolpoolAdressieren Sie diesen Pool anhand seines Namens.
:meta-aipoolAdressieren Sie diesen Pool anhand seines Namens.
:minimax-cnpoolAdressieren Sie diesen Pool anhand seines Namens.
:qwencloud-alibaba-cnpoolAdressieren Sie diesen Pool anhand seines Namens.
:marketplacepoolAdressieren Sie diesen Pool anhand seines Namens. Ebenfalls akzeptiert: :bare-marketplace-alias.
:nouspoolAdressieren Sie diesen Pool anhand seines Namens.
Diese lesbaren Namen sind die einzigen Schreibweisen, die diese Bereitstellung bekannt gibt. Eine ältere Kurzbuchstabenform wird während des Migrationsfensters weiterhin aufgelöst und in jeder Antwort (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:

ParameterTypBeschreibung
:yellowaliasEine öffentliche Variante, die für viele Modelle angeboten wird; ihr Preis steht im Katalog.
:codex / :claude-code / …aliasAbonnement-Pools, oben unter „Pool-Namen, die Sie fest zuweisen können“ namentlich aufgeführt.
:pixel / :flowaliasMedienrouten (Bilder/Video), nicht Chat.
Mehr zu den Varianten eines Modells finden Sie im Abschnitt Modelle → Anbieter. Wenn das Suffix für ein Modell nicht verfügbar ist, gibt die Anfrage 400 zurück.

Schlüsseleinstellungen

Für auto-Anfragen (Modellname ohne Suffix) werden die folgenden Einstellungen für jeden API-Schlüssel festgelegt (Dashboard → API-Schlüssel):

ParameterTypBeschreibung
routingStrategystringpriority (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.
providerPrioritylistPriorität der internen Anbieter-Tags (lesbare Namen im Dashboard). Wird mit strategy=priority verwendet.
disabledProviderslistSchließen Sie Anbieter vom automatischen Routing aus. Ein expliziter :alias bleibt aufrufbar, sofern die Variante existiert.
cacheOnlybooleanNur Varianten mit Unterstützung für prompt-cache — geeignet für einen sich wiederholenden Präfix.
Die Einstellungen gelten nur für Anfragen ohne explizites Suffix. Ein leeres Schlüsselfeld bedeutet, dass der Standardwert verwendet wird. Siehe auch allowedModels und die Limits in der folgenden Tabelle.

Routing-Strategie

ParameterTypBeschreibung
priority (default)strategyDie übliche Standardroute.
pricestrategyWählen Sie unter den für das Modell verfügbaren Varianten die Variante mit dem niedrigsten Preis aus.
latencystrategyWählen Sie anhand der aktuellen Messwerte die schnellste Variante aus.
cacheOnlybooleanNur cache-aktivierte Varianten — geeignet für einen sich wiederholenden Prompt-Präfix.
Die Strategie gilt nur für Standardanfragen. Wenn Sie eine Variante explizit mit einem Suffix festlegen (z. B. :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 channel

Wichtige Limits

Für jeden API-Schlüssel können Sie im Dashboard Folgendes festlegen:

ParameterTypBeschreibung
allowedModelsModelllisteWhitelist 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 / cacheOnlyoverrideDie Strategie und der Cache-Filter für diesen Schlüssel.
limitRubAusgabenlimitAusgabenlimit für den Schlüssel.
allowedIpsIP-WhitelistIP-Beschränkung (siehe Abschnitt «Authentication»).
Dies ist praktisch, wenn Sie Schlüssel an Teams und Integrationen übergeben: ein Schlüssel — nur günstige Modelle, ein anderer — mit einem Ausgabenlimit, ein dritter — mit seiner eigenen Strategie. Alles wird im Dashboard konfiguriert.

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)

ParameterTypBeschreibung
x-getvibe-routestringDer öffentliche Routenalias: yellow, codex, claude-code, …
x-getvibe-modelstringDer 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-idstringID 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:yellow

Nutzungsverlauf

In GET /v1/generations, GET /v1/usage und im Dashboard enthält jeder Datensatz die Felder:

ParameterTypBeschreibung
modelstringDer Basisname des Modells (ohne interne Suffixe).
routestring | nullDer öffentliche :alias der erfolgreichen Route.
address_asstringDer exakte Wert für das Modellfeld beim erneuten Pinnen (wie addressAs im Katalog).
cost_detailobjectSo 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.
Im Antworttext der OpenAI-kompatiblen Endpunkte bleiben interne Suffixe vorgelagerter Marken in 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.

GetVibe-Routing – :alias, automatische Route, Failover, Flugaufschlüsselung | GetVibe API