Thème
Langue

Routage transparent et ventilation du vol

Le routeur transparent de GetVibe : route explicite via :alias ou routage automatique selon la stratégie de la clé. Alias publics, basculement, en-têtes de révélation/débogage x-getvibe-route et champs route/address_as dans l’historique.

GetVibe est un routeur transparent : vous sélectionnez explicitement une variante publique via le suffixe :alias, ou vous laissez le nom du modèle sans suffixe ; la passerelle sélectionne alors la route en fonction de la stratégie de votre compte et de votre clé et, en cas d’échec, bascule vers une autre variante disponible. Seuls les identifiants de route publics sont utilisés dans les réponses et l’historique.

Deux modes : pin ou auto

ParamètreTypeDescription
Explicit pinmodel:alias or model:NLa requête passe toujours par la variante choisie. Le basculement entre variantes est désactivé : en cas de 429/5xx, l’erreur est renvoyée telle quelle (une nouvelle tentative sur la même variante est autorisée).
Auto (bare model)nom du modèle uniquementLa passerelle sélectionne la variante selon les paramètres du compte ou de la clé. En cas de 429/5xx ou de réponse 200 vide, elle essaie d’autres variantes du même modèle, en tenant compte des contraintes de coût et d’entrée.
"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)

Limites de prix : max_price et min_price

Chaque modèle est fourni par plusieurs canaux à des prix différents, comme une échelle. Ces deux paramètres du corps de la requête indiquent quels échelons de cette échelle peuvent vous servir. Tous deux sont exprimés en USD par million de tokens, avec la même unité et les mêmes chiffres que ceux affichés sur la page Models. Ils sont comparés à notre prix, c’est-à-dire ce qui vous est facturé, et jamais à un prix de gros que vous ne pouvez pas voir.

ParamètreTypeDescription
max_pricenombre ou objetPlafond. Un nombre encadre les DEUX volets ; un objet les encadre séparément : {"input": 0.5, "output": 2}. Un volet omis n’est pas plafonné. Inclusif : une limite égale à un tarif publié autorise ce canal.
min_pricenombre ou objetPlancher, même forme. Refuse les canaux dont le prix lui est INFÉRIEUR — pour les appelants qui préfèrent ne pas être servis par la remise la plus importante du catalogue. Il ne peut qu'augmenter le coût d'une requête, jamais le réduire.
{
  "model": "deepseek-v4-flash-0731",
  "messages": [{"role": "user", "content": "hi"}],
  "max_price": 0.02,
  "min_price": {"input": 0.001}
}

Les deux volets doivent être respectés, entrée et sortie — jamais une moyenne des deux. Un canal peu coûteux en entrée et cher en sortie ne respecte pas une limite exprimée par un seul nombre.

Un plafond permanent, défini une seule fois dans le cabinet

Un plafond n’a pas besoin d’être répété à chaque appel. Le tableau de bord en enregistre un par clé API et par modèle, ainsi qu’une valeur par défaut qui couvre chaque modèle pour lequel vous n’avez rien défini explicitement, et l’API le lit à chaque requête. Une requête qui contient max_price utilise cette valeur pour cet appel uniquement ; une requête qui n’en contient pas utilise votre plafond enregistré. Priorité, de la plus spécifique à la plus générale :

ParamètreTypeDescription
max_price in the requestpar appelRemplace le plafond enregistré uniquement pour cette requête — entièrement, et non fusionné étape par étape.
key + modelstoredPlafond de cette clé API pour ce modèle.
account + modelstoredPlafond de votre compte pour ce modèle, utilisé par les clés qui n’en définissent aucun.
key / account defaultstoredLe plafond applicable à tous les modèles qui n’en ont pas de propre.
Le plafond et le filtre de canaux sont deux contrôles distincts qui se combinent. L’ordre des canaux et les exclusions déterminent quels canaux peuvent vous servir ; le plafond détermine quel niveau de prix à l’intérieur de ces canaux peut traiter la requête. Définissez l’un, les deux ou aucun. Un filtre de canaux seul ne peut pas plafonner votre prix : un canal peut proposer le même modèle à plusieurs prix simultanément, si bien que l’exclusion de canaux ne limite jamais le montant finalement facturé par le moins cher.

