MW BasicRouter
Console

Documentação do BasicRouter

Início rápido

O BasicRouter oferece às equipes de produção uma API estável para acesso a modelos, roteamento, fallback, rastreamento de uso e cobrança baseada em créditos. O fornecimento de tokens LLM é proveniente de contas originais de provedores confiáveis em nuvem corporativa, com proteção de privacidade, alta estabilidade e rastreabilidade de solicitações integradas ao gateway.

URL basehttps://api.basicrouter.ai/api
Compatível com OpenAIhttps://api.basicrouter.ai/api/v1
Mensagens Anthropichttps://api.basicrouter.ai/api/v1
AutenticaçãoAuthorization: Bearer <key>

Criar uma chave API

Crie uma chave API do BasicRouter no console. Mantenha a chave no seu servidor e nunca a exponha no código do navegador ou do cliente móvel.

Estratégia de chave recomendada:

Tipo de chaveUso recomendado
Chave de desenvolvimentoDesenvolvimento local, homologação, testes e protótipos.
Chave de produçãoApenas cargas de trabalho de produção no backend.
Chave de integraçãoChave dedicada para ferramentas como Cursor, Claude Code, Codex, Hermes ou OpenClaw.
Chave de cliente / tenantIsolamento opcional de chave para clientes corporativos, tráfego de tenant ou unidades de negócio.

Rotacione as chaves quando o acesso da equipe mudar. Revogue as chaves que não são mais usadas.

Aponte seu SDK para o BasicRouter

A maioria dos clientes compatíveis com OpenAI só precisa de uma nova URL base e chave API.

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BASICROUTER_API_KEY,
  baseURL: "https://api.basicrouter.ai/api/v1"
});

Enviar uma conclusão de chat

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/chat/completions \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "claude-sonnet-5",
    "messages": [
      { "role": "user", "content": "Explain BasicRouter in one sentence." }
    ]
  }'

Verificar uso e saldo

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/billing/balance \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Descoberta de modelos

Use a página de Modelos ou a API de Modelos para inspecionar os modelos de texto disponíveis. Os metadados do modelo incluem fornecedor, provedor de serviço, modalidade, comprimento de contexto, famílias de API suportadas, capacidades suportadas, disponibilidade, limites no nível da conta e preço em créditos.

Endpoint: GET /v1/models Objetivo: Listar modelos disponíveis para a conta atual.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Matriz de capacidades

CapacidadeDescriçãoComumente usado por
streamingSuporta streaming de eventos enviados pelo servidor (SSE).Apps de chat, agentes de programação, UX em tempo real.
tool_callingSuporta chamada de ferramentas ou funções.Agentes, automação de fluxos de trabalho, assistentes de programação.
structured_outputsSuporta saídas com restrição de esquema ou JSON.Extração de dados, automação de fluxos de trabalho, apps corporativos.
json_modePode retornar saída formatada em JSON.Respostas estruturadas leves.
visionAceita entrada de imagem.Chat multimodal, análise de UI, capturas de tela de documentos.
prompt_cachingSuporta entrada em cache ou reutilização de contexto.Agentes de contexto longo, prompts de sistema repetidos.
reasoningSuporta controles explícitos de raciocínio quando disponíveis.Planejamento complexo, programação, fluxos de análise.
logprobsSuporta saída de probabilidade de tokens.Avaliação, classificação, fluxos avançados de NLP.

Matriz de compatibilidade de famílias de API

Família de APITextoEntrada de visãoChamada de ferramentasSaída estruturadaStreamingObservações
OpenAI Chat CompletionsSimDepende do modeloDepende do modeloDepende do modeloSimMelhor padrão para agentes e SDKs compatíveis com OpenAI.
OpenAI ResponsesSimDepende do modeloDepende do modeloDepende do modeloSimRecomendado para fluxos de trabalho de agentes mais recentes no estilo OpenAI.
Anthropic MessagesSimDepende do modeloDepende do modeloDepende do modeloSimMelhor para clientes compatíveis com Claude e Claude Code.
Compatibilidade Gemini OpenAISimDepende do modeloDepende do modeloDepende do modeloSimUse modelos Gemini através de clientes no estilo OpenAI.
Compatibilidade nativa GeminiSimDepende do modeloDepende do modeloDepende do modeloSimMelhor para aplicações nativas Gemini existentes.
Geração de imagem BasicRouterNãoDepende do modeloNãoNãoNãoUsa polling assíncrono de tarefas ou webhook.
Geração de vídeo BasicRouterNãoDepende do modeloNãoNãoNãoUsa polling assíncrono de tarefas ou webhook.

Autenticação

Toda solicitação de API usa um token bearer. Armazene as chaves em variáveis de ambiente do lado do servidor, rotacione-as quando o acesso da equipe mudar e registre os IDs de solicitação para depuração.

CabeçalhoValorObservações
AuthorizationBearer YOUR_API_KEYObrigatório para toda solicitação.
Content-Typeapplication/jsonObrigatório para corpos de solicitação JSON.

Recomendações de segurança de chaves

  1. Mantenha as chaves API no servidor. Não exponha as chaves no código do navegador ou do cliente móvel.
  2. Use separate keys for development, staging, production, and third-party integrations.
  3. Defina o escopo das chaves por ambiente, serviço, cliente ou tenant quando disponível.
  4. Rotate keys after employee departures, vendor access changes, or suspected leakage.
  5. Armazene as chaves em gerenciadores de segredos ou variáveis de ambiente, não no código-fonte.

Agentes de programação

O BasicRouter funciona com agentes de programação e ferramentas de desenvolvimento de IA que suportam endpoints de API compatíveis com OpenAI ou Anthropic. Use aliases de roteamento como mwf/coding-auto para que o BasicRouter possa rotear para o melhor modelo de programação disponível sem exigir que os desenvolvedores alterem a configuração da ferramenta.

Configuração genérica compatível com OpenAI

Use esta configuração para Cursor, Codex, Hermes, OpenClaw, Continue, Aider, Cline, agentes baseados em LangChain, agentes baseados em LlamaIndex e runtimes de agentes personalizados compatíveis com OpenAI.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Configuração genérica compatível com Anthropic

Use esta configuração para clientes compatíveis com Claude e ferramentas que esperam o formato Anthropic Messages.

export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"
Caso de usoAlias recomendadoRequisitos
Programação geralmwf/coding-autoChamada de ferramentas, streaming, forte capacidade de programação.
Chat de programação rápidomwf/coding-fastBaixa latência e streaming.
Análise de repositório grandemwf/coding-longContexto longo e saída estável.
Assistente de programação sensível a custosmwf/low-costPreço menor e qualidade de programação aceitável.
Captura de tela de UI / programação com visãomwf/vision-chatEntrada de visão e saída de texto.

Guia rápido do Cursor

Use o endpoint compatível com OpenAI.

Base URL: https://api.basicrouter.ai/api/v1
API Key:  BASICROUTER_API_KEY
Model:    mwf/coding-auto

Passos recomendados:

  1. Abra as configurações do Cursor.
  2. Adicione ou ative a configuração de chave API compatível com OpenAI.
  3. Defina a substituição da URL base do OpenAI para https://api.basicrouter.ai/api/v1.
  4. Adicione um modelo personalizado como mwf/coding-auto, mwf/coding-fast ou mwf/coding-long.
  5. Use um modelo que suporte streaming e chamada de ferramentas para o melhor comportamento do agente.

Solução de problemas:

ProblemaCorreção sugerida
Modelo não exibidoAdicione o nome do modelo manualmente como um modelo personalizado.
Falha na chamada de ferramentasUse um modelo com tool_calling: true na página de Modelos.
Streaming interrompidoRepita com backoff ou use um alias de roteamento com fallback.
Erro 401Verifique a chave API e a URL base.
Erro 404 de modeloConfirme se o modelo está ativado para a conta.

Guia rápido do Claude Code

Use o endpoint do gateway compatível com Anthropic.

export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"

O BasicRouter suporta este caminho compatível com Anthropic para compatibilidade com Claude Code e SDK Anthropic:

POST /api/v1/messages

Requisitos recomendados:

RequisitoMotivo
Formato de solicitação compatível com Anthropic MessagesO Claude Code espera mensagens no estilo Anthropic.
Suporte a streamingO Claude Code depende da UX de streaming.
Suporte a chamada de ferramentasObrigatório para fluxos de trabalho de programação agentic.
Contexto longoÚtil para tarefas no nível de repositório.
Fallback estávelÚtil para sessões de programação demoradas.

