Gateway de LLM
Um gateway de LLM com a camada de dados acoplada
Três URLs base, uma chave, um saldo. Chat, imagem, vídeo e modelos de decisão no SDK que você já usa; busca, documentos e slides com os mesmos créditos — a partir de um décimo do preço oficial do provedor.
10%
Preço inicial, comparado ao preço oficial da API do provedor
5,000+
APIs no mesmo catálogo
Um gateway costuma ter uma superfície. Este tem três.
Elas compartilham a sua conta, a sua chave e o seu saldo, mas respondem a perguntas diferentes e vivem em URLs base diferentes. Saber qual delas você está chamando é o segredo inteiro.
| Superfície | URL base | Use para |
|---|---|---|
| API de modelos | openapi.felo.ai/api/v1 · openapi.felo.ai/api | Chamar diretamente um modelo de linguagem, imagem, vídeo ou decisão |
| API de dados | openapi.felo.ai/v1/beta | Chamar um provedor de dados ou busca de terceiros indicado por nome |
| Felo APIs | openapi.felo.ai/v2 | Fluxos próprios da Felo: busca, escritório, extração e conhecimento |
Uma chave cobre as três. A recarga compra créditos de serviço em dólar, e a chamada de modelo, a chamada da API de dados e o fluxo Felo saem todos do mesmo lugar — sem uma conta separada por fornecedor.
Ler a documentaçãoSeis endpoints, não um
Tudo sob /api/v1 é chamada de modelo, mas o tipo de modelo define qual endpoint pode responder — e cada endpoint devolve um formato próprio.
| Endpoint | Protocolo | Retorna |
|---|---|---|
POST /api/v1/chat/completions | OpenAI Chat Completions | Streaming ou uma resposta |
POST /api/v1/responses | OpenAI Responses | Streaming ou uma resposta |
POST /api/v1/messages | Anthropic Messages | Streaming ou uma resposta |
POST /api/v1/images/generations | Envelope de imagem da OpenAI | Um task_id para consultar |
POST /api/v1/videos/generations | Envelope de vídeo da OpenAI | Um task_id para consultar |
POST /api/v1/decisions | Esquema de decisão Felo | Respostas tipadas, sem streaming |
As três superfícies de chat são implementações nativas, não uma camada de tradução: cada uma transmite eventos no próprio protocolo, então você analisa o stream exatamente como hoje.
Escolha o endpoint pelo tipo de modelo, não por tentativa
Todo modelo do catálogo carrega um model_kind, e o tipo define qual endpoint pode chamá-lo. A descoberta é gratuita: lê o catálogo local.
# discover before you call — free, reads the catalog
GET /api/v1/models # every kind, with channels and rates
GET /api/v1/models/{model_id} # one model, in detail
GET /api/v1/videos/models # video_generation only
GET /api/v1/decisions/models # decisions only| model_kind | Endpoint |
|---|---|
chat | Responses, Chat Completions ou Messages, conforme o modelo suportar |
image_generation | POST /api/v1/images/generations |
video_generation | POST /api/v1/videos/generations |
decisions | POST /api/v1/decisions |
Filtre com ?provider= para ver um fornecedor só, ou ?exclude_video_and_decisions=true para esconder tudo menos chat e imagem. Estar no catálogo não é promessa: um modelo de vídeo não responde a um pedido de chat, e a API devolve model_kind_mismatch.
Rota padrão ou um cabeçalho para escolher o provedor
Um modelo pode ser servido por vários canais upstream, cada um com seu fornecedor e seu preço publicado. Sem o cabeçalho, a plataforma escolhe um por você; com X-Felo-Channel, quem escolhe é você.
# first channel only — no automatic fallback
X-Felo-Channel: claude-cc
X-Felo-Channel: claude-cc,anthropic # ordered selection, not a retry list- O valor é uma lista ordenada de códigos públicos de canal, tirados de
channels[].codedo modelo, validada na ordem em que você a escreve. - Só o grupo de provedor do primeiro canal é enviado, e é o preço desse canal que você paga.
- Não existe fallback automático. Uma lista de canais é uma seleção, não uma política de retentativa — se um provedor falhar, reenvie pela sua aplicação com outro canal.
X-Felo-Channel funciona nos seis endpoints de geração acima. Não se aplica à API de dados nem às Felo APIs: essas vão para o fornecedor que você nomeia na requisição.
Quanto uma chamada custa de verdade
Chamadas de modelo são cobradas por token — entrada, saída e cache — com o multiplicador de desconto do canal aplicado. As tarifas aparecem por 1 milhão de tokens para facilitar a leitura, mas a cobrança usa a precisão por token do snapshot de preços atual, então um pedido curto nunca é arredondado para um milhão.
- Tarifas de cache só se aplicam quando a resposta do protocolo reporta uso de cache; um modelo sem esse relatório cobra tudo pela tarifa de entrada.
- Busca na web que o serviço do modelo executa e reporta custa $0.01 por busca.
- Alguns modelos têm faixas por tamanho do prompt: Claude Haiku 5.5 custa $0.10 na entrada e $0.50 na saída por 1 milhão de tokens até um prompt de 100K tokens, e depois $0.50 e $2.50 pelo pedido inteiro.
- A primeira recarga é de $1. Sem assinatura, sem taxa por assento, sem compromisso mínimo — uma chave parada não custa nada.
Chamadas da API de dados e fluxos Felo saem do mesmo saldo, cada um na sua base publicada: por requisição bem-sucedida, por item retornado ou por uso real.
Ver tarifas e créditosDois limites que parecem iguais e não são
Falta de crédito devolve 402 INSUFFICIENT_CREDITS. Chamada rápida demais devolve 429 RATE_LIMITED. Esperar resolve o segundo e nunca resolve o primeiro.
| Status | Código | O que fazer |
|---|---|---|
| 401 | UNAUTHORIZED | Corrija ou reemita a chave |
| 402 | INSUFFICIENT_CREDITS | Recarregue no faturamento do console e reenvie |
| 404 | depende do endpoint | Confira o ID do modelo, da tarefa ou da rota |
| 429 | RATE_LIMITED | Espere o Retry-After e tente de novo |
| 5xx | CHAT_FAILED, SERVICE_UNAVAILABLE | Tente de novo com backoff exponencial e jitter |
Hoje só /v2/chat documenta limites rígidos. Chamadas de modelo também podem ser limitadas upstream, e isso aparece como 429 — leia X-RateLimit-* e Retry-After em vez de fixar números. Toda resposta traz um request_id, e o X-Request-Id que você envia volta ecoado, então os logs batem.
Imagem e vídeo terminam em segundo plano
Os dois endpoints de geração devolvem um task_id em vez do resultado. Envie, consulte, recolha — e note que, depois que a tarefa existe, a maioria das falhas chega como 200 com status terminal, não como erro HTTP.
# submit, then poll the task
POST /api/v1/images/generations → task_id
GET /api/v1/images/generations/{id} → status, result
POST /api/v1/videos/generations → task_id
GET /api/v1/videos/generations/{id} → status, resultLeia o status antes do resultado: failed e interrupted também são respostas, e error.message diz por quê. Um 402 no envio significa que a tarefa nunca foi criada. O SuperAgent é diferente — devolve um stream_key e empurra eventos por SSE, então não há o que consultar.
Troque a URL base, mantenha o cliente
Os dois SDKs funcionam sem alteração assim que a URL base aponta para cá. npx feloapi-cli setup escreve a mesma configuração para Claude Code e Codex.
# OpenAI SDK
base_url = "https://openapi.felo.ai/api/v1"
# Anthropic SDK — one level up; the SDK appends /v1/messages
base_url = "https://openapi.felo.ai/api"
# pin a provider (optional)
default_headers = {"X-Felo-Channel": "claude-cc"}IDs de modelo não são iguais entre provedores. Escolha no catálogo antes de virar a URL base, ou a primeira chamada responde 404.
A metade que um gateway costuma deixar com você
Um gateway de LLM roteia chamadas de modelo. Aqui a mesma chave também alcança um catálogo de 5,000+ APIs — então a etapa de busca no seu agente, os slides que ele gera e o documento que ele lê de volta são cobrados dos mesmos créditos, não de mais três fornecedores.
- Search
- PPT Task
- SuperAgent
- Web Fetch
- X Search
- Mindmap
- Landing Page Task
- LiveDoc
- YouTube Subtitling
As chamadas da API de dados vão para provedores nomeados sob /v1/beta — Tavily, Exa, Apollo e o resto do catálogo — cada um na sua base publicada.
Onde o gateway para
- Sem failover automático entre canais — a retentativa é lógica da sua aplicação, de propósito.
- Estar no catálogo não garante compatibilidade; cada tipo de modelo tem uma superfície de chamada.
- Não há limite de requisições documentado na plataforma para chamadas de modelo, mas o limite do provedor upstream continua valendo.
- Os créditos são pré-pagos, não reembolsáveis e não podem ser sacados — recarregue o valor que pretende gastar.
Seis perguntas sobre gateway de LLM
O que é um gateway de LLM?
Um endpoint na frente de vários provedores de modelo, para que seu código fale com uma URL base, uma chave e um saldo em vez de uma dúzia de SDKs de fornecedores. Um gateway de IA faz o mesmo; este também vende as APIs de dados que um agente precisa.
Posso manter meu SDK da OpenAI ou da Anthropic?
Pode. Chat Completions e Responses têm o formato da OpenAI e Messages é nativo. As URLs base são https://openapi.felo.ai/api/v1 e https://openapi.felo.ai/api — um nível acima, porque esse SDK acrescenta /v1/messages sozinho.
Como sei qual modelo chamar?
GET /api/v1/models lista todos os tipos com canais e tarifas; modelos de vídeo e de decisão têm listas próprias. Leia o model_kind e chame o endpoint correspondente. Estar listado não significa que todo endpoint aceita aquele modelo.
Ele faz failover quando um provedor cai?
Não, e isso é proposital. Uma lista de canais é uma seleção, não uma política de retentativa: só o primeiro é enviado. O failover pertence à sua aplicação, onde dá para ver o erro, o orçamento e o fallback que você realmente quer.
Quanto custa?
Cada modelo tem uma tarifa Felo que começa em um décimo do preço oficial do provedor, e o canal que você fixa define a tarifa paga. Pré-pago, cobrado por chamada, primeira recarga de $1, sem assinatura.
Também posso chamar imagem, vídeo e APIs de dados?
Sim. Uma chave alcança modelos de chat, imagem, vídeo e decisão e o catálogo de 5,000+ APIs atrás de /v1/beta — tudo cobrado dos mesmos créditos.
Teste em uma chamada
Crie uma chave, recarregue e aponte o SDK que você já usa para uma URL base.