Où consulter les prix que vous encadrez

GET /api/catalog publie un tableau channels pour chaque modèle : une entrée par canal sur lequel une requête peut aboutir, du moins cher au plus cher, chacune indiquant l’adresse avec laquelle vous pouvez le fixer, son prix inputUsd / outputUsd par million de tokens et s’il s’agit du canal par défaut. Ce sont les chiffres exacts auxquels max_price et min_price sont comparés, ainsi que les chiffres exacts qui vous sont facturés : une seule liste, et non trois.

curl -s https://getvibeapi.com/api/catalog   | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'

Ce qui vous est facturé

Vous êtes facturé pour le canal qui a effectivement traité la requête, augmenté de notre majoration fixe — et non pour le plafond que vous avez défini, sans jamais le dépasser. Si vous fixez un plafond de prix et que la requête est exécutée sur un niveau moins cher, vous payez le moins cher. L’échelle de la page du modèle affiche une fourchette, et le montant « à partir de » correspond au niveau le moins cher existant : il s’agit d’un prix réel qui peut vous être facturé, et non d’une promesse que cette requête sera exécutée à ce niveau. Définissez max_price lorsque vous avez besoin d’une limite supérieure garantie.

Lorsque rien ne convient

La requête est refusée : HTTP 422 avec "type": "price_bound_no_lane", indiquant les prix les plus bas et les plus élevés des canaux pour ce modèle ainsi que la liste complète des channels, afin que vous puissiez choisir une limite à partir des valeurs au lieu de la deviner. lowest_passing_usd_per_million est la limite minimale qui permet d’admettre un canal à cet instant : la propre paire d’un canal ; son envoi réussit donc (les deux branches cheapest peuvent provenir de canaux différents). Le même champ apparaît lorsque l’échange lui-même a refusé votre limite : il s’agit alors du niveau de prix suivant disposant encore d’une offre, et il n’est jamais inférieur à la limite que vous avez envoyée. Lorsque votre limite n’était pas le facteur limitant, mais que le plafond d’achat appliqué par nos soins au canal l’était, et que les offres situées en dessous étaient occupées ou épuisées, la réponse est à la place HTTP 503 "type": "no_seller_available" avec Retry-After et sans prix suggéré : augmenter max_price ne servirait à rien, mais réessayer dans un court instant pourrait fonctionner. Le niveau le moins cher ne contient souvent qu’une seule offre, déjà occupée ; pour obtenir des résultats fiables, définissez donc la limite au niveau ou au-dessus du priceTypical du modèle, là où se trouve la majorité de l’offre. Nous ne fournissons jamais discrètement un canal plus cher et nous ne remplaçons jamais le modèle par un autre. Une valeur mal formée, comme une chaîne, zéro, une valeur négative ou un champ inconnu, est 400 invalid_request_error et n’est jamais ignorée silencieusement.

{
  "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}
    ]
  }
}
Les limites de prix s’appliquent aussi bien à un modèle nu qu’à une épingle explicite. Pour une épingle qui se trouve elle-même en dehors de la limite, vous obtenez le même 422 mentionnant l’épingle ; l’épingle n’est jamais déplacée vers un autre canal pour vous.

Noms de pools que vous pouvez épingler

Les canaux desservis par un pool d’abonnement fournisseur peuvent être adressés par leur nom. Écrivez le nom après deux-points, exactement comme pour tout autre alias :