Guia rápido do Codex

Use o BasicRouter como um provedor de modelo personalizado compatível com OpenAI.

Exemplo de configuração do provedor:

[model_providers.basicrouter]
name = "BasicRouter"
base_url = "https://api.basicrouter.ai/api/v1"
env_key = "BASICROUTER_API_KEY"
wire_api = "responses"

model_provider = "basicrouter"
model = "mwf/coding-auto"

Variável de ambiente:

export BASICROUTER_API_KEY="br_xxx"

Modelos recomendados:

ModeloCaso de uso
mwf/coding-autoModelo de agente de programação padrão.
mwf/coding-longContexto de repositório grande.
mwf/coding-fastIteração rápida e pequenas alterações.

Solução de problemas:

ProblemaCorreção sugerida
Erro de autenticaçãoConfirme que env_key aponta para BASICROUTER_API_KEY.
Modelo não encontradoAdicione o alias no Console do BasicRouter ou use um ID de modelo direto.
Erro da API ResponsesUse wire_api = "responses" apenas para modelos e endpoints que suportam Responses.
Modelo apenas para Chat CompletionsMude para uma API wire compatível com chat se o cliente suportar.

Guia rápido do Hermes

Use o endpoint compatível com OpenAI, a menos que sua implantação do Hermes esteja configurada para outro protocolo.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Política de modelo recomendada:

Carga de trabalho do HermesModelo
Geração de código geralmwf/coding-auto
Execução de tarefas de baixa latênciamwf/coding-fast
Verificação de repositório de contexto longomwf/coding-long
Tarefas em segundo plano sensíveis a custosmwf/low-cost

Guia rápido do OpenClaw

Use o endpoint compatível com OpenAI para a configuração de runtime de agente no estilo OpenAI.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Se o OpenClaw suportar múltiplos provedores, configure o BasicRouter como um provedor compatível com OpenAI e use aliases de roteamento do BasicRouter para seleção de modelo.

{
  "provider": "openai-compatible",
  "base_url": "https://api.basicrouter.ai/api/v1",
  "api_key_env": "BASICROUTER_API_KEY",
  "model": "mwf/coding-auto"
}

Lista de verificação de compatibilidade de agentes

CapacidadeObrigatório para
StreamingBoa UX de terminal/editor.
Chamada de ferramentasProgramação agentic, edições de arquivo, execução de comandos.
Contexto longoRepositórios grandes e alterações em múltiplos arquivos.
Structured outputsPlanejamento, decomposição de tarefas, fluxos automatizados.
Vision inputAnálise de captura de tela de UI e fluxos de design para código.
FallbackEstabilidade de produção e tarefas demoradas.

Uso do console

O Console do BasicRouter é o plano de controle operacional para acesso à API, disponibilidade de modelos, políticas de roteamento, visibilidade de uso e administração de cobrança. Ele oferece aos administradores da conta uma visão centralizada de chaves, modelos, solicitações, créditos e controles no nível da conta para tráfego de modelos em produção.

Gerenciamento de chaves API

Crie, rotacione, revogue e rotule chaves API no console. Use chaves separadas para desenvolvimento, homologação, produção e serviços individuais para que o uso possa ser auditado e isolado por ambiente ou aplicação.

PráticaDescrição
Ambientes separadosUse chaves API diferentes para tráfego de desenvolvimento, homologação e produção.
Use rótulos descritivosRotule as chaves por aplicação, serviço, ambiente ou integração.
Rotacione regularmenteRotacione as chaves quando o acesso mudar ou as credenciais podem ter sido expostas.
Evite exposição no lado do clienteMantenha as chaves API apenas em sistemas do lado do servidor. Não exponha as chaves no código do navegador ou do cliente móvel.
Monitore o uso da chaveRevise o volume de solicitações, consumo de créditos e padrões de erro por chave.

Lista de modelos

Use a página de Modelos para revisar os modelos disponíveis para a conta. Cada entrada de modelo pode incluir fornecedor, provedor de serviço, modalidade, famílias de API suportadas, comprimento de contexto, sinalizadores de capacidade, status de disponibilidade e informações de preço.

FiltroObjetivo
VendorFiltre por fornecedor do modelo como OpenAI, Anthropic, Google, Qwen, DeepSeek ou outros provedores.
ProvedorFiltre por provedor de serviço ou provedor de nuvem.
ModalityFiltre por suporte a texto, imagem, vídeo, embedding, áudio ou multimodal.
CapabilityFiltre por suporte a streaming, chamada de ferramentas, saídas estruturadas, visão, cache de prompt ou raciocínio.
AvailabilityIdentifique modelos que estão disponíveis para a conta no momento.

Para aplicações em produção, verifique as capacidades do modelo antes de ativar o tráfego. Alguns parâmetros e recursos dependem do modelo e podem não ser suportados em todas as famílias de API.

Uso e logs

A visualização de Uso e Logs fornece visibilidade operacional do tráfego da API. As equipes podem inspecionar o volume de solicitações, modelos selecionados, destinos de roteamento resolvidos, consumo de créditos, latência, códigos de erro e IDs de solicitação.

  • Solucione falhas em solicitações.
  • Identifique cargas de trabalho de alto custo.
  • Compare o uso de modelos entre aplicações e ambientes.
  • Valide o comportamento de roteamento e fallback.
  • Investigue problemas de latência ou disponibilidade do provedor.
  • Forneça IDs de solicitação ao contatar o suporte.

Cada resposta da API inclui ou expõe um ID de solicitação do BasicRouter. Armazene este ID nos logs da sua aplicação para tornar a depuração de produção e a escalonamento de suporte mais eficientes.

Fallback

O Fallback é o mecanismo de resiliência do BasicRouter. Quando o modelo principal ou a política de roteamento falha, o sistema alterna automaticamente para um modelo de backup para continuar processando a solicitação. Isso mantém sua aplicação responsiva e minimiza o risco de interrupção do serviço.

Garantia de alta disponibilidade
O Fallback atua como uma rede de segurança, mantendo sua aplicação funcionando sem problemas, mesmo quando ocorre uma falha de modelo, limite de cota ou flutuação de rede.

Por que o fallback é importante

Em produção, os serviços de modelo podem enfrentar vários problemas imprevisíveis:

  • Falha no serviço do modelo: a API upstream fica temporariamente indisponível ou atinge o tempo limite.
  • Flutuação de desempenho: alta carga do modelo leva a respostas lentas ou com falha.
  • Falha de roteamento: todos os modelos candidatos selecionados pelo roteamento inteligente ficam indisponíveis.

O Fallback mantém sua aplicação disponível fornecendo um caminho de backup confiável.

Principais vantagens

VantagemDescrição
High availabilityO failover automático mantém o serviço em execução e reduz o impacto das interrupções.
Transparent switchingO sistema alterna os modelos automaticamente — não são necessárias alterações no código da aplicação.
Flexible configurationSuporta configuração tanto por solicitação quanto no nível da conta para diferentes casos de uso.
Cost optimizationEscolha um modelo mais econômico como fallback para controlar custos de emergência.
Centralized managementConfigure uma vez no nível da conta e será aplicado automaticamente a toda solicitação.

Configuração de modelo de fallback global

O BasicRouter suporta a definição de um modelo de fallback global no backend do console. Todas as solicitações usam automaticamente este modelo como backup quando falham.

Como configurar:

  1. Acesse a página de configurações de estratégia do BasicRouter.
  2. Encontre a configuração de Modelo de Fallback Padrão.
  3. Selecione seu modelo de fallback global na lista suspensa.
  4. Salve a configuração para aplicá-la imediatamente.

Vantagens da configuração global:

  • Sem alterações de código: configure uma vez e aplica-se globalmente, sem necessidade de repetir a configuração em cada solicitação.
  • Gerenciamento centralizado: gerencie a política de fallback em um único local para ajuste e monitoramento mais fáceis.
  • Manutenção simplificada: reduz a complexidade do código e a chance de erros de configuração.
  • Substituição flexível: a configuração de fallback no nível da solicitação tem prioridade e pode substituir a configuração global para cenários específicos.

Configuração de fallback no nível da solicitação

Para cenários de negócio específicos, você pode especificar um modelo de fallback em uma solicitação individual para substituir a configuração global.

Especifique o modelo de fallback com o parâmetro router.fallBackModels:

{
  "model": "claude-sonnet-4",
  "messages": [
    {
      "role": "user",
      "content": "Explain what quantum computing is"
    }
  ],
  "router": {
    "fallBackModels": ["glm-5.2"]
  }
}

