Tema
Idioma

Roteamento transparente e detalhamento da execução

O roteador transparente da GetVibe: rota explícita via :alias ou roteamento automático pela estratégia da chave. Aliases públicos, failover, cabeçalhos de exibição/depuração x-getvibe-route e campos route/address_as no histórico.

A GetVibe é um roteador transparente: você escolhe explicitamente uma variante pública por meio do sufixo :alias, ou deixa o nome do modelo sem sufixo; nesse caso, o gateway escolhe a rota de acordo com a estratégia da sua conta/chave e, em caso de falhas, muda para outra variante disponível. Somente identificadores de rota públicos são usados nas respostas e no histórico.

Dois modos: pin ou auto

ParâmetroTipoDescrição
Explicit pinmodel:alias or model:NA solicitação sempre passa pela variante escolhida. O failover entre variantes está desativado: em caso de 429/5xx, o erro é retornado como está (é permitido repetir a tentativa na mesma variante).
Auto (bare model)apenas o nome do modeloO gateway escolhe a variante de acordo com as configurações da conta ou da chave. Em 429/5xx e em respostas 200 vazias, ele tenta outras variantes do mesmo modelo, respeitando as restrições de custo e entrada.
"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 preço: max_price e min_price

Cada modelo é fornecido por vários canais com preços diferentes, formando uma escada. Esses dois parâmetros do corpo da solicitação informam quais degraus dessa escada podem atender você. Ambos são USD por 1M de tokens, a mesma unidade e os mesmos números exibidos na página Models. Eles são comparados com o preço que cobramos de você, nunca com um valor de atacado que você não pode ver.

ParâmetroTipoDescrição
max_pricenúmero ou objetoLimite máximo. Um número limita AMBAS as etapas; um objeto as limita separadamente: {"input": 0.5, "output": 2}. Uma etapa omitida não tem limite. Inclusivo: um limite igual a um preço publicado permite esse canal.
min_pricenúmero ou objetoPiso, mesma forma. Recusa canais com preço ABAIXO dele — para quem prefere não ser atendido pelo maior desconto disponível. Ele só pode tornar uma solicitação mais cara, nunca mais barata.
{
  "model": "deepseek-v4-flash-0731",
  "messages": [{"role": "user", "content": "hi"}],
  "max_price": 0.02,
  "min_price": {"input": 0.001}
}

As duas partes precisam se encaixar, entrada e saída — nunca uma média entre as duas. Um canal barato na entrada e caro na saída não atende a um limite de valor único.

Um limite permanente, definido uma vez no painel

Um teto não precisa ser repetido em todas as chamadas. O dashboard armazena um por chave de API e por modelo, além de um padrão que abrange todos os modelos para os quais você não definiu um valor explicitamente, e a API o lê em todas as solicitações. Uma solicitação que inclui max_price usa esse valor em vez disso apenas nessa chamada; uma solicitação que não inclui nenhum valor usa o teto armazenado. Precedência, da mais específica para a menos específica:

ParâmetroTipoDescrição
max_price in the requestpor chamadaSubstitui o limite máximo armazenado somente para esta solicitação — integralmente, sem mesclá-lo etapa por etapa.
key + modelstoredO limite máximo desta chave de API para este modelo.
account + modelstoredO teto da sua conta para este modelo, usado pelas chaves que não definem nenhum.
key / account defaultstoredO teto geral para todos os modelos que não têm um teto próprio.
O teto e o filtro de canais são dois controles diferentes e são combinados. A ordem e as exclusões de canais decidem quais canais podem atender você; o teto decide qual faixa de preço dentro deles pode preencher a solicitação. Defina um, ambos ou nenhum. Um filtro de canais sozinho não pode limitar seu preço: um canal pode oferecer o mesmo modelo a vários preços ao mesmo tempo, portanto excluir canais nunca limita o valor que o mais barato acabará cobrando.

Onde ler os preços que você está delimitando

GET /api/catalog publica um array channels para cada modelo: uma entrada por canal em que uma solicitação pode ser processada, do mais barato ao mais caro, cada uma com o endereço pelo qual você pode fixá-la, seu preço de inputUsd / outputUsd por 1M de tokens e se é o padrão. Esses são os números exatos contra os quais max_price e min_price são comparados e os números exatos pelos quais você é cobrado — uma lista, não três.

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

O que é cobrado de você

Você é cobrado pelo canal que realmente atendeu à solicitação, mais nossa margem fixa — não pelo teto que você definiu, e nunca mais do que ele. Se você limitar a um preço e a solicitação for atendida em um nível mais barato, pagará o preço mais barato. A escala na página do modelo mostra uma faixa, e o valor “a partir de” é o nível mais barato existente — é um preço real que poderia ser cobrado de você, não uma promessa de que esta solicitação chegará a ele. Defina max_price quando precisar de um limite superior garantido.

Quando nada se encaixa