"model": "gpt-6.1-sol:codex"         // pin a subscription pool
"model": "claude-opus-5.5:claude-code"  // pin the Claude Code pool
Pools adressables
ParamètreTypeDescription
:codexpoolAdressez ce pool par son nom. Également accepté : :openai-codex.
:qwencloudpoolAdressez ce pool par son nom. Également accepté : :alibaba-qwencloud.
:zaipoolAdressez ce pool par son nom. Également accepté : :z-ai-glm-coding-plan.
:claude-codepoolAdressez ce pool par son nom.
:antigravitypoolAdressez ce pool par son nom.
:grokpoolAdressez ce pool par son nom.
:codebuddypoolAdressez ce pool par son nom.
:codebuddy-cnpoolAdressez ce pool par son nom.
:clinepasspoolAdressez ce pool par son nom.
:command-codepoolAdressez ce pool par son nom. Également accepté : :commandcode.
:opencodepoolAdressez ce pool par son nom. Également accepté : :opencode-go.
:mimopoolAdressez ce pool par son nom.
:kiro-poolpoolAdressez ce pool par son nom.
:meta-aipoolAdressez ce pool par son nom.
:minimax-cnpoolAdressez ce pool par son nom.
:qwencloud-alibaba-cnpoolAdressez ce pool par son nom.
:marketplacepoolAdressez ce pool par son nom. Également accepté : :bare-marketplace-alias.
:nouspoolAdressez ce pool par son nom.
Ces noms lisibles sont les seules graphies annoncées par ce déploiement. Une ancienne forme abrégée en lettres continue d’être résolue pendant la période de migration et est annoncée dans chaque réponse (x-pv-deprecated-alias / x-pv-use-instead), mais elle n’est jamais affichée ici et les nouvelles intégrations doivent utiliser le nom. Chaque pool constitue un canal avec sa propre grille tarifaire ; une ancienne graphie de tranche se terminant par un chiffre (:claude-code-2) continue d’être résolue vers ce pool.

Alias publics (:alias)

Le suffixe après les deux-points est un identifiant de route public, et non un nom fourni en amont. La liste complète pour un modèle spécifique se trouve dans le catalogue (Models, colonne « In API »). Principaux alias :

ParamètreTypeDescription
:yellowaliasUne variante publique proposée pour de nombreux modèles ; son prix figure dans le catalogue.
:codex / :claude-code / …aliasPools d’abonnements, répertoriés par nom dans « Noms des pools que vous pouvez épingler » ci-dessus.
:pixel / :flowaliasRoutes multimédias (images/vidéo), pas de chat.
Pour en savoir plus sur les variantes d’un même modèle, consultez la section Modèles → Fournisseurs. Si le suffixe n’est pas disponible pour un modèle, la requête renvoie 400.

Paramètres de clé

Pour les requêtes auto (modèle nu), les éléments suivants sont définis pour chaque clé API (tableau de bord → clés API) :

ParamètreTypeDescription
routingStrategystringpriority (par défaut) — l’ordre de providerPriority, sinon la première variante du catalogue ; price — la variante la moins chère pour nous ; latency — la plus rapide selon les mesures récentes ; default — strictement la première variante éligible.
providerPrioritylistPriorité des balises de fournisseurs internes (noms lisibles dans le tableau de bord). Utilisée avec strategy=priority.
disabledProviderslistExclure des fournisseurs du routage automatique. Un :alias explicite reste appelable si la variante existe.
cacheOnlybooleanUniquement les variantes prenant en charge prompt-cache : adaptées à un préfixe répété.
Les paramètres s’appliquent uniquement aux requêtes sans suffixe explicite. Un champ de clé vide signifie la valeur par défaut. Voir également allowedModels et les limites du tableau ci-dessous.

Stratégie de routage

ParamètreTypeDescription
priority (default)strategyLa route par défaut habituelle.
pricestrategyChoisissez la variante au prix le plus bas parmi celles disponibles pour le modèle.
latencystrategyChoisissez la variante la plus rapide selon les mesures récentes.
cacheOnlybooleanUniquement les variantes avec cache activé : adaptées à un préfixe de prompt répété.
La stratégie s’applique uniquement aux requêtes par défaut. Si vous définissez explicitement une variante avec un suffixe (par ex. :yellow) elle est toujours respectée et le routage ne la remplace pas. Configurée par clé dans tableau de bord → clés API.

Sélection explicite du fournisseur

Ajoutez un alias de fournisseur après deux-points : il est respecté quelle que soit la stratégie de routage. La liste complète des alias et des exemples se trouve dans la section 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

Limites principales

Pour chaque clé API, vous pouvez définir les éléments suivants dans le tableau de bord :

