Pitch: APIGOTO — uma chave de API compatível com OpenAI para Claude, GPT e Gemini, e como decidimos o failover
Transparência primeiro: eu trabalho no APIGOTO, então este é um Pitch de um projeto meu. O APIGOTO é um serviço independente, sem vínculo com OpenAI, Anthropic ou Google.
O problema
Quem integra vários modelos acaba com um .env cheio de chaves (OpenAI, Anthropic, Gemini, DeepSeek...), SDKs diferentes e várias faturas. Para comparar dois modelos com o mesmo prompt, primeiro é preciso escrever uma camada de adaptação.
O que fizemos
Um gateway com uma única chave e uma base_url compatível com OpenAI: https://api.apigoto.com/v1. Você continua usando o SDK oficial da OpenAI e troca só o nome do modelo:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.apigoto.com/v1",
api_key=os.environ["APIGOTO_API_KEY"],
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5", # confira os IDs exatos na página de preços
messages=[{"role": "user", "content": "Explique chave de idempotência em duas frases."}],
)
print(resp.choices[0].message.content)
print(resp.usage)
O gateway também aceita os formatos Anthropic Messages e OpenAI Responses, para ferramentas que usam esses protocolos.
Decisões técnicas (a parte que interessa)
1. Ordem de roteamento. Para cada requisição, os upstreams candidatos são ordenados assim: modelo exato → protocolo exato → prioridade vinculada → prioridade do provedor → health score.
2. Failover com teto de 3 tentativas. Se um upstream falha, tentamos outra credencial, no máximo 3 vezes por requisição. Discutimos deixar ilimitado, mas cada tentativa soma latência. Depois da terceira, quase sempre é melhor falhar rápido e deixar o cliente decidir. Se todos os upstreams de um modelo estiverem fora, você recebe o erro, então mantenha timeout e retry do seu lado.
3. Página de status pública. Health score por upstream, de hora em hora, nas últimas 24h. Os erros 502, 403 e 429 são contados separadamente e com pesos diferentes (502 = 1,0; 403 = 0,8; outros = 0,6; 429 = 0,5), e a fórmula está publicada. Tem também uma coluna de consistência de modelo: compara o nome do modelo que o upstream devolve com o que foi pedido. Sei que é uma evidência fraca, porque o upstream pode mentir nesse campo. Ideias de fingerprinting mais forte são bem-vindas.
4. BYOK. Se você já tem chave própria de um provedor, pode cadastrá-la. Essas chamadas não pagam taxa de plataforma.
5. Logs por requisição. Modelo, tokens de entrada/saída, cache hit, latência e detalhe do erro, para descobrir por que a conta subiu na terça.
Dificuldades e trade-offs
- É um salto de rede a mais. Para chat e agentes ele é pequeno perto da latência do modelo, mas meça no seu caso.
- Recursos específicos de cada provedor (alguns detalhes de tool calling e multimodal) nem sempre mapeiam 1:1 para o formato OpenAI.
- Você confia prompts a uma camada intermediária. Leia os termos e a política de privacidade antes de mandar dados sensíveis.
Quer testar?
Contas novas recebem créditos gratuitos (limites e condições no site): www.china-aiapi.com
Pergunta para a comunidade: vocês preferem um teto fixo de retries ou configurável por chave?