A solicitação é recusada: HTTP 422 com "type": "price_bound_no_lane", citando os preços mais baixo e mais alto dos canais para esse modelo e a lista completa de channels, para que você possa escolher um limite com base nos números em vez de tentar adivinhar um. lowest_passing_usd_per_million é o menor limite que admite um canal neste momento — o próprio par de um canal; portanto, enviá-lo funciona (as duas etapas cheapest podem vir de canais diferentes). O mesmo campo aparece quando a própria exchange recusou seu limite: nesse caso, ele é o próximo nível de preço que ainda tem oferta e nunca é inferior ao limite enviado. Quando seu limite não era o fator limitante — o nosso próprio teto de compra para o canal era, e as ofertas abaixo dele estavam ocupadas ou esgotadas — a resposta é HTTP 503 "type": "no_seller_available" com Retry-After e sem preço sugerido: aumentar max_price não ajudaria; tentar novamente em breve talvez ajude. O degrau mais barato geralmente contém uma única oferta que está ocupada; portanto, para preenchimentos confiáveis, defina o limite no nível ou acima do priceTypical do modelo, onde está a maior parte da oferta. Nunca fornecemos silenciosamente um canal mais caro e nunca substituímos outro modelo. Um valor malformado — uma string, zero, um número negativo ou um campo desconhecido — é 400 invalid_request_error, nunca ignorado silenciosamente.

{
  "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}
    ]
  }
}
Os limites de preço se aplicam tanto a um modelo simples quanto a um pin explícito. Em um pin que esteja fora do limite, você recebe o mesmo 422 indicando o pin — o pin nunca é movido para outro canal por você.

Nomes de pool que você pode fixar

Os canais atendidos por um pool de assinatura do fornecedor podem ser endereçados pelo nome. Escreva o nome depois de dois-pontos, exatamente como qualquer outro alias:

"model": "gpt-6.1-sol:codex"         // pin a subscription pool
"model": "claude-opus-5.5:claude-code"  // pin the Claude Code pool
Pools endereçáveis
ParâmetroTipoDescrição
:codexpoolAcesse este pool pelo nome. Também aceito: :openai-codex.
:qwencloudpoolAcesse este pool pelo nome. Também aceito: :alibaba-qwencloud.
:zaipoolAcesse este pool pelo nome. Também aceito: :z-ai-glm-coding-plan.
:claude-codepoolAcesse este pool pelo nome.
:antigravitypoolAcesse este pool pelo nome.
:grokpoolAcesse este pool pelo nome.
:codebuddypoolAcesse este pool pelo nome.
:codebuddy-cnpoolAcesse este pool pelo nome.
:clinepasspoolAcesse este pool pelo nome.
:command-codepoolAcesse este pool pelo nome. Também aceito: :commandcode.
:opencodepoolAcesse este pool pelo nome. Também aceito: :opencode-go.
:mimopoolAcesse este pool pelo nome.
:kiro-poolpoolAcesse este pool pelo nome.
:meta-aipoolAcesse este pool pelo nome.
:minimax-cnpoolAcesse este pool pelo nome.
:qwencloud-alibaba-cnpoolAcesse este pool pelo nome.
:marketplacepoolAcesse este pool pelo nome. Também aceito: :bare-marketplace-alias.
:nouspoolAcesse este pool pelo nome.
Estes nomes legíveis são as únicas grafias anunciadas por esta implantação. Uma forma antiga e curta com letras ainda é resolvida durante a janela de migração e anunciada em cada resposta (x-pv-deprecated-alias / x-pv-use-instead), mas nunca é exibida aqui, e as novas integrações devem usar o nome. Cada pool é um canal com sua própria faixa de preços; uma grafia antiga da faixa terminada em um dígito (:claude-code-2) ainda é resolvida para esse pool.

Aliases públicos (:alias)

O sufixo após os dois-pontos é um identificador de rota público, não um nome upstream. A lista completa para um modelo específico está no catálogo (Models, na coluna «In API»). Principais aliases:

ParâmetroTipoDescrição
:yellowaliasUma variante pública oferecida para muitos modelos; o preço está no catálogo.
:codex / :claude-code / …aliasPools de assinatura, listados por nome em “Nomes de pools que você pode fixar” acima.
:pixel / :flowaliasRotas de mídia (imagens/vídeo), não chat.
Saiba mais sobre as variantes de um modelo na seção Modelos → Provedores. Se o sufixo não estiver disponível para um modelo, a solicitação retornará 400.

Configurações da chave

Para solicitações auto (modelo sem especificação), os itens a seguir são definidos em cada chave de API (dashboard → API keys):

ParâmetroTipoDescrição
routingStrategystringpriority (padrão) — a ordem de providerPriority; caso contrário, a primeira variante no catálogo; price — a variante mais barata para nós; latency — a mais rápida segundo medições recentes; default — rigorosamente a primeira variante elegível.
providerPrioritylistPrioridade das tags internas dos provedores (nomes legíveis exibidos no dashboard). Usada com strategy=priority.
disabledProviderslistExclua provedores do roteamento automático. Um :alias explícito ainda pode ser chamado se a variante existir.
cacheOnlybooleanSomente variantes com suporte a prompt-cache — ideais para um prefixo repetido.
As configurações se aplicam apenas a solicitações sem um sufixo explícito. Um campo de chave vazio significa o padrão. Consulte também allowedModels e os limites na tabela abaixo.

