Documentação do app v1.0

Visão geral do Load Balance

O Load Balance é um gateway de chaves de API: fica entre o seu cliente e os provedores upstream e escolhe, requisição a requisição, qual credencial atende. Esta página é o mapa — o que ele faz, o que você administra e onde ler sobre cada parte.

Primeira vez aqui?

Comece por Quickstart — proxy: você aponta o cliente para uma URL do LB e recebe 200. Depois volte para cá para entender o que aconteceu por baixo.

Pré-requisitos#

Para usar o LB como cliente você precisa destes três itens, nesta ordem.

  • Um cliente compatível com a API Messages da Anthropic — Claude Code, Codex ou qualquer outro. O LB fala POST /v1/messages; o Claude Code ainda dispara um HEAD / de preflight contra ANTHROPIC_BASE_URL antes da primeira requisição real.
  • Uma URL do proxy publicada, dentro da sua organização. O pool de chaves é sempre por organização: não existe pool geral, e uma config sem organizationId é recusada com 403.
  • Uma chave sk-lb- pessoal ou de serviço. Só conta valor com esse prefixo, venha de x-api-key ou de Authorization: Bearer.
  • Para administrar o LB você entra pelo painel, com a conta da Conta Nommand. Os papéis são OWNER, ADMIN e MEMBER, comparados por ranking — e quem nega acesso de verdade é o backend, não o menu.

    As duas superfícies#

    O produto tem duas superfícies, e elas não se misturam. Uma entrega tráfego; a outra administra o tráfego.

    O que o Load Balance faz#

    Antes de escolher uma chave, o LB tira da frente quem não pode atender agora: contas fora da janela de uso e chaves em cooldown. Depois disso, a estratégia do grupo decide. São cinco, e o padrão é round_robin.

  • round_robin — cursor incremental por grupo, módulo do tamanho da lista. Com uma chave só, ela atende sempre.
  • priority — a primeira chave disponível do snapshot, que vem ordenado por priority asc. Uma chave de priority alta que dá 429 cascateia para a próxima antes de parar.
  • rated — a de menor score entre as disponíveis, combinando TTFT, latência total e taxa de erro.
  • hedge — a primária é escolhida como no rated; a reserva sai depois, por um atraso escalonado antes do primeiro token.
  • race — a primária é a mesma; as concorrentes saem do mesmo ranqueamento, todas no instante zero.
  • Em volta disso, o mesmo caminho trata o resto do trabalho: um 429 de uma chave põe aquela chave em cooldown em vez de desativá-la, todo non-2xx é retentável na próxima chave da lista, e o corpo é re-sanitizado do zero a cada tentativa porque cada chave pode ter o próprio formato de upstream. Se todas as contas estiverem fora da janela, a resposta é um 429 imediato com Retry-After real, sem tocar em nenhum provedor.

    O LB também é onde a resposta é saneada antes de chegar a você: só bytes SSE válidos passam, o tempo até o primeiro token é carimbado no instante em que o primeiro byte útil atravessa, e o upstream nunca vaza — um erro terminal vira 503 genérico.

    20 provedores, uma mesma entrada

    O LB resolve qual adapter atende pelo nome do provedor, pelo authType ou pela heurística do host da baseUrl, e converte o corpo para o formato nativo daquele provedor. O seu cliente continua falando Anthropic. A tabela completa está em Provedores upstream.

    As duas chaves#

    Este é o conceito que mais gera confusão, e é o que separa você de quem administra. Existem duas credenciais no mesmo caminho, e elas nunca se tocam.

    text
    # o que o SEU cliente envia
    x-api-key: sk-lb-...
    
    # o que o LB injeta no upstream, ja convertido
    Authorization: Bearer sk-ant-oat01-...
    ChaveQuem temOnde viveOnde aparece
    sk-lb-Você e a sua equipeBanco, guardada só como hash — o segredo volta uma vez, na criaçãoNo header x-api-key ou em Authorization: Bearer da requisição que seu cliente faz
    Chave de provedorO administrador, no painelApiKey, com baseUrl, authType e headers própriosNo header que o adapter injeta, já no formato do provedor

    A chave sk-lb- é removida dos headers logo depois da autorização: ela nunca segue para o upstream. É por isso que uma chave de serviço é revogável sem tocar em nenhuma credencial de provedor, e por isso que revogar a sua não derruba ninguém além de você.

    Um 403 que não é chave inválida

    Quando o contrato da empresa acaba na Conta, a resposta é 403 com error.code igual a ORG_SUSPENDED. Nada foi revogado: a mesma chave volta a valer se a empresa contratar de novo. É por esse código estável que o seu cliente distingue uma coisa da outra.

    O painel#

    As telas do painel e quem entra em cada uma. O menu esconde o item por papel; a rota nega o acesso direto pela URL; o backend é quem recusa de fato.

    TelaO que você faz nelaQuem entra
    Visão geralKPIs e feed de tráfego em tempo realQualquer autenticado
    Logs de requisiçõesLog paginado de requisições, com filtro e realtimeQualquer autenticado
    Métricas e InsightsAgregados por janela e leitura analítica do tráfegoQualquer autenticado
    Configs de URLQuais URLs o proxy atende, e com quais chavesQualquer autenticado
    Chaves de APICRUD das chaves de provedor upstreamADMIN
    Limites de usoAs janelas de 5 h e semanal dos planosADMIN
    Chaves de URLEmissão e revogação das sk-lb-ADMIN
    Grupos de chavesGrupos que rodíziam por estratégia, com arrastar e soltar na ordem de prioridadeADMIN
    Grupos de configAgrupamento de Configs de URLADMIN
    OAuthCredenciais OAuth dos provedoresADMIN
    Minha contaPerfil, tema e links para a ContaQualquer autenticado
    PlataformaA área da Nomad, sobre todas as organizaçõesPLATFORM

    A URL pública exibida e copiada em Configs de URL vem da variável PROXY_PUBLIC_URL, não do host em que o painel está servido — porque o seu cliente fala com o proxy, não com o painel.

    Onde os dados vivem#

    Duas dependências — Postgres pelo Prisma e Redis. O Postgres guarda o que precisa sobreviver a restart; o Redis guarda o que é quente e descartável.

    DadoOndeIdentificador
    Credencial de provedor, grupo, URL do proxy, log de requisições, organizações e auditoriaPostgres, via Prisma — 19 modelsApiKey, ApiKeyGroup, RequestConfig, Request, AuditLog
    Rating de velocidade da chave (TTFT, latência, erros)Redisrating:v1:<orgId>:<keyId>, TTL 24 h
    Cooldown das chavesRedis, espelhado em Map in-memorycooldown:<keyId>
    Janelas de uso de 5 h e semanal por conta upstreamRedisulstate:<conta> e ullimit:<conta>
    Sessão do painelRedisdashboard_session:<sessionId>, 7 dias

    O Redis é fail-open por desenho: o rating é um otimizador, e falhar nele não pode derrubar um request. Postgres é diferente — as migrations rodam antes do servidor no boot, e banco fora de sync derruba o container em vez de servir tráfego quebrado.

    Próximos passos#

    Você tem o mapa. Escolha por onde quer começar:

    Depois de dominar o básico, explore além:

    Documentação gerada com a skill docs-padrao.