ParamètreTypeDescription
allowedModelsliste des modèlesListe blanche des modèles que cette clé peut appeler. Vide — tous sont autorisés. Une requête pour un modèle absent de la liste renvoie 403.
routingStrategy / cacheOnlyoverrideLa stratégie et le filtre de cache pour cette clé.
limitRublimite de dépensesLimite de dépenses pour la clé.
allowedIpsListe blanche d’adresses IPRestriction d’adresse IP (voir la section « Authentification »).
C’est pratique pour transmettre des clés aux équipes et aux intégrations : une clé uniquement pour les modèles économiques, une autre avec une limite de dépenses, une troisième avec sa propre stratégie. Tout est configuré dans le tableau de bord.

Basculement de secours (automatique uniquement)

Avec un modèle nu, la passerelle peut basculer vers une autre variante publique du même modèle si la variante actuelle a renvoyé 429, 5xx ou un 200 vide sans contenu. Contraintes :

  • Les requêtes contenant des images/PDF ne sont pas basculées vers un autre fournisseur (compatibilité vision).
  • Le basculement de secours ne passe pas à une variante nettement plus chère (sauf strategy=price).
  • Le nombre de tentatives par requête client est plafonné.
  • Avec pin (:alias), le basculement entre fournisseurs est désactivé — vous obtenez l’erreur de la route choisie.

La nouvelle tentative avec temporisation exponentielle sur 429 est décrite dans Erreurs et limites.

Détail du routage — quelle route a traité la requête

Pour les clients de confiance destinés à la révélation et au débogage, une fois la requête terminée (y compris en mode automatique), des en-têtes indiquent quelle variante publique a réellement été exécutée. Ces données ne sont pas transmises aux clients ordinaires.

En-têtes de réponse pour les clients de confiance chargés de la révélation et du débogage (chat / messages / responses)

ParamètreTypeDescription
x-getvibe-routestringL’alias de la route publique : yellow, codex, claude-code, …
x-getvibe-modelstringLa valeur de model pour réépingler : base ou base:alias (par exemple gpt-6.1-sol:yellow). Avec un épinglage explicite, elle correspond à votre choix.
x-pv-generation-idstringID de l’enregistrement d’historique (non-stream). Voir Solde et historique.
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

Historique de l’utilisation

Dans GET /v1/generations, GET /v1/usage et le tableau de bord, chaque enregistrement comporte les champs suivants :

ParamètreTypeDescription
modelstringLe nom de base du modèle (sans suffixes internes).
routestring | nullL’alias public :alias de la route gagnante.
address_asstringLa valeur exacte du champ model lors d’un nouveau pinning (comme addressAs dans le catalogue).
cost_detailobjectComment le montant a été calculé : lignes de tokens avec leur tarif par 1M (lignes), majorations (ajustements) et total. Un canal marketplace facture le niveau de prix (échelon) du vendeur qui a traité la requête ; lorsque celui-ci diffère du tarif affiché, rateBasis vaut "tier", les lignes sont affichées au tarif de ce niveau et leur somme correspond au montant facturé, et tier indique le tarif. realisedRate {input, output} correspond au prix par 1M effectivement facturé pour la requête ; consultez-le dans la grille tarifaire du modèle (/api/model-ladder) pour voir quel échelon a traité la requête ; minimumCharge vaut true (et realisedRate vaut null) lorsque la requête a été facturée au minimum par requête. Envoyez max_price pour plafonner l’échelon.
Dans le corps de la réponse des endpoints compatibles avec OpenAI, les marques en amont et les suffixes internes de model et cost_usd restent masqués (sauf pour les clients bénéficiant d’une exception de révélation). La ventilation des routes figure uniquement dans les en-têtes et l’historique, sans perturber les SDK.

Limitations

GetVibe ne fournit pas de liste « raw » des fournisseurs en amont dans le corps de la requête. Le contrôle s’effectue via :alias public, la stratégie de clé et l’auto-basculement au sein du catalogue de modèles. Il n’existe pas d’API distincte « ignore providers » ni d’indicateurs ZDR de routage.

Routage de GetVibe — :alias, auto-route, basculement automatique, ventilation par requête | GetVibe API