Regras de prioridade

Quando várias configurações de fallback estão presentes, a prioridade vai da mais alta para a mais baixa:

  1. router.fallBackModels no nível da solicitação: o modelo de fallback especificado em uma solicitação individual.
  2. Global Default Fallback Model: the global fallback model configured in the console.
  3. No fallback: if neither is configured, the request returns an error on failure.
⚠ Observações importantes
  • Se todos os modelos de fallback falharem, o sistema retorna o motivo da falha do último modelo tentado.
  • Quando ocorre um fallback, a resposta indica o modelo realmente usado, facilitando o monitoramento e a análise.

Administração da conta

Dependendo do tipo de conta, o console pode incluir ativação de modelos no nível da conta, controles de revendedor ou distribuidor, configuração de cobrança e configurações de acesso. Os administradores podem usar esses controles para alinhar o acesso a modelos, a visibilidade de uso e a responsabilidade de cobrança com aplicações, contas de cliente ou unidades de negócio.

Lista de verificação de operações de produção

ItemRecomendação
Chaves APIUse chaves de produção dedicadas com rótulos claros.
ModelsConfirme a disponibilidade do modelo, preço, comprimento de contexto e capacidades necessárias.
RoutingConfigure aliases de roteamento ou políticas de fallback para cargas de trabalho críticas.
LogsGaranta que os IDs de solicitação sejam capturados nos logs da aplicação.
BillingConfirme o saldo da carteira, o status do plano e as regras de dedução de créditos.
Rate limitsRevise RPM, TPM, concorrência e limites de tarefas de mídia no nível da conta.
AlertsMonitore o crescimento de uso, saldo de créditos, erros e disponibilidade do provedor.

Cobrança e créditos

O BasicRouter usa um modelo de cobrança baseado em créditos para cargas de trabalho de texto, imagem, vídeo e outros modelos suportados. Os créditos fornecem uma unidade unificada para uso de múltiplos modelos e múltiplos provedores, permitindo que as equipes gerenciem o consumo de forma consistente entre modalidades e famílias de API.

Os preços detalhados dos modelos estão disponíveis na página de Modelos ou através das APIs de metadados de modelo. O preço pode variar por modelo, provedor, modalidade, resolução, tipo de token, compramento de saída, duração da tarefa, tipo de conta e acordo comercial.

Recarga e carteira

As contas podem adicionar créditos de carteira pré-pagos para uso flexível. Os créditos da carteira são usados após os créditos do plano mensal e dos pacotes de recursos serem consumidos, a menos que uma regra billing rule applies to the account.

Os créditos da carteira não expiram, salvo especificação em contrário nos termos comerciais aplicáveis. Uma taxa de serviço é cobrada ao recarregar a carteira pré-paga.

Planos mensais e pacotes de recursos

Cada usuário ou conta pode selecionar um plano mensal ativo. Os planos mensais fornecem uma quantidade definida de capacidade de uso, termos comerciais e configuração de acesso no nível da conta para o período de cobrança.

Os usuários também podem comprar vários pacotes de recursos para capacidade de uso adicional. Os pacotes de recursos podem separar o uso comprometido do saldo da carteira pré-paga e são úteis para uso de alto volume de texto, imagem, vídeo ou cargas de trabalho dedicadas.

Ordem de dedução

A menos que regras de cobrança personalizadas estejam configuradas, os créditos são deduzidos na seguinte ordem:

PrioridadeOrigem do créditoDescrição
1Monthly planA capacidade de uso mensal incluída é consumida primeiro.
2Resource packsPacotes adicionais comprados são consumidos após os créditos do plano mensal.
3Pay-as-you-go walletO saldo da carteira é consumido após os créditos do plano e dos pacotes de recursos.

Para contas com termos comerciais personalizados, a ordem de dedução, regras de expiração, uso incluído e preços podem ser diferentes. As regras específicas da conta são mostradas no console ou fornecidas através do acordo comercial.

Preços personalizados

Os preços podem ser personalizados para cada usuário ou conta. Clientes corporativos, contas de revendedor, contas de distribuidor e clientes de alto volume podem ser elegíveis para preços personalizados. Entre em contato com as vendas para uma cotação.

Os preços personalizados podem ser configurados por conta, modelo, provedor, modalidade, região, volume de uso ou acordo comercial. Quando os preços personalizados são ativados, o console e as APIs de cobrança refletem os preços e regras de dedução específicos da conta quando disponíveis.

Unidades de preço

Different model modalities use different measurement units. BasicRouter converts these units into credits according to the model’s pricing rules.

ModalidadeBase comum de preço
TextTokens de entrada, tokens de saída, tokens de leitura em cache, tokens de escrita em cache, tokens de raciocínio ou categorias de token específicas do modelo.
ImageModelo, resolução, número de imagens geradas, uso de imagem de entrada, modo de edição ou configuração de qualidade.
VideoModelo, resolução de saída, segundos gerados, proporção da tela, uso de imagem ou vídeo de entrada e tipo de tarefa.
EmbeddingsTokens de entrada ou número de registros de embedding.
AudioDuração de entrada, duração de saída, comprimento de transcrição ou unidades de áudio específicas do modelo.

As unidades de preço podem variar por modelo. Sempre consulte a página de detalhes do modelo ou os metadados de preço antes de ativar um modelo em produção.

Atribuição de uso

O uso do BasicRouter pode ser revisado por conta, chave API, modelo, modalidade ou intervalo de tempo. Isso permite que as equipes atribuam custos a aplicações, ambientes, clientes ou unidades de negócio internas.

DimensãoDescrição
Chave APIAgrupe o uso por aplicação, serviço ou ambiente.
ModeloCompare custo e volume por modelo selecionado.
Resolved modelRevise o modelo real usado após roteamento ou fallback.
ModalitySepare o uso de texto, imagem, vídeo, embedding e áudio.
Time rangeRevise períodos de relatório diários, mensais ou personalizados.
MetadataAgrupe o uso por metadados de solicitação personalizados, como ID do cliente, ID do tenant, ID do usuário ou ambiente.

Saldo de créditos

Verifique quantos créditos estão disponíveis em sua conta. O saldo é dividido em três carteiras que são deduzidas em ordem: a allowances do plano mensal, pacotes de recursos comprados e a carteira pré-paga. Um total combinado de recursos (plano mensal + pacotes de recursos, excluindo o pré-pago) também está disponível para rastrear o uso incluído separadamente dos gastos de recarga.

Para recuperar isso programaticamente, consulte GET /v1/billing/balance na Referência da API.

Detalhes de uso

Revise uma lista paginada e cronológica de registros de uso individuais para relatórios, monitoramento e alocação interna de custos. Cada registro mostra o modelo, tipo de modelo (texto, imagem ou vídeo), os créditos deduzidos e um detalhamento de qual carteira cada dedução foi retirada. Os resultados podem ser filtrados por um intervalo de tempo específico.

Para recuperar isso programaticamente, consulte GET /v1/usage na Referência da API.

Histórico de transações

Use o histórico de transações para revisar movimentações de créditos, incluindo recargas, alocações de plano, concessões de pacotes de recursos, deduções de uso, ajustes e correções administrativas.

Para recuperar isso programaticamente, consulte GET /v1/billing/transactions na Referência da API.

Solicitações com falha e reembolsos

Erros de validação, erros de autenticação e erros de permissão geralmente não são cobrados porque nenhuma execução de modelo ocorre. Solicitações que alcançam um modelo upstream ou geram saída parcial podem consumir créditos dependendo do modelo, provedor e estado da resposta.

Para tarefas assíncronas de imagem e vídeo, o comportamento de cobrança depende se a tarefa foi aceita, iniciada, concluída, falhou ou foi cancelada. A resposta de detalhes da tarefa inclui informações de uso quando os créditos foram consumidos.

Recargas, planos mensais, pacotes de recursos e créditos consumidos não são reembolsáveis, a menos que especificado de outra forma no acordo comercial aplicável ou exigido por lei.

Referência da API

Convenções comuns

URL base

Todos os endpoints são servidos sob o prefixo /v1.

Autenticação

