O RouterShift oferece interfaces compatíveis com OpenAI, Anthropic e Gemini para os modelos ativos para sua chave. Roteamento, failover, cobrança e evidência de auditoria são aplicados após a fronteira de protocolo.
Principais Funcionalidades
API compatível com OpenAI — substituição direta para qualquer cliente SDK OpenAI
Roteamento inteligente com estratégias configuráveis (ponderado, round-robin, baseado em latência, failover)
Disjuntor integrado e limitação de taxa para proteger sua aplicação
Cache semântico para reduzir latência e custos em consultas repetidas
Registro abrangente, monitoramento e análise de gastos
Suporte a múltiplos provedores com failover automático quando um provedor está indisponível
URL Base
Todas as requisições da API usam a seguinte URL base. A API é totalmente compatível com as bibliotecas cliente OpenAI — basta alterar a URL base e usar sua chave API RouterShift.
https://api.routershift.com/v1
URL Base Compatível com Anthropic
Para o SDK da Anthropic ou o Claude Code. Observação: não use o sufixo /v1 — o SDK adiciona /v1/messages automaticamente.
https://api.routershift.com
Compatibilidade com OpenAI
Clientes OpenAI, Anthropic e Gemini normalmente se conectam alterando a URL base e a credencial. Extensões do protocolo nativo não são automaticamente portáveis: a conversão entre protocolos aceita apenas campos com semântica equivalente. Consulte o OpenAPI para as interfaces documentadas; as restrições de rotas e modelos continuam válidas.
Categorias de Modelos Suportados
GET /v1/models é a autoridade para os modelos disponíveis à sua chave. A disponibilidade também depende de produto, saúde da rota, permissões, saldo, região e acesso privado.
Obtendo Ajuda
Se você encontrar problemas ou tiver dúvidas, consulte as seções abaixo para guias detalhados. Para consultas de cobrança, entre em contato com o suporte através do console. Para atualizações de status em tempo real, visite a página de Status.
Lista completa de endpoints
A tabela é um índice legível do plano de dados público. Use /api/openapi.yaml como contrato de máquina e /api/docs como referência interativa; os escopos da chave continuam valendo.
GET/v1/version
Versão e compatibilidade da API de dados
GET/v1/models
Lista de modelos
GET/v1/requests/:id
Recibo original: consultar evidências de execução e cobrança sem reenviar
GET/v1/requests/:id/result
Resultado de áudio capturado: ler resultados originais suportados sem gerar novamente
POST/v1/chat/completions
Completions de Chat (compatível com OpenAI)
POST/v1/contracted/chat/completions
Completions de Chat (compatível com OpenAI)
POST/v1/messages
API de mensagens (compatível com Anthropic)
POST/v1/messages/count_tokens
Estimativa de tokens de Messages (texto, raciocínio e ferramentas; não é uso nativo exato)
Todos os endpoints usam a mesma autenticação. Os dois formatos de cabeçalho funcionam da mesma forma:
Formato compatível com OpenAI
Authorization: Bearer sk-xxx
Formato compatível com Anthropic
x-api-key: sk-xxx
Recursos da plataforma
Visão Geral da API RouterShift
O RouterShift oferece interfaces compatíveis com OpenAI, Anthropic e Gemini para os modelos ativos para sua chave. Roteamento, failover, cobrança e evidência de auditoria são aplicados após a fronteira de protocolo.
O RouterShift usa carteiras pré-pagas e preços fixados por solicitação. Solicitações bem-sucedidas são cobradas pelo preço de venda ao cliente e pelas dimensões configuradas do produto.
Principais Funcionalidades
GET /v1/models é a autoridade para os modelos disponíveis à sua chave. A disponibilidade também depende de produto, saúde da rota, permissões, saldo, região e acesso privado.
API compatível com OpenAI — substituição direta para qualquer cliente SDK OpenAI
Roteamento inteligente com estratégias configuráveis (ponderado, round-robin, baseado em latência, failover)
Disjuntor integrado e limitação de taxa para proteger sua aplicação
O RouterShift oferece chat, embeddings, descoberta de modelos e outros endpoints compatíveis. Use o formato de requisição e resposta do endpoint escolhido, compatível com OpenAI, Anthropic ou Gemini.
Adicione ferramentas ao agente via MCP ou use o SDK Python/Node no código da aplicação: são opções de acesso paralelas. Siga estas quatro etapas de stdio local e não inclua credenciais em configurações compartilhadas ou no controle de versão.
O RouterShift usa carteiras pré-pagas e preços fixados por solicitação. Solicitações bem-sucedidas são cobradas pelo preço de venda ao cliente e pelas dimensões configuradas do produto.
Concilie estado, latência, uso nativo, origem do cache e gasto por data, modelo e chave API; configure orçamentos e alertas disponíveis.
Integrações de SDK e agentes
Use hoje um cliente compatível padrão ou adote os SDKs de dados Python e Node.js da RouterShift; ambos compartilham o mesmo contrato de API ativo.
Downloads de Python 0.3.7 e Node 0.3.7
Os downloads de versão fixa desta página correspondem a Python 0.3.7 e Node 0.3.7 e incluem a descoberta detalhada de modelos. É necessário Python 3.9 ou superior; Node.js e MCP local exigem Node 20 ou superior. Os arquivos não implicam publicação no npm ou PyPI. O SDK Node comum não precisa das dependências MCP opcionais.
Não são necessários código-fonte do cliente nem credenciais do fornecedor. Informe linguagem/ambiente e versão do SDK, model_code + operation + mode, parâmetros anonimizados, limites de mídia e validade de URLs, recuperação, orçamento por moeda e concorrência. REST é o contrato de execução; SDKs são clientes leves opcionais e MCP local é uma entrada stdio para agentes. O SDK próprio usa uma origem sem /v1. SDKs de fornecedores podem exigir ajustes de campos e tentativas; mudar apenas a chave ou URL base não garante compatibilidade multimodal. Alinhe amostras anônimas de solicitação/resposta e resultados esperados. Teste primeiro respostas sintéticas 200/202, GET pendente, SSE incompleto, envio desconhecido e entrega duplicada; a aceitação paga exige autorização separada e orçamento explícito.
Execute primeiro esta solicitação somente leitura e copie um código exato de modelo nos exemplos abaixo. A lista mostra o que a chave pode ver; não comprova que cada operação ou modo esteja habilitado para o modelo.
Use a mesma chave de execução em GET /v1/models?details=1: não cria tarefas, reserva fundos nem chama fornecedores; autenticação, registros e limites continuam válidos. Confira rotas/modos de details.operations, constraints.status e import_contract.status/reason. Preserve dimensões, condições, moeda, precisão, seletores, horário de observação e semantic_sha256. Preços de referência não são contratos executáveis. Restrições ausentes/desconhecidas não significam entradas ilimitadas; available não garante fundos. Não é um Schema completo por modelo nem uma projeção universal de contratos sem tokens. models.list() continua sendo a lista comum por padrão; solicite detalhes explicitamente com os métodos incluídos no SDK ou REST. Em constraints, available descreve o subconjunto revisado da operação; unsupported exige orientação específica.
Diferencie details.constraints.operations[].scope: reviewed_subset é um subconjunto revisado da operação; finite_admission_opt_in vale apenas para solicitações com limite finito explícito, não para todo chat comum. parameters não é um Schema completo de entrada. Se houver details.admission, confira status, profile, /details/admission/required_headers e os limites declarados de entrada/saída; modelos desconhecidos permanecem unavailable. A descoberta não concede fundos nem limite universal de preço.
Node 0.3.7 inclui listDetails() e a opção details=true de models.list; Python 0.3.7 inclui models.list(details=True) e list_details(). Esses métodos de descoberta detalhada fazem parte dos pacotes desta versão. models.list() mantém a lista comum por padrão; instalações antigas não recebem novos métodos automaticamente.
Python, Node e MCP podem chamar modelos de texto. O agente pode manter seu modelo principal e usar o RouterShift quando necessário. Permissões e cobranças continuam na mesma API.
import os
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
response = client.chat.completions.create(
model="YOUR_TEXT_MODEL_CODE",
messages=[{"role": "user", "content": "Summarize this project in one sentence."}],
request_options=RequestOptions(max_retries=0),
)
print(response.choices[0].message.content)
Solicitações Omni por HTTP
O exemplo envia áudio WAV e solicita texto e áudio por transmissão HTTP. Escolha uma rota compatível com OpenAI já validada, com modo stream e voz aceitos pelo modelo. Modelos que aceitam apenas SSE exigem stream:true; routershift_chat também aceita essa opção. O SDK preserva blocos de conteúdo, áudio, modalidades, chamadas de ferramentas e respostas de áudio. HTTP Omni não oferece WebSocket Realtime nem conversão arbitrária entre protocolos de provedores.
import base64
import os
from pathlib import Path
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
audio_data = base64.b64encode(Path("/absolute/path/to/sample.wav").read_bytes()).decode()
response = client.chat.completions.create(
model="YOUR_OMNI_MODEL_CODE",
messages=[{"role": "user", "content": [
{"type": "text", "text": "Describe the sound."},
{"type": "input_audio", "input_audio": {"data": audio_data, "format": "wav"}},
]}],
stream=True,
modalities=["text", "audio"],
audio={"voice": "YOUR_MODEL_VOICE", "format": "wav"},
request_options=RequestOptions(max_retries=0),
)
for chunk in response:
if chunk.choices:
delta = chunk.choices[0].delta or {}
print(delta.get("content", ""), end="")
if delta.get("audio"):
print(delta["audio"].get("transcript", ""), end="")
Geração de voz
audio.speech chama /v1/audio/speech. Python retorna bytes de áudio; Node retorna bytes em data e o contentType real. Escolha uma voz e um formato aceitos pelo modelo. O áudio retornado não é salvo automaticamente em arquivos locais.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
speech = client.audio.speech(
model="YOUR_SPEECH_MODEL_CODE",
input="Welcome to RouterShift.",
voice="YOUR_MODEL_VOICE",
response_format="wav",
)
print(len(speech))
Transcrição de áudio
audio.transcribe envia o arquivo de áudio selecionado explicitamente como multipart para /v1/audio/transcriptions. Preserve a extensão real. O exemplo solicita JSON e lê text; idiomas e formatos aceitos dependem da rota.
import os
from pathlib import Path
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe(
model="YOUR_TRANSCRIPTION_MODEL_CODE",
file=Path("/absolute/path/to/sample.wav").read_bytes(),
filename="sample.wav",
response_format="json",
)
print(transcript.text)
Transcrever uma URL de áudio HTTPS
Use audio.transcribe_url em Python, audio.transcribeURL em Node.js ou envie JSON para /v1/transcriptions com file_url. O SDK valida a URL HTTPS e não baixa a gravação localmente. As abas Go e Java usam os clientes HTTP padrão dessas linguagens; o RouterShift não declara SDK próprios para Go ou Java.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe_url(
"YOUR_TRANSCRIPTION_MODEL_CODE",
"https://media.example/recording.wav",
language="en",
audio_format="wav",
response_format="json",
)
print(transcript.text)
Gerar imagens e consultar tarefas de imagem
Use images.generate com um modelo habilitado para gerar imagens. Nos modelos com imagens assíncronas, adicione async_=True no Python ou async: true no Node.js e consulte o id retornado com images.retrieve. A resposta concluída contém data com as URLs das imagens; uma resposta pendente contém id e status.
import os
from routershift import ImageTaskResponse, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
image = client.images.generate(
model="YOUR_IMAGE_MODEL_CODE",
prompt="A quiet garden in watercolor",
)
print(image)
if isinstance(image, ImageTaskResponse):
print(client.images.retrieve(image.id))
Enviar um vídeo e consultar seu estado
videos.create envia uma tarefa de vídeo e retorna task_id. Salve-o antes de consultar videos.retrieve; uma tarefa pendente pode ainda não ter video_url. Ambos os SDKs oferecem videos.poll para espera com prazo limitado. O caminho da API é /v1/video/generations, com video no singular.
Rotas nativas verificadas de Seedance e Wan 3.0 aceitam generate_audio: omita para manter o padrão do fornecedor, false para remover o áudio e true para incluí-lo. Wan mapeia para parameters.audio e atualmente inclui som por padrão. Ligar ou desligar o som mantém a mesma tarifa de vídeo Wan, sem cobrança extra de áudio. Outras rotas podem não aceitar o campo; valores explícitos não são descartados silenciosamente.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
task = client.videos.create(
model="YOUR_VIDEO_MODEL_CODE",
prompt="A slow camera movement through a garden",
)
print(task.task_id)
result = client.videos.retrieve(task.task_id)
print(result.status, result.video_url)
Escolher parâmetros por modelo
Envie apenas parâmetros validados para o modelo e a operação selecionados. Preserve false explícito e seed=0; omitir um campo mantém o padrão do fornecedor. Estas notas descrevem a implementação, não uma disponibilidade em produção verificada.
Qwen Image 3.0: seed, watermark, prompt_extend e enable_thinking são controles específicos do modelo. prompt_extend_mode aceita direct ou agent; agent exige expansão do prompt e não se aplica à edição de imagens. enable_thinking só se aplica com a expansão do prompt ativada e não ativa prompt_extend implicitamente.
Vídeo Wan 3.0: seed, watermark e prompt_extend são controles específicos do modelo. Use generate_audio para gerar áudio; ser opcional, obrigatório ou não suportado depende do modelo. Mídias file/link exigem prompt_extend=true ou omissão; false explícito é rejeitado.
Ark Seedance: a rota atual da plataforma não aceita seed nem prompt_extend. Não reutilize parâmetros de Qwen ou Wan entre fornecedores.
Suporte no código não equivale a implantação, e implantação não equivale a validação do produto. Edição avançada, extensão de vídeo, MOV, Draft, HappyHorse, Wan 2.7, Animate e VACE em desenvolvimento offline não implicam produtos habilitados. Confirme modelo, operação e parâmetros antes de uma solicitação paga.
De imagens de referência a vídeo com primeiro quadro (REST, SDK, MCP)
Este exemplo gera uma imagem a partir de três referências HTTPS sem retratos e passa a URL HTTPS devolvida como image_url para o primeiro quadro do vídeo. Substitua ambos os modelos por códigos visíveis para sua chave em /v1/models e aceitos separadamente para cada operação; a visibilidade não basta. Os 720p e 5 segundos do exemplo dependem do suporte da rota de vídeo escolhida.
Ark: use uma rota aceita de edição Seedream Pro e uma rota Seedance de primeiro quadro. Só um modelo que aceite três referências pode recebê-las assim; 2048x1152 não é um tamanho universal. Retratos de pessoas reais têm regras próprias; uma exceção de texto para imagem na mesma conta não autoriza a fusão de três fotos.
Bailian: uma rota aceita de edição Qwen Image 3.0 suporta de uma a três referências e devolve uma URL; não espere b64_json nem suponha que o modo assíncrono de imagem esteja habilitado. Wan usa image_url para o primeiro quadro. Resolução e duração devem ser aceitas pela rota escolhida; um recurso no console do fornecedor não comprova a habilitação da rota da plataforma.
As abas mostram uma sequência, não novas tentativas automáticas. Em REST ou MCP, invoque cada etapa separadamente. Ignore a consulta da tarefa de imagem se já houver uma URL final; caso contrário, consulte uma vez a tarefa original e só continue com uma URL HTTPS utilizável. Guarde o task_id do vídeo e consulte a mesma tarefa uma vez; uma tarefa pendente pode ser consultada depois.
Tarefas de imagem REST e SDK devolvem id, enquanto tarefas de vídeo devolvem task_id. Os resultados MCP locais expõem structuredContent.task_id quando existe um ID de tarefa: verifique isError e next_action, depois leia structuredContent.outputs[].url ou o conteúdo de imagem MCP anexado. Apenas uma URL HTTPS real pode ser enviada como image_url do vídeo; o conteúdo de imagem anexado, sozinho, não é uma URL. Não suponha que MCP devolva data[0].url do REST.
Uma rejeição 400 recebida difere de um tempo limite de transporte com resultado de envio desconhecido. Em erros, guarde código e mensagem seguros, X-Request-ID e o ID da tarefa, se houver; não espere motivos brutos do fornecedor nem reenvie automaticamente um POST cobrável. Uma falha ao consultar a tarefa só deixa o estado indisponível, não prova falha na geração. Esgotar a espera não cancela nem reembolsa o trabalho. Orçamento, cobrança e liquidação seguem os registros da plataforma, não este exemplo nem o preço exibido pelo fornecedor.
Adicionar ferramentas de modelos ao agente
Adicione ferramentas ao agente via MCP ou use o SDK Python/Node no código da aplicação: são opções de acesso paralelas. Siga estas quatro etapas de stdio local e não inclua credenciais em configurações compartilhadas ou no controle de versão.
1. Criar um diretório dedicado e instalar o MCP
Use Node 20 ou superior. Esta instalação exclusiva do MCP adiciona as duas dependências pares do protocolo; uma instalação comum do SDK Node não precisa delas.
Substitua o caminho de exemplo, defina a chave da API apenas no ambiente local e mantenha a origem confiável da API sem /v1, credenciais, consulta ou fragmento. A aba Codex usa a sintaxe documentada de stdio e env_vars.
4. Reiniciar o conector e verificar dez ferramentas
Reinicie ou recarregue o cliente MCP, confirme que as dez ferramentas aparecem e execute primeiro routershift_list_models, que é somente leitura. Invoque uma ferramenta faturada apenas quando pretender enviar a operação.
Há dez ferramentas: routershift_list_models, routershift_estimate_chat, routershift_chat, routershift_generate_image, routershift_create_video, routershift_get_task, routershift_get_request, routershift_speech, routershift_transcribe, routershift_transcribe_url. Escolha primeiro um modelo que aceite a operação. Consulte tarefas de imagem ou vídeo com routershift_get_task, informando kind (image ou video) e task_id. Consulte o comprovante de uma solicitação com routershift_get_request e request_id, em modo somente leitura; isso não envia nem ativa uma operação paga. Na versão 0.3.7, details:true consulta modelos e contratos detalhados. routershift_estimate_chat apenas consulta um limite superior finito de admissão: sem chamada ao fornecedor, reserva ou execução automática; funds_verified=false. A cotação não é a fatura final nem uma autorização de execução.
routershift_chat aceita referências HTTPS de imagens e vídeos; audio_file lê um caminho absoluto WAV/MP3 selecionado explicitamente, até 16 MiB. routershift_transcribe lê um arquivo local selecionado por file_path; routershift_transcribe_url repassa um file_url HTTPS sem baixá-lo. Voz e áudio Omni são retornados de forma incorporada. routershift_generate_image aceita response_format url ou b64_json; para saída b64_json válida, limitada e no formato PNG, JPEG, WebP ou GIF, retorna conteúdo image nativo do MCP sem gravar, baixar ou republicar arquivos e sem copiar Base64 para JSON de texto. Dados de imagem acima do limite ou com formato desconhecido são explicitamente omitidos; não reenvie uma solicitação paga para recuperar uma saída omitida. O adaptador não procura em diretórios nem salva resultados automaticamente.
A aba JSON mostra a estrutura comum mcpServers; a aba TOML mostra a sintaxe documentada do Codex. Locais de configuração e permissões de subprocessos variam por cliente. Clientes exclusivamente remotos precisam de outro transporte compatível; estes exemplos não afirmam testes em todas as interfaces de agentes.
O adaptador MCP local permite chamar as APIs de texto, multimodalidade, áudio e tarefas do RouterShift. O gateway /v1/mcp existente dá acesso a ferramentas externas configuradas. Sua configuração HTTP/SSE não substitui a configuração local de ferramentas de modelos apresentada aqui.
Acesso aos modelos, espera e cobrança
Plataformas UGC: enviar uma vez, salvar o ID da tarefa e o X-Request-ID original e consultar a mesma tarefa. Um ID de trabalho próprio não garante repetição segura no servidor. REST, SDK e MCP compartilham tarefas e cobrança; trocar de acesso não deve repetir uma geração incerta.
Com import_contract disponível e operação compatível, use endpoint_prefix/request_header (X-RouterShift-Customer-Contract) em /v1/contracted/... com a solicitação completa e semantic_sha256. O mesmo cabeçalho em /v1 comum não ativa proteção. Pare se o contrato não for suportado, houver 404 ou mudança do resumo; não reenvie sem proteção. Chat protegido também exige X-RouterShift-Token-Bound, X-RouterShift-Max-Admission-Quote e X-RouterShift-Quote-Currency e um contrato finito verificado de entrada/saída/raciocínio. Não deduza valores do resumo ou contexto. Simulações públicas e admission_quote com bound_proven=false ou funds_verified=false não autorizam despesas nem definem teto universal.
Registrar envio, execução, entrega e cobrança separadamente. Sem ID de tarefa, investigar sem novo POST. Um GET com falha apenas torna o estado indisponível. Se a geração terminou mas o download falhou, recuperar a entrega do mesmo resultado conhecido. released e reconciliation_required encerram a consulta, mas não comprovam sucesso nem reembolso.
Guarde o ID original e consulte GET /v1/requests/ORIGINAL_REQUEST_ID para o recibo. GET /v1/requests/ORIGINAL_REQUEST_ID/result lê apenas resultados de áudio capturados compatíveis; não é um repositório universal. Python 0.3.7 (desde 0.3.6) audio.retrieve/poll consulta ASR nativo 202; Node 0.3.7 não anuncia métodos equivalentes. Esses GET não reenviam nem assumem recuperação contábil. Salve resultados síncronos e IDs assíncronos reais. Separe envio desconhecido, falha de entrega e liquidação pendente; um timeout não autoriza repetir POST pago.
Com receipt.metering.basis=recorded_settlement_context são expostas apenas dimensões registradas de solicitações já liquidadas. Não é recibo nativo do fornecedor, fatura nem detalhamento completo de cobranças. Preserve as strings quantity/unit/pricing_unit_divisor; evidências ausentes ou não suportadas permanecem unavailable. Não substitua uso desconhecido por zero, deduza cobranças finais nem acione recuperação por essa projeção somente leitura.
O estado e a lista de conversas assíncronas mantêm status e acrescentam execution_status, billing_status, reason_code, next_action e retry_allowed: false. completed indica resultado disponível, não faturação liquidada; unknown não significa gratuito nem reembolsado. _billing_status do SDK de imagens e billing_status do MCP copiam apenas o cabeçalho real X-Billing-Status permitido; se estiver ausente ou for inválido, não acrescentam valor. A consulta não inicia recuperação da faturação nem autoriza novo envio.
Copie o identificador completo nos gastos do utilizador ou nos registos de pedidos do administrador e pesquise pelo request_id exato: UTF-8 válido, não vazio, máximo de 256 bytes, sem espaços ou caracteres de controlo. Mantêm-se as permissões e os filtros de período e modelo; nenhum resultado não comprova ausência de aceitação ou cobrança. Guarde separadamente o identificador do envio original, o da tarefa e os de consultas posteriores. A exportação CSV continua a abranger todo o período selecionado, não apenas as linhas filtradas por identificador.
Controlar novos envios com a fila e os limites por usuário da aplicação; consultar com prazo e de forma escalonada. O prazo encerra a espera local, não a execução do fornecedor. Testes simulados não certificam sua capacidade de geração simultânea.
Substitua YOUR_* pelos seus códigos de modelo, vozes ou IDs de tarefa. /v1/models lista códigos visíveis para a chave, mas não confirma texto, Omni, imagens, vídeo, áudio ou todos os modos. Verifique entradas, saídas e modos habilitados do modelo. Não há promessa de suporte universal ou Realtime.
Chat/Messages comum do SDK mantém tentativas automáticas: envios UGC de chat/Omni devem usar explicitamente Python RequestOptions(max_retries=0) ou Node maxRetries=0, redirect=error. Métodos específicos de mídia sem novas tentativas não cobrem todos os métodos. Envios de imagens, vídeo, voz e transcrição não são repetidos automaticamente; o chat MCP também envia uma vez. Esgotar o tempo ou parar de esperar não cancela o trabalho, não gera reembolso nem torna seguro reenviá-lo. Guarde id da imagem e task_id do vídeo. released e reconciliation_required são estados finais, não provas de geração bem-sucedida.
As chamadas do SDK e MCP usam a mesma API, preços, medição, carteira e liquidação das solicitações diretas. Não acrescentam um saldo ou sistema de cobrança separado. Uma URL de resultado não comprova a liquidação; consulte o estado de cobrança da API, quando disponível, e os registros do console.
O as_of de uma estimativa é o momento da consulta, não um prazo de preço garantido. Tarefas aceitas são liquidadas pelo contrato de preços congelado e pelo uso real nativo, sem aplicar mudanças posteriores de catálogo ou preços da chave. Taxas congeladas não fixam o valor final. Uso ausente ou contraditório exige conciliação, não uma cobrança estimada. Recupere a tarefa original; não gere outra com novos parâmetros.
SDKs oficiais
Clientes tipados para modelos, chat, mensagens, embeddings, mídia e tarefas assíncronas, sem expor APIs de sessão do console.
Ecossistemas compatíveis
Clientes compatíveis OpenAI, Anthropic e Gemini usam o subconjunto de protocolo suportado. Verifique prefixo da URL base, campos, leitura de respostas e tentativas; mudar apenas chave ou URL base não garante multimídia fora do chat.
Protocolos de agentes
MCP e A2A oferecem limites estáveis de interoperabilidade sem revelar detalhes internos de roteamento.
Lançamentos independentes
Os SDKs são publicados independentemente da plataforma. Python 0.3.7 e Node 0.3.7 incluem os métodos de descoberta detalhada. Verifique os downloads de versão fixa com seus valores SHA-256; os arquivos não implicam publicação no npm ou PyPI nem aceitação nativa do modelo. O contrato OpenAPI ativo continua sendo a autoridade.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
models = client.models.list()
print([model.id for model in models])
response = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Hello"}],
)
Autenticação
Todas as requisições da API exigem autenticação usando um token Bearer. Você pode gerar e gerenciar chaves API no painel do seu console.
Formato da Chave API
As chaves API começam com sk- seguido por um identificador único. Mantenha suas chaves API seguras e nunca as exponha em código do lado do cliente ou controle de versão.
Cabeçalho de Autorização
Inclua sua chave API no cabeçalho Authorization de cada requisição:
Authorization: Bearer YOUR_API_KEY
Melhores Práticas de Segurança
Nunca coloque chaves API diretamente no código-fonte. Use variáveis de ambiente ou um gerenciador de segredos.
Rotacione chaves API regularmente pelo painel do console — crie novas chaves e revogue as antigas sem tempo de inatividade.
Use chaves API separadas para ambientes de desenvolvimento e produção.
Defina limites de uso e restrições de IP nas chaves API para segurança adicional.
Monitore o uso das chaves no painel do console para atividades incomuns.
Nunca faça commit de chaves API no controle de versão. Adicione arquivos .env ao .gitignore.
Assinaturas HMAC de Webhook
Os webhooks de usuário incluem em X-RS-Signature o digest hexadecimal HMAC-SHA256 do corpo. X-RS-Event e X-RS-Delivery identificam o evento e a entrega.
Fazendo Requisições
O RouterShift oferece chat, embeddings, descoberta de modelos e outros endpoints compatíveis. Use o formato de requisição e resposta do endpoint escolhido, compatível com OpenAI, Anthropic ou Gemini.
Completions de Chat
Envie uma requisição de chat completion com um nome de modelo, array de mensagens e parâmetros opcionais como temperature, max_tokens e top_p. O RouterShift roteia sua requisição para o provedor apropriado com base na sua configuração de roteamento.
Respostas em Streaming
Ative o streaming definindo stream: true. O RouterShift suporta Server-Sent Events (SSE) para streaming de tokens em tempo real. O formato do stream é compatível com a especificação de streaming da OpenAI.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.routershift.com/v1",
api_key=os.environ["ROUTERSHIFT_API_KEY"],
)
stream = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Requisições Assíncronas
Para tarefas de longa duração ou processamento em lote, use o modo assíncrono. Envie uma requisição e consulte os resultados — útil para cargas de trabalho que excedem os limites de tempo típicos.
Processamento em Lote
Envie um arquivo JSONL para POST /v1/batch e consulte o status e os resultados. Prazo e preço dependem do modo de execução e do contrato do modelo; um lote não garante desconto nem prazo fixo de conclusão.
Representações vetoriais
Gere embeddings vetoriais para texto usando o endpoint /v1/embeddings. Embeddings são úteis para busca semântica, agrupamento e geração aumentada por recuperação (RAG).
Estimativa de Tokens
Envie o corpo da conversa para POST /v1/chat/completions/estimate para estimar tokens e custo antes da chamada. A estimativa não é a cobrança final; valem o uso real e o contrato de preço aplicável.
Limites e controles de solicitação
Os limites efetivos vêm da chave de API, da política do cliente, da rota do modelo e da capacidade do provedor. Cabeçalhos e console refletem a configuração real em execução.
Limites de Taxa Padrão
As chaves da plataforma retornam x-ratelimit-limit-{tps,rpm,tpm,tph} e, para limites ativos, x-ratelimit-remaining-{tps,rpm,tpm,tph}. Retry-After só aparece quando esperar pode recuperar capacidade, arredondado para cima em segundos; não garante a nova tentativa. Se ausente, confira a cota por pedido e a política. Não reenvie automaticamente um POST de resultado desconhecido; use espera limitada com variação aleatória apenas quando for seguro tentar novamente.
Códigos de Resposta HTTP
429429 Too Many Requests — Você excedeu seu limite de taxa. Verifique o cabeçalho Retry-After e aguarde.
402402 Payment Required — Seu saldo é insuficiente. Adicione créditos na seção de Cobrança.
403403 Proibido — A chave autenticada não pode usar este modelo, rota ou operação. Revise os escopos da chave e a política do cliente.
503503 Service Unavailable — Nenhum provedor disponível no momento para o modelo solicitado. O disjuntor pode ter desativado temporariamente todos os provedores.
401401 Unauthorized — Cabeçalho Authorization ausente ou malformado.
400400 Bad Request — Parâmetros de requisição inválidos. Verifique a mensagem de erro para detalhes.
Cobrança e Preços
O RouterShift usa carteiras pré-pagas e preços fixados por solicitação. Solicitações bem-sucedidas são cobradas pelo preço de venda ao cliente e pelas dimensões configuradas do produto.
Modelo de Preços
A cobrança usa o preço de venda ao cliente aprovado e fixa modelo, moeda, versão de preço e dimensões por solicitação. O catálogo público mostra preços de lista para comparação; custos do provedor são fatos de liquidação.
Cobrança e Faturas
Concilie chamadas, tokens, dimensões de cache e gastos por data, modelo e chave API. Faturas e reembolsos usam evidência de preço mantida no servidor; mudanças posteriores não reescrevem o histórico.
Carteira e Créditos
As carteiras CNY e USD são contabilizadas separadamente. O saldo disponível já exclui valores congelados; não os subtraia novamente. O crédito pessoal de tolerância e a garantia da plataforma ficam desativados por padrão e exigem crédito e capital de cobertura aprovados separadamente. Crédito comprometido e principal em dívida não são saldo em dinheiro nem acesso automático a modelos. A admissão exige contrato de medição revisado e limite de custo comprovado. O progresso ao vivo não é a fatura final; resultados ou uso desconhecidos aguardam conciliação. Recargas seguem os pagamentos efetivamente recebidos.
Pacotes e Cupons
Pacotes, promoções, cupons ou planos de economia só afetam o preço quando há uma regra aplicável. O financiamento do desconto permanece separado do valor nativo devido ao provedor.
Revendedor Comissão Engine
Os revendedores recebem uma porcentagem da margem da plataforma em cada requisição de usuários convidados. Taxas de comissão específicas por modelo permitem programas de parceria detalhados, por exemplo, 15% no GPT-4o e 10% no Claude. A atribuição ocorre automaticamente pelos links de convite; a liquidação é feita em tempo real por requisição.
Acesso privado
O acesso privado integra BYOK e pools de contas de IA com controle central, preços flexíveis e failover.
Integração BYOK
Vincule suas chaves após ativar o acesso privado. O fornecedor cobra sua conta separadamente; as taxas de serviço RouterShift seguem o plano e as isenções aplicáveis. BYOK não torna todo uso gratuito.
Pools de contas
Conecte pools externos por meio de uma ponte de chaves e uma camada de políticas unificadas.
Modo de assinatura
O acesso privado é um serviço adicional opcional. Antes de ativar, confira a mensalidade fixa ou taxa por uso, moeda, renovação e isenções do plano escolhido. A API da plataforma continua sendo cobrada por uso.
Failover automático
Se uma fonte privada estiver indisponível, rotas elegíveis da plataforma para o mesmo modelo podem ser tentadas em sequência, respeitando permissões da chave e região. O uso segue o preço de venda e as verificações de saldo e orçamento; assinatura privada ou isenção não tornam esse uso gratuito.
Liquidação auditável em CNY e USD
Uma cadeia de evidências para preços, cobranças, divisão de receita, reembolsos, pagamentos e faturas. Uma conta compra modelos locais e globais: o cliente mantém a experiência CNY enquanto custos externos são liquidados nativamente.
Moedas de venda e custo separadas
Produtos domésticos são vendidos e faturados em CNY; custos upstream em USD não transferem volatilidade cambial por requisição ao cliente.
Snapshots de preço e câmbio
Cada requisição fixa as versões aprovadas, o preço e as pernas reais da carteira; mudanças futuras não reescrevem o histórico.
Contas a pagar em moeda nativa
A obrigação do fornecedor permanece na moeda upstream; margem, comissão e imposto são fatos contábeis separados.
Reembolso pelo caminho original
Reembolsos revertem as pernas CNY/USD originais; reconversões reais registram ganho ou perda cambial separadamente.
Tratamento de Erros
Entenda os erros comuns da API e como tratá-los adequadamente em sua aplicação.
Estrutura da Resposta de Erro
Todos os erros seguem o formato padrão com um objeto error contendo message, type, code e param (se aplicável).
Respeite Retry-After quando estiver presente. Repita apenas operações idempotentes ou que possam ser reproduzidas com segurança, use backoff exponencial limitado com jitter e pare ao atingir o orçamento de tentativas ou tempo da aplicação.
Tipos de Erro Comuns
invalid_request_error — Corpo da requisição malformado ou parâmetros obrigatórios ausentes.
authentication_error — Chave API inválida, expirada ou revogada.
rate_limit_error — Muitas requisições. Reduza a velocidade e respeite os cabeçalhos Retry-After.
server_error — Problema temporário do provedor ou da plataforma. Tente novamente com backoff.
upstream_error — Nenhum provedor disponível ou falha na chamada. Verifique error.code antes de decidir repetir a solicitação.
content_filter_error — Requisição bloqueada por barreiras de proteção ou filtro de conteúdo. Revise o conteúdo sinalizado.
Códigos de erro estruturados
Erros de inferência compatíveis com OpenAI incluem o campo legível por máquina error.code. Use esse campo no tratamento programático, em vez do texto da mensagem.
AUTH_INVALIDCredenciais inválidas
AUTH_EXPIREDSessão expirada
AUTH_EMAIL_NOT_VERIFIEDEmail não verificado
AUTH_INSUFFICIENTAcesso negado
WALLET_LOWSaldo insuficiente
WALLET_EMPTYCarteira vazia
RATE_LIMIT_GLOBALLimite de taxa excedido
RATE_LIMIT_KEYLimite de taxa da chave API excedido
RES_MODEL_NOT_FOUNDModelo não encontrado
UPSTREAM_UNREACHABLEProvedor upstream inacessível
UPSTREAM_ERRORErro do provedor upstream
UPSTREAM_TIMEOUTTimeout do provedor upstream
INTERNAL_ERRORErro interno do servidor
error.code
Descrição
AUTH_INVALID
Credenciais inválidas
AUTH_EXPIRED
Sessão expirada
AUTH_EMAIL_NOT_VERIFIED
Email não verificado
AUTH_INSUFFICIENT
Acesso negado
WALLET_LOW
Saldo insuficiente
WALLET_EMPTY
Carteira vazia
RATE_LIMIT_GLOBAL
Limite de taxa excedido
RATE_LIMIT_KEY
Limite de taxa da chave API excedido
RES_MODEL_NOT_FOUND
Modelo não encontrado
UPSTREAM_UNREACHABLE
Provedor upstream inacessível
UPSTREAM_ERROR
Erro do provedor upstream
UPSTREAM_TIMEOUT
Timeout do provedor upstream
INTERNAL_ERROR
Erro interno do servidor
Tratamento de Timeout
Escolha os timeouts de conexão, solicitação e inatividade do stream conforme a carga e a latência do modelo. Operações síncronas, streaming, assíncronas e em lote não devem compartilhar um valor fixo.