Estratégia de roteamento

ParâmetroTipoDescrição
priority (default)strategyA rota padrão usual.
pricestrategyEscolha a variante com o menor preço entre as disponíveis para o modelo.
latencystrategyEscolha a variante mais rápida com base nas medições recentes.
cacheOnlybooleanSomente variantes com cache ativado — ideais para um prefixo de prompt repetido.
A estratégia se aplica apenas a solicitações padrão. Se você definir explicitamente uma variante com um sufixo (por exemplo, :yellow), ela sempre será respeitada, e o roteamento não a substituirá. Configurada por chave em dashboard → API keys.

Seleção explícita de provedor

Adicione um alias de fornecedor após dois-pontos — ele será respeitado independentemente da estratégia de roteamento. A lista completa de aliases e exemplos está na seção 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 principais

Para cada chave de API, você pode definir no dashboard:

ParâmetroTipoDescrição
allowedModelslista de modelosLista de permissões de modelos que esta chave pode chamar. Vazia — todos são permitidos. Uma solicitação para um modelo fora da lista recebe 403.
routingStrategy / cacheOnlyoverrideA estratégia e o filtro de cache desta chave.
limitRublimite de gastosLimite de gastos da chave.
allowedIpsLista branca de IPRestrição de IP (consulte a seção «Autenticação»).
Isso é útil para fornecer chaves a equipes e integrações: uma chave — apenas modelos baratos; outra — com um limite de gastos; uma terceira — com sua própria estratégia. Tudo configurado no dashboard.

Failover (somente automático)

Com um modelo simples, o gateway pode mudar para outra variante pública do mesmo modelo se a atual retornar 429, 5xx ou um 200 vazio sem conteúdo. Restrições:

  • Solicitações com imagens/PDF não são direcionadas a outro provedor (compatibilidade com visão).
  • O failover não usa uma variante significativamente mais cara (exceto strategy=price).
  • Há um limite superior para o número de tentativas por solicitação do cliente.
  • Com pin (:alias), o failover entre fornecedores fica desativado — você recebe o erro da rota escolhida.

A tentativa novamente com espera exponencial em 429 é descrita em Erros e limites.

Detalhamento do voo — qual rota atendeu à solicitação

Para clientes confiáveis de reveal/debug, após a conclusão da solicitação (incluindo auto), os cabeçalhos ficam disponíveis e mostram qual variante pública foi realmente executada. Clientes comuns não recebem esses dados.

Cabeçalhos de resposta para clientes confiáveis de reveal/debug (chat / messages / responses)

ParâmetroTipoDescrição
x-getvibe-routestringO alias da rota pública: yellow, codex, claude-code, …
x-getvibe-modelstringO valor de model para refixar: base ou base:alias (por exemplo, gpt-6.1-sol:yellow). Com uma fixação explícita, ele corresponde à sua escolha.
x-pv-generation-idstringID do registro do histórico (sem stream). Consulte Saldo e histórico.
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

Histórico de uso

Em GET /v1/generations, GET /v1/usage e no dashboard, cada registro tem os campos:

ParâmetroTipoDescrição
modelstringO nome base do modelo (sem sufixos internos).
routestring | nullO :alias público da rota vencedora.
address_asstringO valor exato do campo de modelo ao fixá-lo novamente (como addressAs no catálogo).
cost_detailobjectComo a cobrança foi calculada: linhas de tokens com a tarifa por 1M (linhas), sobretaxas (ajustes) e o total. Um canal de marketplace cobra o nível de preço (degrau da escada) cujo vendedor atendeu à solicitação; portanto, quando ele é diferente da tarifa de tabela, rateBasis é "tier", as linhas são exibidas com a tarifa desse nível e somam o valor cobrado, e tier identifica a tarifa. realisedRate {input, output} é o preço por 1M pelo qual a solicitação foi efetivamente cobrada — encontre-o na escada de preços do modelo (/api/model-ladder) para ver qual degrau atendeu à solicitação; minimumCharge é true (e realisedRate é null) quando a solicitação foi cobrada pelo mínimo por solicitação. Envie max_price para limitar o degrau.
No corpo da resposta dos endpoints compatíveis com OpenAI, os sufixos internos das marcas upstream em model e cost_usd permanecem ocultos (exceto para clientes com uma exceção de revelação). O detalhamento do flight aparece apenas nos headers e no histórico, sem interromper os SDKs.

Limitações

A GetVibe não fornece uma listagem «raw» em cascata dos provedores upstream no corpo da solicitação. O controle é feito por meio de :alias público, estratégia de chave e failover automático dentro do catálogo de modelos. Não existe uma API separada de «ignorar provedores» nem flags de ZDR de roteamento.

Roteamento da GetVibe — :alias, rota automática, failover, detalhamento da execução | GetVibe API