Chamadas para endpoints /v1/* usam autenticação por Chave API (não JWT). A Chave API é passada pelo seguinte cabeçalho:

CabeçalhoFormatoDescrição
AuthorizationBearer <api_key>Estilo OpenAI. O endpoint compatível com Anthropic também aceita x-api-key com anthropic-version: 2023-06-01.

Chaves ausentes ou inválidas retornam 401.

Pré-verificação de saldo

Todos os endpoints de chamada de modelo executam uma pré-verificação de saldo antes da execução:

  • Insufficient balance returns Insufficient credit, mapped to:
    • Protocolo OpenAI: HTTP 400, code = insufficient_quota
    • Protocolo Anthropic: HTTP 402, type = billing_error
  • Alguns endpoints também estimam um custo mínimo por modelo para uma segunda pré-verificação.

POST https://api.basicrouter.ai/api/v1/chat/completions

Endpoint compatível com OpenAI Chat Completions. Suporta streaming e não streaming, chamadas de ferramentas, modo JSON e entrada multimodal.

CampoTipoObrigatórioDescrição
modelStringSimNome do modelo.
messagesMessage[]SimMensagens da conversa.
streamBooleanNãoModo de stream, padrão false.
temperatureDoubleNãoTemperatura de amostragem.
max_tokensIntegerNãoMáximo de tokens de saída.
top_pDoubleNãoAmostragem por núcleo.
presence_penaltyDoubleNo
frequency_penaltyDoubleNo
toolsTool[]NãoDefinições de ferramentas.
tool_choiceString|ObjectNoauto / none / required / função específica.
response_formatObjectNo{type, json_schema:{name,schema,strict}}; text/json_object/json_schema.
parallel_tool_callsBooleanNão
metadataMapNãoMetadados de passagem.

Campos de Message:

CampoTipoDescrição
roleStringsystem / user / assistant / tool.
contentString|ArrayTexto simples ou array de blocos de conteúdo multimodal ([{type:"text",text},{type:"image_url",image_url:{url}}]).
tool_call_idStringVincula ao tool_calls quando role=tool.
tool_callsToolCall[]Presente quando role=assistant faz chamadas de ferramentas.
CampoTipoDescrição
typeStringFixo function.
functionObjectDefinição da função.
function.nameStringNome da função.
function.descriptionStringDescrição da função.
function.parametersObjectEsquema JSON para entradas.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/chat/completions \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "glm-5.2",
    "messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}],
    "stream": false,
    "temperature": 0.7
  }'
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1721380000,
  "model": "glm-5.2",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "Hangzhou is ..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 12, "completion_tokens": 18, "total_tokens": 30}
}

Campos de resposta (não streaming):

CampoTipoDescrição
idStringID de conclusão.
objectStringFixo chat.completion.
createdLongCarimbo de data/hora de criação (segundos).
modelStringNome do modelo.
choicesChoice[]{index, message:{role, content, tool_calls?}, finish_reason}.
usageObject{prompt_tokens, completion_tokens, total_tokens}.
CampoTipoDescrição
idStringID da chamada de ferramenta.
typeStringFixo function.
functionObjectDetalhes da chamada de função.
function.nameStringNome da função.
function.argumentsObjectArgumentos da função.

Exemplo de resposta em streaming:

data: {"object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant","content":"..."}}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"..."}}]}

data: [DONE]

POST https://api.basicrouter.ai/api/v1/responses

Endpoint compatível com OpenAI Responses. Usa input em vez de messages, instructions em vez de uma mensagem de sistema, e um bloco text em vez de response_format.

CampoTipoObrigatórioDescrição
modelStringSimNome do modelo.
inputString|ArrayYesString simples (mensagem do usuário) ou array de objetos de mensagem.
instructionsStringNãoPrompt de sistema.
streamBooleanNãoPadrão false.
max_output_tokensIntegerNãoMáximo de tokens de saída.
temperatureDoubleNãoPadrão 1.
top_pDoubleNo
toolsTool[]NoNível superior {type, name, description, parameters}.
tool_choiceString|ObjectNoauto/none/required/{type,name}.
textObjectNo{format:{type, name, schema, strict}}; text/json_object/json_schema.
metadataMapNo
previous_response_idStringNãoID da resposta anterior para múltiplos turnos.
parallel_tool_callsBooleanNão
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/responses \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "glm-5.2",
    "input": "Describe Hangzhou in one sentence.",
    "instructions": "Be concise.",
    "stream": false
  }'
{
  "id": "resp_xxx",
  "object": "response",
  "model": "glm-5.2",
  "status": "completed",
  "created_at": 1721380000,
  "output": [
    {
      "id": "msg_xxx",
      "type": "message",
      "role": "assistant",
      "content": [{"type": "output_text", "text": "Hangzhou is ..."}],
      "status": "completed"
    }
  ],
  "usage": {"input_tokens": 12, "output_tokens": 18, "total_tokens": 30}
}

Campos de resposta (não streaming):

CampoTipoDescrição
idStringID da resposta.
objectStringFixo response.
modelStringNome do modelo.
statusStringex. completed.
created_atLongCarimbo de data/hora de criação (segundos).
outputArrayOutput items. Message items: {id, type:"message", role, content:[{type:"output_text", text}], status}. Tool-call items: {type:"function_call", id, name, call_id, arguments, status}.
usageObject{input_tokens, output_tokens, total_tokens}. Para modelos Claude, input_tokens inclui cache_read e output_tokens inclui cache_write.

O streaming segue os eventos da API Responses:

EventoDescrição
response.createdInício do fluxo de resposta.
response.output_text.deltaAtualização incremental de saída de texto.
response.completedFim do fluxo de resposta.

POST https://api.basicrouter.ai/api/v1/messages

Endpoint compatível com Anthropic Messages. Aceita cabeçalhos x-api-key e anthropic-version: 2023-06-01. Os blocos de conteúdo suportam text, image, tool_use, tool_result, thinking e redacted_thinking.

CampoTipoObrigatórioCampo JSONDescription
modelStringYesmodelModel name.
messagesMessage[]YesmessagesConversation messages.
systemString|ArrayNosystemPrompt de sistema, string ou [{type,text}].
maxTokensIntegerYesmax_tokensMaximum output tokens.
streamBooleanNostreamStreaming.
temperatureDoubleNotemperature
topPDoubleNotop_p
topKIntegerNotop_k
toolsTool[]NotoolsDefinições de ferramentas (input_schema).
toolChoiceObjectNotool_choice
metadataMapNometadata
thinkingObjectNothinkingConfiguração de raciocínio estendido.
stopSequencesObjectNostop_sequences
anthropicBetaObjectNoanthropic_betaCabeçalho de recurso beta.
CampoTipoDescrição
roleStringPapel da mensagem, ex. user / assistant.
contentString|ContentBlock[]Texto simples ou um array de blocos de conteúdo.
CampoTipoDescrição
typeStringUm entre text, image, tool_use, tool_result, thinking, redacted_thinking.
textStringPresente quando o tipo é texto.
sourceObjectPresent when type is image.

Exemplos de bloco de imagem:

{ "type": "image", "source": { "type": "base64", "media_type": "...", "data": "..." } }
{ "type": "image", "source": { "type": "url", "url": "..." } }
CampoTipoDescrição
nameStringNome da função.
descriptionStringDescrição da função.
input_schemaObjectEsquema JSON para entradas.
cache_controlObjectControle de cache opcional.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/messages \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "claude-sonnet-4.6",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}]
  }'
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4.6",
  "content": [{"type": "text", "text": "Hangzhou is ..."}],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 12, "output_tokens": 18}
}

Campos de resposta (não streaming):

CampoTipoDescrição
idStringID da mensagem.
typeStringFixo message.
roleStringFixo assistant.
modelStringNome do modelo.
contentContentBlock[]Blocos de conteúdo da resposta (ex. {type:"text", text}, {type:"tool_use", ...}).
stop_reasonStringex. end_turn, tool_use, max_tokens.
usageObject{input_tokens, output_tokens}.
EventoDescrição
message_startInício do fluxo de mensagens.
content_block_startInício de um novo bloco de conteúdo.
content_block_deltaAtualização incremental de um bloco de conteúdo.
content_block_stopFim de um bloco de conteúdo.
message_deltaAtualização incremental da mensagem.
message_stopFim do fluxo de mensagens.

GET https://api.basicrouter.ai/api/v1/models

Retorna todos os modelos de API online e ativados.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "glm-5.2",
      "object": "model",
      "display_name": "glm-5.2",
      "created": 1721380000,
      "owned_by": "Zai",
      "input_modalities": ["text", "image"],
      "output_modalities": ["text"],
      "context_length": 128000
    }
  ]
}

Campos de cada entrada de modelo (data[]):

CampoTipoDescrição
idStringID do modelo.
objectStringFixo model.
display_nameStringNome de exibição.
createdLongCarimbo de data/hora de criação (segundos).
owned_byStringProprietário / fornecedor.
input_modalitiesString[]e.g. ["text","image"].
output_modalitiesString[]e.g. ["text"].
context_lengthIntegerComprimento máximo de contexto.

GET https://api.basicrouter.ai/api/v1/models/{model}

Retorna um único modelo com o mesmo formato de uma entrada de lista. Retorna HTTP 404 quando o modelo não existe.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models/gpt-5.5 \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Resposta de sucesso: um objeto de modelo único com os mesmos campos de uma entrada de lista /v1/models.

Quando o modelo não existe, retorna HTTP 404:

{"error": {"message": "The model 'xxx' does not exist", "type": "invalid_request_error", "code": "invalid_model_error"}}

GET https://api.basicrouter.ai/api/v1/image-models

Consulte as resoluções, proporções e contagens máximas suportadas por um modelo de imagem antes de chamar /v1/image-generations. Não requer autenticação.

CampoTipoDescrição
idStringID do modelo.
objectStringFixed image_model.
displayNameStringNome de exibição.
descriptionStringDescrição do modelo.
iconStringURL do ícone.
createdLongCarimbo de data/hora de criação (segundos).
maxCountIntegerMáximo de imagens por solicitação.
fileMaxIntegerMáximo de imagens de referência.
resolutionsString[]Supported resolutions, e.g. ["720p","1080p"].
ratiosString[]Supported aspect ratios, e.g. ["1:1","3:2"].
curl --request GET \
  --url https://api.basicrouter.ai/api/v1/image-models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "gpt-image-2",
      "object": "image_model",
      "displayName": "GPT Image 1",
      "description": "...",
      "icon": "...",
      "created": 1721380000,
      "maxCount": 4,
      "fileMax": 10,
      "resolutions": ["720p", "1080p"],
      "ratios": ["1:1", "3:2"]
    }
  ]
}

GET https://api.basicrouter.ai/api/v1/video-models

Consulte os valores de videoType suportados, intervalo de duração, resoluções e proporções para um modelo de vídeo antes de chamar /v1/video-generations. Não requer autenticação.

CampoTipoDescrição
idStringID do modelo.
objectStringFixed video_model.
displayNameStringNome de exibição.
descriptionStringDescrição do modelo.
iconStringURL do ícone.
createdLongCarimbo de data/hora de criação (segundos).
allowedVideoTypesVideoTypeOption[]Lista de videoType suportados.
videoDurationMinIntegerMínimo de segundos por clipe.
videoDurationMaxIntegerMáximo de segundos por clipe.
videoDurationSuggestInteger[]Passos de duração recomendados, ex. [5,8,10].
resolutionsString[]Resoluções suportadas.
ratiosString[]Proporções de tela suportadas.
resolutionOptionsResolutionOption[]Combinações estruturadas de resolução+proporção+tamanho.
fileMaxIntegerMáximo de ativos de referência.

Campos de VideoTypeOption:

CampoTipoDescrição
codeIntegerO valor de videoType a ser passado para /v1/video-generations.
nameStringNome do tipo localizado (text-to-video / image-to-video / ...).
curl --request GET \
  --url https://api.basicrouter.ai/api/v1/video-models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "sora-2",
      "object": "video_model",
      "displayName": "Sora 2",
      "description": "...",
      "icon": "...",
      "created": 1721380000,
      "allowedVideoTypes": [
        {"code": 1, "name": "text-to-video"},
        {"code": 2, "name": "image-to-video"},
        {"code": 3, "name": "image-to-video (first/last frame)"}
      ],
      "videoDurationMin": 5,
      "videoDurationMax": 10,
      "videoDurationSuggest": [5, 8, 10],
      "resolutions": ["1080p", "720p"],
      "ratios": ["16:9", "9:16"],
      "fileMax": 5
    }
  ]
}

POST https://api.basicrouter.ai/api/v1/image-generations

Envie assincronamente uma tarefa de geração de imagem. Retorna um taskId imediatamente; recupere o resultado fazendo polling de GET /v1/image-generations/{taskId} ou via webhook callbackUrl.

O model, os valores de resolution / ratio suportados, o limite máximo de count e o limite de upload de imagens de referência (fileMax) devem ser obtidos primeiro em GET /v1/image-models. Apenas os valores divulgados na especificação do modelo são aceitos.

CampoTipoObrigatórioDescrição
textStringSimPrompt.
modelStringSimNome do modelo.
imageUrlsString[]NoURLs de imagens de referência (imagem-para-imagem).
countIntegerNoNúmero de imagens (≥0).
resolutionStringNoResolução (consulte /v1/image-models).
ratioStringNãoProporção da tela.
callbackUrlStringNãoURL de webhook no nível da tarefa.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/image-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "seedream-4.5",
    "text": "A cat drinking water by the river",
    "count": 1,
    "resolution": "2k",
    "ratio": "1:1",
    "imageUrls": []
  }'
{
  "code": 200,
  "message": "image task is commit",
  "data": {"taskId": "img_xxx"}
}

Respostas de erro:

// Insufficient credit
{ "code": 500, "message": "Insufficient credit" }

// Model not found
{ "code": 404, "message": "Model not found: xxx" }

GET https://api.basicrouter.ai/api/v1/image-generations/{taskId}

Faça polling de uma tarefa de geração de imagem. status é pending / success / failed. images é um array em string JSON de URLs de imagem; text contém qualquer descrição de texto anexada pelo modelo (ex. saída multimodal do Gemini), null caso contrário.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/image-generations/img_xxx \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "img_xxx",
    "status": "success",
    "errorMessage": null,
    "images": "[\"https://.../1.png\"]",
    "text": null
  }
}

Campos de data da resposta:

CampoTipoDescrição
taskIdStringID da tarefa.
statusStringpending / success / failed.
errorMessageStringMotivo da falha, null em caso de sucesso.
imagesStringJSON-stringified array of image URLs, e.g. "[\"https://.../1.png\"]".
textStringDescrição de texto anexada pelo modelo (ex. saída multimodal do Gemini); null caso contrário.

Tarefa não encontrada:

{ "code": 500, "message": "task not found" }

Se callbackUrl foi fornecido no envio, o servidor envia o resultado final success / failed via webhook com o mesmo formato de data.

Exemplo completo (envio + polling)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class ImageGenerationExample {
  private static final String BASE = "https://api.basicrouter.ai/api/v1";
  private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");

  public static void main(String[] args) throws Exception {
    HttpClient http = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(10)).build();

    // 1. Submit the task.
    String body = "{"
        + "\"model\":\"seedream-4.5\","
        + "\"text\":\"A cat drinking water by the river\","
        + "\"count\":1,"
        + "\"resolution\":\"2k\","
        + "\"ratio\":\"1:1\","
        + "\"imageUrls\":[]"
        + "}";
    HttpResponse<String> submit = http.send(
        HttpRequest.newBuilder(URI.create(BASE + "/image-generations"))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body)).build(),
        HttpResponse.BodyHandlers.ofString());

    String taskId = extract(submit.body(), "taskId");
    System.out.println("taskId = " + taskId);

    // 2. Poll until terminal status.
    String status = "pending";
    while ("pending".equals(status)) {
      Thread.sleep(15_000L);
      HttpResponse<String> poll = http.send(
          HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
              .header("Authorization", "Bearer " + API_KEY).GET().build(),
          HttpResponse.BodyHandlers.ofString());
      status = extract(poll.body(), "status");
      System.out.println("status = " + status);
    }

    if (!"success".equals(status)) {
      throw new RuntimeException("image generation failed: " + status);
    }
    // images is a JSON-stringified array of URLs.
    String images = extract(pollResult(http, taskId), "images");
    System.out.println("images = " + images);
  }

  // Minimal JSON field extractor — use Jackson/Gson in production.
  private static String extract(String json, String field) {
    int i = json.indexOf("\"" + field + "\":");
    if (i < 0) return null;
    i += field.length() + 3;
    if (json.charAt(i) == '\"') {
      int end = json.indexOf('\"', i + 1);
      return json.substring(i + 1, end);
    }
    int end = i;
    while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
    return json.substring(i, end);
  }

  private static String pollResult(HttpClient http, String taskId) throws Exception {
    return http.send(HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
        .header("Authorization", "Bearer " + API_KEY).GET().build(),
        HttpResponse.BodyHandlers.ofString()).body();
  }
}
import os
import time
import requests

BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}

# 1. Submit the task.
resp = requests.post(
    f"{BASE}/image-generations",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "model": "seedream-4.5",
        "text": "A cat drinking water by the river",
        "count": 1,
        "resolution": "2k",
        "ratio": "1:1",
        "imageUrls": [],
    },
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")

# 2. Poll until terminal status.
while True:
    time.sleep(15)
    poll = requests.get(f"{BASE}/image-generations/{task_id}", headers=HEADERS)
    poll.raise_for_status()
    data = poll.json()["data"]
    status = data["status"]
    print(f"status = {status}")
    if status != "pending":
        break

if status != "success":
    raise RuntimeError(f"image generation failed: {data.get('errorMessage')}")

# images is a JSON-stringified array of URLs.
import json
images = json.loads(data["images"])
print(f"images = {images}")

POST https://api.basicrouter.ai/api/v1/video-generations

Envie assincronamente uma tarefa de geração de vídeo. Retorna um taskId imediatamente; recupere o resultado fazendo polling de GET /v1/video-generations/{taskId} ou via webhook callbackUrl.

O model, os valores de videoType permitidos, o intervalo de duração (videoDurationMin/Max), resolution / ratio suportados e o limite de upload de ativos de referência (fileMax) devem ser obtidos primeiro em GET /v1/video-models. Apenas códigos de videoType listados em allowedVideoTypes do modelo são aceitos.

CampoTipoObrigatórioDescrição
textStringSimPrompt.
modelStringSimNome do modelo.
videoTypeIntegerYes1 texto-para-vídeo / 2 imagem-para-vídeo (primeiro quadro) / 3 imagem-para-vídeo (primeiro+último quadro) / 4 imagem-para-vídeo (referência) / 5 todas as referências.
imageUrlsString[]NoURLs de ativos de imagem.
videoUrlsVideoUrl[]|String[]NoURLs de ativos de vídeo.
audioUrlsString[]NoURLs de ativos de áudio.
resolutionStringNãoResolução.
ratioStringNãoProporção da tela.
durationLongNãoSegundos (>0).
callbackUrlStringNãoURL de webhook no nível da tarefa.

Exemplos para cada videoType:

1. Texto para vídeo (videoType=1)

Gere um vídeo apenas a partir de um prompt de texto; não são necessários ativos de referência.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 1,
    "text": "A cat jumping on a bed",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0"
  }'
2. Imagem para vídeo - primeiro quadro (videoType=2)

Forneça um único quadro inicial em imageUrls; o modelo gera um vídeo a partir desse quadro.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 2,
    "text": "Happily shaking head",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0",
    "imageUrls": ["https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png"]
  }'
3. Imagem para vídeo - primeiro e último quadro (videoType=3)

Forneça o primeiro e o último quadro em imageUrls (ordem: [primeiro, último]); o modelo gera um vídeo de transição entre os dois quadros.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 3,
    "text": "Put on the hat",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0",
    "imageUrls": [
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png",
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/last-frame.png"
    ]
  }'
4. Imagem para vídeo - referência (videoType=4)

Forneça uma ou mais imagens de referência em imageUrls; o modelo usa o estilo/conteúdo delas como referência (não como um primeiro/último quadro forçado) para gerar o vídeo.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 4,
    "text": "Two cats playing together",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "kling-v3-omni-video",
    "imageUrls": [
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-1.png",
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-2.png"
    ]
  }'
5. Todas as referências (videoType=5)

Referências mistas de imagem / vídeo / áudio. Faça referência aos ativos por posição no prompt: a 1ª entrada em imageUrls é @图片 1, a 1ª em videoUrls é @视频 1, a 1ª em audioUrls é @音频 1. videoUrls também aceita strings de URL simples.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 5,
    "text": "Use the first-person framing of @视频 1 and @音频 1 as background music. First-person tea ad; start frame is @图片 1 ... end frame is @图片 2.",
    "model": "seedance-2.0",
    "imageUrls": [
      "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg",
      "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"
    ],
    "videoUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"],
    "audioUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 11
  }'

Resposta de envio (todos os cinco tipos):

{
  "code": 200,
  "message": "success",
  "data": {"taskId": "vid_xxx"}
}

GET https://api.basicrouter.ai/api/v1/video-generations/{taskId}

Faça polling de uma tarefa de geração de vídeo. status é pending / success / failed; videoUrl é a URL do vídeo gerado e lastFrameUrl é a URL do último quadro (cenários de imagem-para-vídeo).

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/video-generations/vid_xxx \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "status": "success",
    "videoUrl": "https://.../out.mp4",
    "lastFrameUrl": null,
    "message": null
  }
}

Campos de data da resposta:

CampoTipoDescrição
statusStringpending / success / failed.
videoUrlStringURL do vídeo gerado.
lastFrameUrlStringURL do último quadro (cenários de imagem-para-vídeo); null caso contrário.
messageStringMotivo da falha, null em caso de sucesso.

Se callbackUrl foi fornecido no envio, o servidor envia o resultado final via webhook com o mesmo formato de data.

Exemplo completo (envio + polling)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class VideoGenerationExample {
  private static final String BASE = "https://api.basicrouter.ai/api/v1";
  private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");

  public static void main(String[] args) throws Exception {
    HttpClient http = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(10)).build();

    // 1. Submit the task (videoType=1: text-to-video).
    String body = "{"
        + "\"videoType\":1,"
        + "\"text\":\"A cat jumping on a bed\","
        + "\"resolution\":\"480p\","
        + "\"ratio\":\"16:9\","
        + "\"duration\":4,"
        + "\"model\":\"seedance-2.0\""
        + "}";
    HttpResponse<String> submit = http.send(
        HttpRequest.newBuilder(URI.create(BASE + "/video-generations"))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body)).build(),
        HttpResponse.BodyHandlers.ofString());

    String taskId = extract(submit.body(), "taskId");
    System.out.println("taskId = " + taskId);

    // 2. Poll until terminal status. Video tasks take longer — poll every 20s.
    String status = "pending";
    String lastBody = null;
    while ("pending".equals(status)) {
      Thread.sleep(20_000L);
      HttpResponse<String> poll = http.send(
          HttpRequest.newBuilder(URI.create(BASE + "/video-generations/" + taskId))
              .header("Authorization", "Bearer " + API_KEY).GET().build(),
          HttpResponse.BodyHandlers.ofString());
      lastBody = poll.body();
      status = extract(lastBody, "status");
      System.out.println("status = " + status);
    }

    if (!"success".equals(status)) {
      throw new RuntimeException("video generation failed: " + status);
    }
    String videoUrl = extract(lastBody, "videoUrl");
    System.out.println("videoUrl = " + videoUrl);
  }

  // Minimal JSON field extractor — use Jackson/Gson in production.
  private static String extract(String json, String field) {
    int i = json.indexOf("\"" + field + "\":");
    if (i < 0) return null;
    i += field.length() + 3;
    if (json.charAt(i) == '\"') {
      int end = json.indexOf('\"', i + 1);
      return json.substring(i + 1, end);
    }
    int end = i;
    while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
    return json.substring(i, end);
  }
}
import os
import time
import requests

BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}

# 1. Submit the task (videoType=1: text-to-video).
resp = requests.post(
    f"{BASE}/video-generations",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "videoType": 1,
        "text": "A cat jumping on a bed",
        "resolution": "480p",
        "ratio": "16:9",
        "duration": 4,
        "model": "seedance-2.0",
    },
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")

# 2. Poll until terminal status. Video tasks take longer — poll every 20s.
while True:
    time.sleep(20)
    poll = requests.get(f"{BASE}/video-generations/{task_id}", headers=HEADERS)
    poll.raise_for_status()
    data = poll.json()["data"]
    status = data["status"]
    print(f"status = {status}")
    if status != "pending":
        break

if status != "success":
    raise RuntimeError(f"video generation failed: {data.get('message')}")

print(f"videoUrl = {data['videoUrl']}")
if data.get("lastFrameUrl"):
    print(f"lastFrameUrl = {data['lastFrameUrl']}")

GET https://api.basicrouter.ai/api/v1/billing/balance

Retorna o saldo da conta dividido em três carteiras: plano mensal, pacotes de recursos e crédito pré-pago.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/billing/balance \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "totalCredit": 128.50,
  "totalResourceCredit": 30.00,
  "wallets": {
    "monthlyPlan": {"id": "pkg_xxx", "credit": 50.00, "name": "Monthly plan"},
    "resourcePacks": [
      {"id": "rp_xxx", "credit": 30.00, "name": "Video resource pack"}
    ],
    "payAsYouGo": 48.50
  }
}

Campos de resposta:

CampoTipoDescrição
totalCreditBigDecimalSaldo total.
totalResourceCreditBigDecimalSoma dos saldos dos pacotes de recursos.
wallets.monthlyPlanWalletDetailPlano mensal (null se nenhum).
wallets.resourcePacksWalletDetail[]Lista de pacotes de recursos.
wallets.payAsYouGoBigDecimalSaldo pré-pago.

Campos de WalletDetailVO:

CampoTipoDescrição
idStringID da carteira.
creditBigDecimalCréditos do saldo.
nameStringNome da carteira.

GET https://api.basicrouter.ai/api/v1/usage

Detalhes de cobrança paginados de chamadas de modelo, com snapshot por preço (priceSnapshotId), ordenados por tempo de criação do pedido em ordem decrescente. Apenas registros de cobrança normal (reason = model usage) são retornados.

Parâmetros de consulta:

ParâmetroTipoObrigatórioPadrãoDescription
pageIntegerNo1Número da página, baseado em 1.
sizeIntegerNo20Tamanho da página (paginado por priceSnapshotId).
startTimeLocalDateTimeNoHora de início, formato yyyy-MM-ddTHH:mm:ss, filtra por snapshot orderCreatedAt.
endTimeLocalDateTimeNoHora de término, formato yyyy-MM-ddTHH:mm:ss.
curl --request GET \
  --url "https://api.basicrouter.ai/api/v1/usage?page=1&size=20&startTime=2026-07-01T00:00:00&endTime=2026-07-31T23:59:59" \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Wrapper de resposta:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
CampoTipoDescrição
recordsUsageDetailVO[]Registros da página atual.
totalLongContagem total.
currentLongPágina atual.
sizeLongTamanho da página.
pagesLongTotal de páginas.

Campos de UsageDetailVO:

CampoTipoDescrição
priceSnapshotIdStringID do snapshot de preço.
taskIdStringID da tarefa.
creditBigDecimalValor cobrado.
modelStringNome do modelo.
modelTypeStringtext / image / video.
inputTokensLongTokens de entrada; null para imagem/vídeo.
outputTokensLongTokens de saída.
totalTokensLongTotal de tokens.
cacheReadTokensLongTokens de leitura em cache.
cacheWriteTokensLongTokens de escrita em cache.
imageCountIntegerContagem de imagens; definido para modelos de imagem.
imageResolutionStringResolução da imagem, ex. 720P.
imageRatioStringProporção da imagem, ex. 1:1.
videoResolutionStringResolução do vídeo, ex. 1080p.
videoRatioStringProporção do vídeo, ex. 16:9.
videoDurationSecLongDuração do vídeo em segundos.
orderCreatedAtLocalDateTimeTempo de criação do pedido (snapshot orderCreatedAt).
creditDetailsCreditDetailItem[]Detalhes do pedido neste snapshot (de credit_order_t).

Campos de CreditDetailItem:

CampoTipoDescrição
creditBigDecimalValor cobrado por este pedido.
deductionSourceStringOrigem da dedução (Balance / Monthly Package / Resource Package).
packageNameStringNome do pacote; null se nenhum pacote.

Convenção de valor nulo: apenas os campos relevantes para cada modelType são preenchidos; o restante é null. text preenche os campos de token; image preenche imageCount/imageResolution/imageRatio; video preenche videoResolution/videoRatio/videoDurationSec.

Exemplo de resposta:

{
  "code": 200,
  "message": "success",
  "data": {
    "records": [
      {
        "priceSnapshotId": "snap_9f3c1a2b",
        "taskId": "task_5e8a1c33",
        "credit": 0.0342,
        "model": "glm-5.2",
        "modelType": "text",
        "inputTokens": 1280,
        "outputTokens": 642,
        "totalTokens": 1922,
        "cacheReadTokens": 0,
        "cacheWriteTokens": 0,
        "imageCount": null,
        "imageResolution": null,
        "imageRatio": null,
        "videoResolution": null,
        "videoRatio": null,
        "videoDurationSec": null,
        "orderCreatedAt": "2026-07-18T14:23:11",
        "creditDetails": [
          {
            "credit": 0.0342,
            "deductionSource": "balance",
            "packageName": ""
          }
        ]
      },
      {
        "priceSnapshotId": "snap_a12f77c0",
        "taskId": "task_c71e44a2",
        "credit": 1.8000,
        "model": "seedance-2.0",
        "modelType": "video",
        "inputTokens": null,
        "outputTokens": null,
        "totalTokens": null,
        "cacheReadTokens": null,
        "cacheWriteTokens": null,
        "imageCount": null,
        "imageResolution": null,
        "imageRatio": null,
        "videoResolution": "1080p",
        "videoRatio": "16:9",
        "videoDurationSec": 8,
        "orderCreatedAt": "2026-07-17T22:41:09",
        "creditDetails": [
          {
            "credit": 1.5000,
            "deductionSource": "Monthly Package",
            "packageName": "基础月度套餐"
          },
          {
            "credit": 0.3000,
            "deductionSource": "Resource Package",
            "packageName": "byteplus视频资源包"
          }
        ]
      }
    ],
    "total": 128,
    "current": 1,
    "size": 20,
    "pages": 7
  }
}

GET https://api.basicrouter.ai/api/v1/billing/transactions

Lista paginada das transações de recarga pagas (status=2) do usuário atual, ordenadas por created_at em ordem decrescente.

ParâmetroTipoObrigatórioPadrãoDescription
pageIntegerNo1Número da página.
sizeIntegerNo20Tamanho da página.
startTimeStringNoHora de início, yyyy-MM-dd HH:mm:ss, inclusivo.
endTimeStringNoHora de término, yyyy-MM-dd HH:mm:ss, inclusivo.
curl --request GET \
  --url "https://api.basicrouter.ai/api/v1/billing/transactions?page=1&size=20&startTime=2026-07-01%2000:00:00&endTime=2026-07-31%2023:59:59" \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Wrapper de resposta:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
CampoTipoDescrição
recordsTransactionVO[]Transações da página atual.
totalLongContagem total.
currentLongPágina atual.
sizeLongTamanho da página.
pagesLongTotal de páginas.

Campos de TransactionVO:

CampoTipoDescrição
orderNoStringNúmero do pedido.
thirdPartyOrderNoStringNúmero do pedido de terceiros.
amountBigDecimalValor do pedido.
actualAmountBigDecimalValor efetivamente pago.
discountBigDecimalValor do desconto.
paymentMethodStringMétodo de pagamento (wechat / alipay / ustd / stripe / wallyt etc.).

Campos de TransactionVO:

CampoTipoDescrição
serviceFeeAmountBigDecimalValor da taxa de serviço.
paymentChannelStringPlataforma de pagamento.
sourceStringOrigem do pedido (recharge / package_purchase etc.).
packageNameStringNome do pacote (definido para compras de pacotes; null para recargas simples).
createdAtLocalDateTimeTempo de criação.
{
  "code": 200,
  "message": "success",
  "data": {
    "records": [
      {
        "orderNo": "R20260718abc123",
        "thirdPartyOrderNo": "wx_pay_xxx",
        "amount": 50.00,
        "actualAmount": 48.50,
        "discount": 1.50,
        "paymentMethod": "wechat",
        "serviceFeeAmount": 0.00,
        "paymentChannel": "wechat",
        "source": "recharge",
        "packageName": null,
        "createdAt": "2026-07-18T14:23:11"
      }
    ],
    "total": 28,
    "current": 1,
    "size": 20,
    "pages": 2
  }
}

Operacional

Erros

O BasicRouter retorna códigos de erro estáveis para que as aplicações possam lidar com repetições, fallbacks, problemas de cobrança e depuração de forma consistente.

Endpoints compatíveis com provedores tentam preservar o formato de erro da família de API original quando possível. Endpoints nativos do BasicRouter usam o objeto de erro do BasicRouter.

Mapeamento de status HTTP e códigos de erro

Status HTTPTipo de erroCódigos de exemploRepetir
400invalid_request_errorinvalid_request, unsupported_parameter, invalid_messages, invalid_image_urlNão
401authentication_errormissing_api_key, invalid_api_keyNão
402billing_errorinsufficient_credits, payment_required, quota_exceededNão
403permission_errormodel_access_denied, endpoint_access_denied, key_scope_deniedNão
404not_found_errormodel_not_found, response_not_found, task_not_foundNão
408timeout_errorgateway_timeout, provider_timeoutSim
409conflict_erroridempotency_conflict, task_already_cancelledDepende
422validation_errorschema_validation_failed, unsupported_modalityNão
429rate_limit_erroraccount_rpm_exceeded, account_tpm_exceeded, provider_rate_limitedSim
500internal_errorinternal_errorSim
502provider_errorprovider_bad_gateway, provider_invalid_responseSim
503service_unavailablemodel_unavailable, provider_unavailable, insufficient_capacitySim
504timeout_errorprovider_timeout, gateway_timeoutSim

Códigos de erro comuns

CódigoSignificadoAção recomendada
missing_api_keyNenhuma chave API foi fornecida.Adicione o cabeçalho Authorization.
invalid_api_keyA chave API é inválida ou revogada.Crie ou rotacione a chave API.
model_not_foundO ID do modelo não existe ou não está ativado para a conta.Consulte a página de Modelos ou chame GET /v1/models.
model_access_deniedA chave API ou a conta não tem acesso ao modelo.Ative o modelo ou contate o administrador.
unsupported_parameterA solicitação inclui um parâmetro não suportado pelo endpoint ou modelo selecionado.Remova o parâmetro ou escolha um modelo compatível.
unsupported_modalityA modalidade de entrada ou saída não é suportada pelo modelo selecionado.Escolha um modelo que suporte a modalidade.
account_rpm_exceededLimite de solicitações por minuto da conta excedido.Repita com backoff ou solicite limites maiores.
account_tpm_exceededLimite de tokens por minuto da conta excedido.Repita com backoff, reduza tokens ou solicite limites maiores.
provider_rate_limitedO provedor upstream limitou a taxa da solicitação.Repita ou ative o fallback.
insufficient_creditsA conta tem créditos insuficientes.Recarregue a carteira, compre um pacote ou faça upgrade do plano.
provider_timeoutO provedor upstream não respondeu a tempo.Repita ou ative o fallback.
model_unavailableO modelo está temporariamente indisponível.Repita ou use um alias de roteamento.
content_policy_errorA solicitação ou saída foi bloqueada por uma política de segurança.Modifique a entrada ou escolha um fluxo de trabalho adequado.
Tipos de modelo

claude-fable-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入10 积分
输出50 积分
缓存读取1 积分
缓存写入12.50 积分

claude-opus-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.7

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.8

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-5

AWS · Anthropic · 1M 上下文

Text 输入Image 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-sonnet-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入6 积分

claude-sonnet-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入2 积分
输出10 积分
缓存读取0.20 积分
缓存写入4 积分

deepseek-v3.2

TencentCloud · Alibaba Cloud · Deepseek · 128K 上下文

Openai chatOpenai responsesAnthropic
可用
输入0.57 积分
输出1.71 积分
缓存读取0.11 积分
缓存写入0.11 积分

deepseek-v4-flash

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.14 积分
输出0.28 积分
缓存读取0.03 积分
缓存写入0.03 积分

deepseek-v4-pro

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.74 积分
输出3.48 积分
缓存读取0.14 积分
缓存写入0.14 积分

dola-seed-2-0-mini

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-0-mini-white

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-1-turbo

BytePlus · Bytedance · 262K 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responses
可用
输入0.50 积分
输出2.50 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-code

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-lite

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出4 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-pro

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入1 积分
输出6 积分
缓存读取0.20 积分
缓存写入0.01 积分

doubao-seed3d-1.0

即将推出

gemini-3-flash-preview

Google · Gemini · 1.0M 上下文

Image 输入Video 输入Text 输入Openai chat
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.05 积分

gemini-3.1-pro-preview

Google · Gemini · 1.0M 上下文

Image 输入Text 输入Video 输入Openai chat
可用
输入4 积分
输出18 积分
缓存读取0.40 积分
缓存写入0.40 积分

gemini-omni-flash-preview

Google · Gemini

文生视频按秒
即将推出
单价 / 秒0.10 积分 / 秒

glm-5

TencentCloud · Zai · 200K 上下文

Openai chatAnthropic
可用
输入1 积分
输出3.20 积分
缓存读取0.20 积分
缓存写入0.20 积分

glm-5-turbo

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

glm-5.1

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5.2

TencentCloud · Zai · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5v-turbo

TencentCloud · Zai · 200K 上下文

Image 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

gpt-5-nano

MicrosoftAzure · Openai · 400K 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入0.05 积分
输出0.40 积分
缓存读取- 积分
缓存写入- 积分

gpt-5.4

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.5

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出30 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.6-luna

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入2 积分
输出9 积分
缓存读取0.20 积分
缓存写入2.50 积分

gpt-5.6-sol

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入10 积分
输出45 积分
缓存读取1 积分
缓存写入12.50 积分

gpt-5.6-terra

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入6.25 积分

gpt-image-2

MicrosoftAzure · Openai

图像生成1K/2K/4K按张
可用
单价 / 张0.41 积分

HappyHorse-1.0-i2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-i2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-t2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.24 积分 / 秒

HappyHorse-1.0-t2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

imagen 4 fast

Google · Gemini

图像生成2K按张
可用
单价 / 张0.02 积分

imagen 4 standard

Google · Gemini

图像生成2K按张
可用
单价 / 张0.04 积分

imagen 4 ultra

Google · Gemini

图像生成2K按张
可用
单价 / 张0.06 积分

kimi-k2.5

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.60 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.10 积分

kimi-k2.6

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Text 输入Openai chatAnthropic
可用
输入0.86 积分
输出3.57 积分
缓存读取0.14 积分
缓存写入0.14 积分

kimi-k2.7-code

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.95 积分
输出4 积分
缓存读取0.19 积分
缓存写入0.19 积分

kimi-k2.7-code-highspeed

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入1.90 积分
输出8 积分
缓存读取0.38 积分
缓存写入0.38 积分

kimi-k3

TencentCloud · Moonshot AI · 1M 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入0.30 积分

kling-image-o1

Kling · Kling

图像生成2K/3K按张
可用
单价 / 张0.03 积分

kling-v3-omni-image

Kling · Kling

图像生成1K/2K/4K按张
可用
单价 / 张0.03 积分

kling-v3-omni-video

Kling · Kling

文生视频按秒
可用
单价 / 秒0.13 积分 / 秒

minimax-m2.5

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.03 积分
缓存写入0.03 积分

minimax-m2.7

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.06 积分
缓存写入0.06 积分

minimax-m3

TencentCloud · MiniMax · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出2.40 积分
缓存读取0.12 积分
缓存写入0.12 积分

nano banana 2

Google · Gemini

图像生成1K/2K/4K按张
可用
单价 / 张0.07 积分

nano banana pro

Google · Gemini

图像生成1K/2K按张
可用
单价 / 张0.14 积分

qwen-image-2.0-pro

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-2.0-s-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-3.0-pro

Alibaba Cloud · Qwen

图像生成1K/2K按张
即将推出
单价 / 张0.07 积分

qwen-image-max

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-max-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-plus

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.03 积分

qwen3-max

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.20 积分
输出6 积分
缓存读取- 积分
缓存写入- 积分

qwen3-max-white

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.40 积分
输出12 积分
缓存读取- 积分
缓存写入- 积分

qwen3-vl-flash

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.07 积分
输出0.60 积分
缓存读取0.01 积分
缓存写入0.10 积分

qwen3-vl-plus

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出4.80 积分
缓存读取- 积分
缓存写入- 积分

qwen3.5-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.5-plus-white

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出0.24 积分
缓存读取0.04 积分
缓存写入0.50 积分

qwen3.6-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.7-max

Alibaba Cloud · Qwen · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.50 积分
输出7.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

qwen3.7-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出1.60 积分
缓存读取0.08 积分
缓存写入0.50 积分

qwen3.8-max

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入2 积分
输出6 积分
缓存读取0.25 积分
缓存写入0.25 积分

seedance-1-5-pro

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-1-5-pro-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-2.0

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.15 积分 / 秒

seedance-2.0-fast

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-fast-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.07 积分 / 秒

seedance-2.5

BytePlus · Bytedance

文生视频按秒
即将推出
单价 / 秒0.11 积分 / 秒

seedream-4.5

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-4.5-white

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-5.0

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

seedream-5.0-white

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

veo 3.1

Google · Gemini

文生视频按秒
可用
单价 / 秒0.40 积分 / 秒

veo 3.1 lite

Google · Gemini

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.5-i2v-preview

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-i2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-r2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-t2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-t2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v-s-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.26 积分 / 秒

wan2.7-i2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-image

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.03 积分

wan2.7-image-pro

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.07 积分