MW BasicRouter
Consola

Documentos de BasicRouter

Inicio rápido

BasicRouter ofrece a los equipos de producción una API estable para el acceso a modelos, enrutamiento, respaldo, seguimiento de uso y facturación basada en créditos. El suministro de tokens de LLM proviene de cuentas de proveedores originales en la nube empresarial de confianza, con protección de privacidad, alta estabilidad y trazabilidad de solicitudes integradas en la pasarela.

URL basehttps://api.basicrouter.ai/api
Compatible con OpenAIhttps://api.basicrouter.ai/api/v1
Mensajes de Anthropichttps://api.basicrouter.ai/api/v1
AutenticaciónAuthorization: Bearer <key>

Crear una clave API

Cree una clave API de BasicRouter en la consola. Mantenga la clave en su servidor y nunca la exponga en el código del navegador o del cliente móvil.

Estrategia de claves recomendada:

Tipo de claveUso recomendado
Clave de desarrolloDesarrollo local, staging, pruebas y prototipos.
Clave de producciónSolo cargas de trabajo de producción en el backend.
Clave de integraciónClave dedicada para herramientas como Cursor, Claude Code, Codex, Hermes o OpenClaw.
Clave de cliente / inquilinoAislamiento de clave opcional para clientes empresariales, tráfico por inquilino o unidades de negocio.

Rotar las claves cuando cambie el acceso del equipo. Revocar las claves que ya no se usen.

Apunte su SDK a BasicRouter

La mayoría de los clientes compatibles con OpenAI solo necesitan una nueva URL base y una clave API.

import OpenAI from "openai";

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

Enviar una completación 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." }
    ]
  }'

Comprobar uso y saldo

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

Descubrimiento de modelos

Use la página de Modelos o la API de Modelos para inspeccionar los modelos de texto disponibles. Los metadatos del modelo incluyen proveedor, proveedor de servicio, modalidad, longitud de contexto, familias de API soportadas, capacidades soportadas, disponibilidad, límites a nivel de cuenta y precios en créditos.

Endpoint: GET /v1/models Propósito: Listar los modelos disponibles para la cuenta actual.

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

Matriz de capacidades

CapacidadDescripciónUsado comúnmente por
streamingSoporta transmisión mediante eventos enviados por el servidor.Apps de chat, agentes de programación, UX en tiempo real.
tool_callingSoporta llamada a herramientas o funciones.Agentes, automatización de flujos de trabajo, asistentes de programación.
structured_outputsSoporta salidas restringidas por esquema o JSON.Extracción de datos, automatización de flujos, apps empresariales.
json_modePuede devolver salida en formato JSON.Respuestas estructuradas ligeras.
visionAcepta entrada de imágenes.Chat multimodal, análisis de UI, capturas de documentos.
prompt_cachingSoporta caché de entrada o reutilización de contexto.Agentes de contexto largo, prompts del sistema repetidos.
reasoningSoporta controles explícitos de razonamiento cuando estén disponibles.Planificación compleja, programación, flujos de análisis.
logprobsSoporta salida de probabilidad de tokens.Evaluación, clasificación, flujos avanzados de NLP.

Matriz de compatibilidad de familias de API

Familia de APITextoEntrada de visiónLlamada a herramientasSalida estructuradaTransmisiónNotas
OpenAI Chat CompletionsDepende del modeloDepende del modeloDepende del modeloMejor opción por defecto para agentes y SDKs compatibles con OpenAI.
OpenAI ResponsesDepende del modeloDepende del modeloDepende del modeloRecomendado para flujos de agentes más nuevos de estilo OpenAI.
Anthropic MessagesDepende del modeloDepende del modeloDepende del modeloMejor para clientes compatibles con Claude y Claude Code.
Gemini OpenAI compatibilityDepende del modeloDepende del modeloDepende del modeloUse modelos Gemini a través de clientes de estilo OpenAI.
Gemini native compatibilityDepende del modeloDepende del modeloDepende del modeloMejor para aplicaciones nativas de Gemini existentes.
BasicRouter image generationNoDepende del modeloNoNoNoUsa sondeo asíncrono de tareas o webhook.
BasicRouter video generationNoDepende del modeloNoNoNoUsa sondeo asíncrono de tareas o webhook.

Autenticación

Cada solicitud API usa un token bearer. Guarde las claves en variables de entorno del lado del servidor, rótelas cuando cambie el acceso del equipo y registre los IDs de solicitud para depuración.

EncabezadoValorNotas
AuthorizationBearer YOUR_API_KEYObligatorio para cada solicitud.
Content-Typeapplication/jsonObligatorio para cuerpos de solicitud JSON.

Recomendaciones de seguridad de claves

  1. Mantenga las claves API en el servidor. No exponga las claves en código de cliente del navegador o móvil.
  2. Use claves separadas para desarrollo, staging, producción e integraciones de terceros.
  3. Limite las claves por entorno, servicio, cliente o inquilino cuando esté disponible.
  4. Rote las claves tras la salida de empleados, cambios de acceso de proveedores o sospecha de fuga.
  5. Guarde las claves en gestores de secretos o variables de entorno, no en código fuente.

Agentes de programación

BasicRouter funciona con agentes de programación y herramientas de desarrollo de IA que soportan endpoints API compatibles con OpenAI o Anthropic. Use alias de enrutamiento como mwf/coding-auto para que BasicRouter pueda enrutar al mejor modelo de programación disponible sin requerir que los desarrolladores cambien la configuración de la herramienta.

Configuración genérica compatible con OpenAI

Use esta configuración para Cursor, Codex, Hermes, OpenClaw, Continue, Aider, Cline, agentes basados en LangChain, agentes basados en LlamaIndex y runtimes de agentes personalizados compatibles con OpenAI.

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

Configuración genérica compatible con Anthropic

Use esta configuración para clientes y herramientas compatibles con Claude que esperan el 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
Programación generalmwf/coding-autoLlamada a herramientas, streaming, fuerte capacidad de programación.
Chat de programación rápidomwf/coding-fastBaja latencia y streaming.
Análisis de repositorios grandesmwf/coding-longContexto largo y salida estable.
Asistente de programación sensible al costomwf/low-costPrecio más bajo y calidad de programación aceptable.
Captura de UI / programación con visiónmwf/vision-chatEntrada de visión y salida de texto.

Guía rápida de Cursor

Use el endpoint compatible con OpenAI.

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

Pasos recomendados:

  1. Abra la configuración de Cursor.
  2. Agregue o habilite la configuración de clave API compatible con OpenAI.
  3. Establezca la URL base de OpenAI en https://api.basicrouter.ai/api/v1.
  4. Agregue un modelo personalizado como mwf/coding-auto, mwf/coding-fast o mwf/coding-long.
  5. Use un modelo que soporte streaming y llamada a herramientas para el mejor comportamiento del agente.

Solución de problemas:

ProblemaSolución sugerida
Modelo no mostradoAgregue el nombre del modelo manualmente como un modelo personalizado.
Falla la llamada a herramientasUse un modelo con tool_calling: true en la página de Modelos.
Streaming interrumpidoReintente con backoff o use un alias de enrutamiento con respaldo.
Error 401Verifique la clave API y la URL base.
Error 404 de modeloConfirme que el modelo esté habilitado para la cuenta.

Guía rápida de Claude Code

Use el endpoint de puerta de enlace compatible con Anthropic.

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

BasicRouter soporta esta ruta compatible con Anthropic para Claude Code y compatibilidad con el SDK de Anthropic:

POST /api/v1/messages

Requisitos recomendados:

RequisitoMotivo
Forma de solicitud compatible con Anthropic MessagesClaude Code espera mensajes estilo Anthropic.
Soporte de streamingClaude Code depende de la UX de streaming.
Soporte de llamada a herramientasRequerido para flujos de trabajo de programación agéntica.
Contexto largoÚtil para tareas a nivel de repositorio.
Respaldos establesÚtil para sesiones de programación largas.

Guía rápida de Codex

Use BasicRouter como proveedor de modelos personalizado compatible con OpenAI.

Configuración de proveedor de ejemplo:

[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"

Variable de entorno:

export BASICROUTER_API_KEY="br_xxx"

Modelos recomendados:

ModeloCaso de uso
mwf/coding-autoModelo de agente de programación predeterminado.
mwf/coding-longContexto de repositorios grandes.
mwf/coding-fastIteración rápida y cambios pequeños.

Solución de problemas:

ProblemaSolución sugerida
Error de autenticaciónConfirme que env_key apunta a BASICROUTER_API_KEY.
Modelo no encontradoAgregue el alias en la Consola de BasicRouter o use un ID de modelo directo.
Error de Responses APIUse wire_api = "responses" solo para modelos y endpoints que soporten Responses.
Modelo solo de Chat CompletionsCambie a una wire API compatible con chat si el cliente lo soporta.

Guía rápida de Hermes

Use el endpoint compatible con OpenAI a menos que su despliegue de Hermes esté configurado para otro 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 trabajo de HermesModelo
Generación de código generalmwf/coding-auto
Ejecución de tareas de baja latenciamwf/coding-fast
Escaneo de repositorios de contexto largomwf/coding-long
Tareas en segundo plano sensibles al costomwf/low-cost

Guía rápida de OpenClaw

Use el endpoint compatible con OpenAI para la configuración de runtime de agente 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"

Si OpenClaw soporta múltiples proveedores, configure BasicRouter como proveedor compatible con OpenAI y use alias de enrutamiento de BasicRouter para la selección de modelos.

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

Lista de verificación de compatibilidad de agentes

CapacidadRequerida para
StreamingBuena UX en terminal/editor.
Llamada a herramientasProgramación agéntica, ediciones de archivos, ejecución de comandos.
Contexto largoRepositorios grandes y cambios en múltiples archivos.
Salidas estructuradasPlanificación, descomposición de tareas, flujos de trabajo automatizados.
Entrada de visiónAnálisis de capturas de UI y flujos de trabajo de diseño a código.
RespaldoEstabilidad de producción y tareas de larga duración.

Uso de la Consola

La Consola de BasicRouter es el plano de control operativo para el acceso API, la disponibilidad de modelos, las políticas de enrutamiento, la visibilidad de uso y la administración de facturación. Ofrece a los administradores de cuenta una vista centralizada de claves, modelos, solicitudes, créditos y controles a nivel de cuenta para el tráfico de modelos en producción.

Gestión de claves API

Cree, rote, revoque y etiquete claves API desde la consola. Use claves separadas para desarrollo, staging, producción y servicios individuales para que el uso pueda ser auditado y aislado por entorno o aplicación.

PrácticaDescripción
Separar entornosUse diferentes claves API para tráfico de desarrollo, staging y producción.
Use etiquetas descriptivasEtiquete las claves por aplicación, servicio, entorno o integración.
Rotar regularmenteRote las claves cuando cambie el acceso o cuando las credenciales puedan haber sido expuestas.
Evitar exposición en el clienteMantenga las claves API solo en sistemas del lado del servidor. No exponga las claves en código de cliente del navegador o móvil.
Monitorear uso de clavesRevise el volumen de solicitudes, el consumo de créditos y los patrones de error por clave.

Lista de modelos

Use la página de Modelos para revisar los modelos disponibles para la cuenta. Cada entrada de modelo puede incluir proveedor, proveedor de servicio, modalidad, familias de API soportadas, longitud de contexto, indicadores de capacidad, estado de disponibilidad e información de precios.

FiltroPropósito
ProveedorFiltrar por proveedor de modelo como OpenAI, Anthropic, Google, Qwen, DeepSeek u otros proveedores.
Proveedor de servicioFiltrar por proveedor de servicio o proveedor de nube.
ModalidadFiltrar por soporte de texto, imagen, video, embedding, audio o multimodal.
CapacidadFiltrar por streaming, llamada a herramientas, salidas estructuradas, visión, caché de prompts o soporte de razonamiento.
DisponibilidadIdentificar modelos que están actualmente disponibles para la cuenta.

Para aplicaciones en producción, verifique las capacidades del modelo antes de habilitar el tráfico. Algunos parámetros y características dependen del modelo y pueden no estar soportados en todas las familias de API.

Uso y registros

La vista de Uso y Registros proporciona visibilidad operativa del tráfico API. Los equipos pueden inspeccionar el volumen de solicitudes, los modelos seleccionados, los destinos de enrutamiento resueltos, el consumo de créditos, la latencia, los códigos de error y los IDs de solicitud.

  • Solucionar solicitudes fallidas.
  • Identificar cargas de trabajo de alto costo.
  • Comparar el uso de modelos entre aplicaciones y entornos.
  • Validar el comportamiento de enrutamiento y respaldo.
  • Investigar problemas de latencia o disponibilidad del proveedor.
  • Proporcionar IDs de solicitud al contactar con soporte.

Cada respuesta API incluye o expone un ID de solicitud de BasicRouter. Guarde este ID en los registros de su aplicación para hacer que la depuración en producción y la escalada de soporte sean más eficientes.

Respaldo

El respaldo es el mecanismo de resiliencia de BasicRouter. Cuando el modelo principal o la política de enrutamiento falla, el sistema cambia automáticamente a un modelo de respaldo para seguir procesando la solicitud. Esto mantiene su aplicación receptiva y minimiza el riesgo de interrupción del servicio.

Garantía de alta disponibilidad
El respaldo actúa como una red de seguridad, manteniendo su aplicación funcionando sin problemas incluso cuando ocurre una falla de modelo, un límite de cuota o una fluctuación de red.

Por qué importa el respaldo

En producción, los servicios de modelos pueden encontrar varios problemas impredecibles:

  • Falla del servicio de modelo: la API de origen queda temporalmente no disponible o se agota el tiempo de espera.
  • Fluctuación de rendimiento: una alta carga del modelo provoca respuestas lentas o fallidas.
  • Falla de enrutamiento: todos los modelos candidatos seleccionados por el enrutamiento inteligente quedan no disponibles.

El respaldo mantiene su aplicación disponible proporcionando una ruta de respaldo confiable.

Ventajas principales

VentajaDescripción
Alta disponibilidadLa conmutación por error automática mantiene el servicio en ejecución y reduce el impacto de las interrupciones.
Cambio transparenteEl sistema cambia de modelo automáticamente — no se requieren cambios en el código de la aplicación.
Configuración flexibleSoporta tanto configuración por solicitud como a nivel de cuenta para diferentes casos de uso.
Optimización de costosElija un modelo más rentable como respaldo para controlar los costos de emergencia.
Gestión centralizadaConfigure una vez a nivel de cuenta y se aplica automáticamente a cada solicitud.

Configuración global de modelo de respaldo

BasicRouter permite configurar un modelo de respaldo global desde el backend de la consola. Todas las solicitudes usan automáticamente este modelo como respaldo cuando fallan.

Cómo configurarlo:

  1. Vaya a la página de configuración de estrategia de BasicRouter.
  2. Busque el ajuste Modelo de respaldo predeterminado.
  3. Seleccione su modelo de respaldo global de la lista desplegable.
  4. Guarde el ajuste para aplicarlo inmediatamente.

Ventajas de la configuración global:

  • Sin cambios en el código: configure una vez y se aplica globalmente, sin necesidad de repetir el ajuste en cada solicitud.
  • Gestión centralizada: administre la política de respaldo en un solo lugar para facilitar el ajuste y monitoreo.
  • Mantenimiento simplificado: reduce la complejidad del código y la posibilidad de errores de configuración.
  • Reemplazo flexible: la configuración de respaldo a nivel de solicitud tiene prioridad y puede anular el ajuste global para escenarios específicos.

Configuración de respaldo a nivel de solicitud

Para escenarios de negocio específicos, puede especificar un modelo de respaldo en una solicitud individual para anular la configuración global.

Especifique el modelo de respaldo con el parámetro router.fallBackModels:

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

Reglas de prioridad

Cuando hay múltiples configuraciones de respaldo, la prioridad va de mayor a menor:

  1. router.fallBackModels a nivel de solicitud: el modelo de respaldo especificado en una solicitud individual.
  2. Modelo de respaldo predeterminado global: el modelo de respaldo global configurado en la consola.
  3. Sin respaldo: si no se configura ninguno, la solicitud devuelve un error al fallar.
⚠ Notas importantes
  • Si todos los modelos de respaldo fallan, el sistema devuelve el motivo de falla del último modelo intentado.
  • Cuando ocurre un respaldo, la respuesta indica el modelo realmente utilizado, lo que facilita el monitoreo y análisis.

Administración de cuenta

Dependiendo del tipo de cuenta, la consola puede incluir habilitación de modelos a nivel de cuenta, controles de revendedor o distribuidor, configuración de facturación y ajustes de acceso. Los administradores pueden usar estos controles para alinear el acceso a modelos, la visibilidad de uso y la responsabilidad de facturación con aplicaciones, cuentas de cliente o unidades de negocio.

Lista de verificación de operaciones de producción

ElementoRecomendación
Claves APIUse claves de producción dedicadas con etiquetas claras.
ModelosConfirme la disponibilidad del modelo, los precios, la longitud de contexto y las capacidades requeridas.
EnrutamientoConfigure alias de enrutamiento o políticas de respaldo para cargas de trabajo críticas.
RegistrosAsegúrese de que los IDs de solicitud se capturen en los registros de la aplicación.
FacturaciónConfirme el saldo del monedero, el estado del plan y las reglas de deducción de créditos.
Límites de velocidadRevise los límites RPM, TPM, concurrencia y tareas multimedia a nivel de cuenta.
AlertasMonitoree el crecimiento de uso, el saldo de créditos, los errores y la disponibilidad del proveedor.

Facturación y créditos

BasicRouter usa un modelo de facturación basado en créditos para cargas de trabajo de texto, imagen, video y otros modelos soportados. Los créditos proporcionan una unidad unificada para el uso de múltiples modelos y proveedores, de modo que los equipos puedan gestionar el consumo de manera consistente entre modalidades y familias de API.

Los precios detallados de los modelos están disponibles en la página de Modelos o a través de las APIs de metadatos de modelos. Los precios pueden variar según el modelo, proveedor, modalidad, resolución, tipo de token, longitud de salida, duración de la tarea, tipo de cuenta y acuerdo comercial.

Recargar y monedero

Las cuentas pueden añadir créditos de monedero de pago por uso para un uso flexible. Los créditos del monedero se usan después de que se hayan consumido los créditos del plan mensual y los paquetes de recursos, a menos que se aplique una regla de facturación personalizada a la cuenta.

Los créditos del monedero no expiran a menos que se especifique lo contrario en los términos comerciales aplicables. Se cobra una tarifa de servicio al recargar el monedero de pago por uso.

Planes mensuales y paquetes de recursos

Cada usuario o cuenta puede seleccionar un plan mensual activo. Los planes mensuales proporcionan una cantidad definida de capacidad de uso, términos comerciales y configuración de acceso a nivel de cuenta para el período de facturación.

Los usuarios también pueden comprar múltiples paquetes de recursos para capacidad de uso adicional. Los paquetes de recursos pueden separar el uso comprometido del saldo del monedero de pago por uso y son útiles para uso intensivo de texto, imagen, video o cargas de trabajo dedicadas.

Orden de deducción

A menos que se configuren reglas de facturación personalizadas, los créditos se deducen en el siguiente orden:

PrioridadOrigen de créditoDescripción
1Plan mensualLa capacidad de uso mensual incluida se consume primero.
2Paquetes de recursosLos paquetes comprados adicionalmente se consumen después de los créditos del plan mensual.
3Monedero de pago por usoEl saldo del monedero se consume después de los créditos del plan y paquetes de recursos.

Para cuentas con términos comerciales personalizados, el orden de deducción, las reglas de expiración, el uso incluido y los precios pueden diferir. Las reglas específicas de cuenta se muestran en la consola o se proporcionan a través del acuerdo comercial.

Precios personalizados

Los precios pueden personalizarse para cada usuario o cuenta. Los clientes empresariales, las cuentas de revendedor, las cuentas de distribuidor y los clientes de alto volumen pueden ser elegibles para precios personalizados. Contacte con ventas para obtener una cotización.

Los precios personalizados pueden configurarse por cuenta, modelo, proveedor, modalidad, región, volumen de uso o acuerdo comercial. Cuando se habilitan precios personalizados, la consola y las APIs de facturación reflejan los precios y reglas de deducción específicos de la cuenta cuando estén disponibles.

Unidades de precio

Diferentes modalidades de modelo usan diferentes unidades de medida. BasicRouter convierte estas unidades en créditos según las reglas de precios del modelo.

ModalidadBase común de precios
TextoTokens de entrada, tokens de salida, tokens de lectura en caché, tokens de escritura en caché, tokens de razonamiento o categorías de token específicas del modelo.
ImagenModelo, resolución, número de imágenes generadas, uso de imagen de entrada, modo de edición o ajuste de calidad.
VideoModelo, resolución de salida, segundos generados, relación de aspecto, uso de imagen o video de entrada, y tipo de tarea.
EmbeddingsTokens de entrada o número de registros de embedding.
AudioDuración de entrada, duración de salida, longitud de transcripción o unidades de audio específicas del modelo.

Las unidades de precio pueden variar según el modelo. Consulte siempre la página de detalles del modelo o los metadatos de precios antes de habilitar un modelo en producción.

Atribución de uso

El uso de BasicRouter puede revisarse por cuenta, clave API, modelo, modalidad o rango de tiempo. Esto permite a los equipos atribuir costos a aplicaciones, entornos, clientes o unidades de negocio internas.

DimensiónDescripción
Clave APIAgrupar uso por aplicación, servicio o entorno.
ModeloComparar costo y volumen por modelo seleccionado.
Modelo resueltoRevisar el modelo realmente usado después del enrutamiento o respaldo.
ModalidadSeparar uso de texto, imagen, video, embedding y audio.
Rango de tiempoRevisar períodos de reporte diarios, mensuales o personalizados.
MetadatosAgrupar uso por metadatos personalizados de solicitud como ID de cliente, ID de inquilino, ID de usuario o entorno.

Saldo de créditos

Verifique cuántos créditos están disponibles en su cuenta. El saldo se divide en tres monederos que se deducen en orden: la asignación del plan mensual, los paquetes de recursos comprados y el monedero de pago por uso. También está disponible un total combinado de recursos (plan mensual + paquetes de recursos, excluyendo pago por uso) para rastrear el uso incluido separadamente del gasto de recarga.

Para obtener esto mediante programación, consulte GET /v1/billing/balance en la Referencia API.

Detalles de uso

Revise una lista paginada y cronológica de registros de uso individuales para reportes, monitoreo y asignación interna de costos. Cada registro muestra el modelo, el tipo de modelo (texto, imagen o video), los créditos deducidos y un desglose de qué monedero se usó para cada deducción. Los resultados pueden filtrarse a un rango de tiempo específico.

Para obtener esto mediante programación, consulte GET /v1/usage en la Referencia API.

Historial de transacciones

Use el historial de transacciones para revisar movimientos de créditos, incluyendo recargas, asignaciones de planes, concesiones de paquetes de recursos, deducciones de uso, ajustes y correcciones administrativas.

Para obtener esto mediante programación, consulte GET /v1/billing/transactions en la Referencia API.

Solicitudes fallidas y reembolsos

Los errores de validación, los errores de autenticación y los errores de permisos generalmente no se facturan porque no ocurre ejecución del modelo. Las solicitudes que llegan a un modelo de origen o que generan salida parcial pueden consumir créditos dependiendo del modelo, el proveedor y el estado de la respuesta.

Para tareas asíncronas de imagen y video, el comportamiento de facturación depende de si la tarea fue aceptada, iniciada, completada, fallida o cancelada. La respuesta de detalle de la tarea incluye información de uso cuando se han consumido créditos.

Las recargas, los planes mensuales, los paquetes de recursos y los créditos consumidos no son reembolsables a menos que se especifique lo contrario en el acuerdo comercial aplicable o lo exija la ley.

Referencia API

Convenciones comunes

URL base

Todos los endpoints se sirven bajo el prefijo /v1.

Autenticación

Las llamadas a los endpoints /v1/* usan autenticación de Clave API (no JWT). La clave API se pasa mediante el siguiente encabezado:

EncabezadoFormatoDescripción
AuthorizationBearer <api_key>Estilo OpenAI. El endpoint compatible con Anthropic también acepta x-api-key con anthropic-version: 2023-06-01.

Las claves faltantes o inválidas devuelven 401.

Verificación previa de saldo

Todos los endpoints de llamada a modelos ejecutan una verificación previa de saldo antes de la ejecución:

  • Un saldo insuficiente devuelve Insufficient credit, asignado a:
    • Protocolo OpenAI: HTTP 400, code = insufficient_quota
    • Protocolo Anthropic: HTTP 402, type = billing_error
  • Algunos endpoints también estiman un costo mínimo por modelo para una segunda verificación previa.

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

Endpoint compatible con OpenAI Chat Completions. Soporta streaming y no streaming, llamadas a herramientas, modo JSON y entrada multimodal.

CampoTipoRequeridoDescripción
modelStringNombre del modelo.
messagesMessage[]Mensajes de la conversación.
streamBooleanNoModo streaming, predeterminado false.
temperatureDoubleNoTemperatura de muestreo.
max_tokensIntegerNoMáximo de tokens de salida.
top_pDoubleNoMuestreo de núcleo.
presence_penaltyDoubleNo
frequency_penaltyDoubleNo
toolsTool[]NoDefiniciones de herramientas.
tool_choiceString|ObjectNoauto / none / required / función específica.
response_formatObjectNo{type, json_schema:{name,schema,strict}}; text/json_object/json_schema.
parallel_tool_callsBooleanNo
metadataMapNoMetadatos de paso a través.

Campos de Message:

CampoTipoDescripción
roleStringsystem / user / assistant / tool.
contentString|ArrayTexto plano o arreglo de bloques de contenido multimodal ([{type:"text",text},{type:"image_url",image_url:{url}}]).
tool_call_idStringVincula a tool_calls cuando role=tool.
tool_callsToolCall[]Presente cuando role=assistant hace llamadas a herramientas.
CampoTipoDescripción
typeStringFijo function.
functionObjectDefinición de función.
function.nameStringNombre de la función.
function.descriptionStringDescripción de la función.
function.parametersObjectJSON Schema para las 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 respuesta (no streaming):

CampoTipoDescripción
idStringID de completación.
objectStringFijo chat.completion.
createdLongMarca de tiempo de creación (segundos).
modelStringNombre del modelo.
choicesChoice[]{index, message:{role, content, tool_calls?}, finish_reason}.
usageObject{prompt_tokens, completion_tokens, total_tokens}.
CampoTipoDescripción
idStringID de llamada a herramienta.
typeStringFijo function.
functionObjectDetalles de la llamada a función.
function.nameStringNombre de la función.
function.argumentsObjectArgumentos de la función.

Ejemplo de respuesta en 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 compatible con OpenAI Responses. Usa input en lugar de messages, instructions en lugar de un mensaje del sistema, y un bloque text en lugar de response_format.

CampoTipoRequeridoDescripción
modelStringNombre del modelo.
inputString|ArrayCadena plana (mensaje de usuario) o arreglo de objetos de mensaje.
instructionsStringNoPrompt del sistema.
streamBooleanNoPredeterminado false.
max_output_tokensIntegerNoMáximo de tokens de salida.
temperatureDoubleNoPredeterminado 1.
top_pDoubleNo
toolsTool[]NoNivel 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_idStringNoID de respuesta previa para conversación multi-turno.
parallel_tool_callsBooleanNo
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 respuesta (no streaming):

CampoTipoDescripción
idStringID de respuesta.
objectStringFijo response.
modelStringNombre del modelo.
statusStringpor ejemplo completed.
created_atLongMarca de tiempo de creación (segundos).
outputArrayElementos de salida. Elementos de mensaje: {id, type:"message", role, content:[{type:"output_text", text}], status}. Elementos de llamada a herramienta: {type:"function_call", id, name, call_id, arguments, status}.
usageObject{input_tokens, output_tokens, total_tokens}. Para modelos Claude, input_tokens incluye cache_read y output_tokens incluye cache_write.

El streaming sigue los eventos de la API de Responses:

EventoDescripción
response.createdInicio del flujo de respuesta.
response.output_text.deltaActualización incremental de salida de texto.
response.completedFin del flujo de respuesta.

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

Endpoint compatible con Anthropic Messages. Acepta encabezados x-api-key y anthropic-version: 2023-06-01. Los bloques de contenido soportan text, image, tool_use, tool_result, thinking y redacted_thinking.

CampoTipoRequeridoCampo JSONDescripción
modelStringmodelNombre del modelo.
messagesMessage[]messagesMensajes de la conversación.
systemString|ArrayNosystemPrompt del sistema, cadena o [{type,text}].
maxTokensIntegermax_tokensMáximo de tokens de salida.
streamBooleanNostreamStreaming.
temperatureDoubleNotemperature
topPDoubleNotop_p
topKIntegerNotop_k
toolsTool[]NotoolsDefiniciones de herramientas (input_schema).
toolChoiceObjectNotool_choice
metadataMapNometadata
thinkingObjectNothinkingConfiguración de pensamiento extendido.
stopSequencesObjectNostop_sequences
anthropicBetaObjectNoanthropic_betaEncabezado de función beta.
CampoTipoDescripción
roleStringRol del mensaje, por ejemplo user / assistant.
contentString|ContentBlock[]Texto plano o un arreglo de bloques de contenido.
CampoTipoDescripción
typeStringUno de text, image, tool_use, tool_result, thinking, redacted_thinking.
textStringPresente cuando el tipo es text.
sourceObjectPresente cuando el tipo es image.

Ejemplos de bloque de imagen:

{ "type": "image", "source": { "type": "base64", "media_type": "...", "data": "..." } }
{ "type": "image", "source": { "type": "url", "url": "..." } }
CampoTipoDescripción
nameStringNombre de la función.
descriptionStringDescripción de la función.
input_schemaObjectJSON Schema para las entradas.
cache_controlObjectControl de caché 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 respuesta (no streaming):

CampoTipoDescripción
idStringID del mensaje.
typeStringFijo message.
roleStringFijo assistant.
modelStringNombre del modelo.
contentContentBlock[]Bloques de contenido de la respuesta (por ejemplo {type:"text", text}, {type:"tool_use", ...}).
stop_reasonStringpor ejemplo end_turn, tool_use, max_tokens.
usageObject{input_tokens, output_tokens}.
EventoDescripción
message_startInicio del flujo de mensajes.
content_block_startInicio de un nuevo bloque de contenido.
content_block_deltaActualización incremental para un bloque de contenido.
content_block_stopFin de un bloque de contenido.
message_deltaActualización incremental para el mensaje.
message_stopFin del flujo de mensajes.

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

Devuelve todos los modelos API en línea y habilitados.

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[]):

CampoTipoDescripción
idStringID del modelo.
objectStringFijo model.
display_nameStringNombre para mostrar.
createdLongMarca de tiempo de creación (segundos).
owned_byStringPropietario / proveedor.
input_modalitiesString[]por ejemplo ["text","image"].
output_modalitiesString[]por ejemplo ["text"].
context_lengthIntegerLongitud máxima de contexto.

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

Devuelve un único modelo con la misma estructura que una entrada de lista. Devuelve HTTP 404 cuando el modelo no existe.

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

Respuesta exitosa: un objeto de modelo único con los mismos campos que una entrada de lista de /v1/models.

Cuando el modelo no existe, devuelve 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

Consulta las resoluciones, relaciones y cantidades máximas soportadas por un modelo de imagen antes de llamar a /v1/image-generations. No requiere autenticación.

CampoTipoDescripción
idStringID del modelo.
objectStringFijo image_model.
displayNameStringNombre para mostrar.
descriptionStringDescripción del modelo.
iconStringURL del icono.
createdLongMarca de tiempo de creación (segundos).
maxCountIntegerMáximo de imágenes por solicitud.
fileMaxIntegerMáximo de imágenes de referencia.
resolutionsString[]Resoluciones soportadas, por ejemplo ["720p","1080p"].
ratiosString[]Relaciones de aspecto soportadas, por ejemplo ["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

Consulta los valores de videoType soportados, el rango de duración, las resoluciones y las relaciones de un modelo de video antes de llamar a /v1/video-generations. No requiere autenticación.

CampoTipoDescripción
idStringID del modelo.
objectStringFijo video_model.
displayNameStringNombre para mostrar.
descriptionStringDescripción del modelo.
iconStringURL del icono.
createdLongMarca de tiempo de creación (segundos).
allowedVideoTypesVideoTypeOption[]Lista de videoType soportados.
videoDurationMinIntegerSegundos mínimos por clip.
videoDurationMaxIntegerSegundos máximos por clip.
videoDurationSuggestInteger[]Pasos de duración recomendados, por ejemplo [5,8,10].
resolutionsString[]Resoluciones soportadas.
ratiosString[]Relaciones de aspecto soportadas.
resolutionOptionsResolutionOption[]Combinaciones estructuradas de resolución+relación+tamaño.
fileMaxIntegerMáximo de recursos de referencia.

Campos de VideoTypeOption:

CampoTipoDescripción
codeIntegerEl valor de videoType que se pasa a /v1/video-generations.
nameStringNombre localizado del tipo (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

Envía asíncronamente una tarea de generación de imágenes. Devuelve un taskId inmediatamente; recupere el resultado consultando GET /v1/image-generations/{taskId} o a través de un webhook callbackUrl.

El model, los valores soportados de resolution / ratio, el límite superior de count y el límite de subida de imágenes de referencia (fileMax) deben obtenerse primero de GET /v1/image-models. Solo se aceptan los valores anunciados por la especificación de ese modelo.

CampoTipoRequeridoDescripción
textStringPrompt.
modelStringNombre del modelo.
imageUrlsString[]NoURLs de imágenes de referencia (image-to-image).
countIntegerNoNúmero de imágenes (≥0).
resolutionStringNoResolución (ver /v1/image-models).
ratioStringNoRelación de aspecto.
callbackUrlStringNoURL del webhook a nivel de tarea.
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"}
}

Respuestas de error:

// 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}

Consulta una tarea de generación de imágenes. status es pending / success / failed. images es un arreglo de URLs de imágenes serializado en JSON; text contiene cualquier descripción de texto adjunta por el modelo (por ejemplo, salida multimodal de Gemini), null en caso contrario.

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 respuesta data:

CampoTipoDescripción
taskIdStringID de la tarea.
statusStringpending / success / failed.
errorMessageStringMotivo de falla, null en caso de éxito.
imagesStringArreglo de URLs de imágenes serializado en JSON, por ejemplo "[\"https://.../1.png\"]".
textStringDescripción de texto adjunta por el modelo (por ejemplo, salida multimodal de Gemini); null en caso contrario.

Tarea no encontrada:

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

Si se proporcionó callbackUrl al enviar, el servidor envía el resultado final success / failed a través del webhook con la misma estructura de data.

Ejemplo completo (envío + consulta)
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

Envía asíncronamente una tarea de generación de video. Devuelve un taskId inmediatamente; recupere el resultado consultando GET /v1/video-generations/{taskId} o a través de un webhook callbackUrl.

El model, los valores permitidos de videoType, el rango de duración (videoDurationMin/Max), la resolution / ratio soportadas y el límite de subida de recursos de referencia (fileMax) deben obtenerse primero de GET /v1/video-models. Solo se aceptan los códigos de videoType listados en allowedVideoTypes de ese modelo.

CampoTipoRequeridoDescripción
textStringPrompt.
modelStringNombre del modelo.
videoTypeInteger1 text-to-video / 2 image-to-video (primer frame) / 3 image-to-video (primer y último frame) / 4 image-to-video (referencia) / 5 toda referencia.
imageUrlsString[]NoURLs de recursos de imagen.
videoUrlsVideoUrl[]|String[]NoURLs de recursos de video.
audioUrlsString[]NoURLs de recursos de audio.
resolutionStringNoResolución.
ratioStringNoRelación de aspecto.
durationLongNoSegundos (>0).
callbackUrlStringNoURL del webhook a nivel de tarea.

Ejemplos para cada videoType:

1. Texto a video (videoType=1)

Genera un video solo a partir de un prompt de texto; no se necesitan recursos de referencia.

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. Imagen a video - primer frame (videoType=2)

Proporcione un único frame inicial en imageUrls; el modelo genera un video que comienza desde ese frame.

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. Imagen a video - primer y último frame (videoType=3)

Proporcione tanto el primer como el último frame en imageUrls (orden: [primero, último]); el modelo genera un video de transición entre los dos frames.

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. Imagen a video - referencia (videoType=4)

Proporcione una o más imágenes de referencia en imageUrls; el modelo usa su estilo/contenido como referencia (no como primer/último frame forzado) para generar el video.

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. Toda referencia (videoType=5)

Referencias mixtas de imagen / video / audio. Referencie recursos por posición en el prompt: la 1ª entrada en imageUrls es @图片 1, la 1ª en videoUrls es @视频 1, la 1ª en audioUrls es @音频 1. videoUrls también acepta cadenas 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
  }'

Respuesta de envío (los cinco tipos):

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

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

Consulta una tarea de generación de video. status es pending / success / failed; videoUrl es la URL del video generado y lastFrameUrl es la URL del último frame (escenarios de image-to-video).

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 respuesta data:

CampoTipoDescripción
statusStringpending / success / failed.
videoUrlStringURL del video generado.
lastFrameUrlStringURL del último frame (escenarios de image-to-video); null en caso contrario.
messageStringMotivo de falla, null en caso de éxito.

Si se proporcionó callbackUrl al enviar, el servidor envía el resultado final a través del webhook con la misma estructura de data.

Ejemplo completo (envío + consulta)
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

Devuelve el saldo de la cuenta dividido en tres monederos: plan mensual, paquetes de recursos y crédito de pago por uso.

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 respuesta:

CampoTipoDescripción
totalCreditBigDecimalSaldo total.
totalResourceCreditBigDecimalSuma de los saldos de paquetes de recursos.
wallets.monthlyPlanWalletDetailPlan mensual (null si no hay).
wallets.resourcePacksWalletDetail[]Lista de paquetes de recursos.
wallets.payAsYouGoBigDecimalSaldo de pago por uso.

Campos de WalletDetailVO::

CampoTipoDescripción
idStringId del monedero.
creditBigDecimalCréditos del saldo.
nameStringNombre del monedero.

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

Detalles de facturación de llamadas a modelos paginadas, con instantánea por precio (priceSnapshotId), ordenados por tiempo de creación del orden de forma descendente. Solo se devuelven los registros de cobro normales (reason = model usage).

Parámetros de consulta:

ParámetroTipoRequeridoPredeterminadoDescripción
pageIntegerNo1Número de página, basado en 1.
sizeIntegerNo20Tamaño de página (paginado por priceSnapshotId).
startTimeLocalDateTimeNoHora de inicio, formato yyyy-MM-ddTHH:mm:ss, filtra por orderCreatedAt de la instantánea.
endTimeLocalDateTimeNoHora de fin, 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"

Contenedor de respuesta:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
CampoTipoDescripción
recordsUsageDetailVO[]Registros de la página actual.
totalLongConteo total.
currentLongPágina actual.
sizeLongTamaño de página.
pagesLongTotal de páginas.

Campos de UsageDetailVO:

CampoTipoDescripción
priceSnapshotIdStringId de la instantánea de precio.
taskIdStringId de la tarea.
creditBigDecimalMonto cobrado.
modelStringNombre del modelo.
modelTypeStringtext / image / video.
inputTokensLongTokens de entrada; null para imagen/video.
outputTokensLongTokens de salida.
totalTokensLongTotal de tokens.
cacheReadTokensLongTokens leídos de caché.
cacheWriteTokensLongTokens escritos en caché.
imageCountIntegerCantidad de imágenes; establecido para modelos de imagen.
imageResolutionStringResolución de imagen, p. ej. 720P.
imageRatioStringRelación de aspecto de imagen, p. ej. 1:1.
videoResolutionStringResolución de video, p. ej. 1080p.
videoRatioStringRelación de aspecto de video, p. ej. 16:9.
videoDurationSecLongDuración del video en segundos.
orderCreatedAtLocalDateTimeTiempo de creación del orden (orderCreatedAt de la instantánea).
creditDetailsCreditDetailItem[]Detalles de orden bajo esta instantánea (de credit_order_t).

Campos de CreditDetailItem:

CampoTipoDescripción
creditBigDecimalMonto cobrado por esta orden.
deductionSourceStringOrigen de deducción (Balance / Monthly Package / Resource Package).
packageNameStringNombre del paquete; null si no hay paquete.

Convención de valores nulos: solo se completan los campos relevantes para cada modelType; el resto son null. text completa los campos de tokens; image completa imageCount/imageResolution/imageRatio; video completa videoResolution/videoRatio/videoDurationSec.

Ejemplo de respuesta:

{
  "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 de las transacciones de recarga pagadas (status=2) del usuario actual, ordenadas por created_at de forma descendente.

ParámetroTipoRequeridoPredeterminadoDescripción
pageIntegerNo1Número de página.
sizeIntegerNo20Tamaño de página.
startTimeStringNoHora de inicio, yyyy-MM-dd HH:mm:ss, inclusivo.
endTimeStringNoHora de fin, 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"

Contenedor de respuesta:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
CampoTipoDescripción
recordsTransactionVO[]Transacciones de la página actual.
totalLongConteo total.
currentLongPágina actual.
sizeLongTamaño de página.
pagesLongTotal de páginas.

Campos de TransactionVO:

CampoTipoDescripción
orderNoStringNúmero de orden.
thirdPartyOrderNoStringNúmero de orden de terceros.
amountBigDecimalMonto de la orden.
actualAmountBigDecimalMonto efectivamente pagado.
discountBigDecimalMonto de descuento.
paymentMethodStringMétodo de pago (wechat / alipay / ustd / stripe / wallyt etc.).

Campos de TransactionVO:

CampoTipoDescripción
serviceFeeAmountBigDecimalMonto de la tarifa de servicio.
paymentChannelStringPlataforma de pago.
sourceStringOrigen de la orden (recharge / package_purchase etc.).
packageNameStringNombre del paquete (establecido para compras de paquetes; null para recargas simples).
createdAtLocalDateTimeTiempo de creación.
{
  "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
  }
}

Operativo

Errores

BasicRouter devuelve códigos de error estables para que las aplicaciones puedan manejar reintentos, respaldos, problemas de facturación y depuración de forma consistente.

Los endpoints compatibles con proveedores intentan preservar la forma de error de la familia de API original cuando es posible. Los endpoints nativos de BasicRouter usan el objeto de error de BasicRouter.

Mapeo de estados HTTP y códigos de error

Estado HTTPTipo de errorCódigos de ejemploReintentar
400invalid_request_errorinvalid_request, unsupported_parameter, invalid_messages, invalid_image_urlNo
401authentication_errormissing_api_key, invalid_api_keyNo
402billing_errorinsufficient_credits, payment_required, quota_exceededNo
403permission_errormodel_access_denied, endpoint_access_denied, key_scope_deniedNo
404not_found_errormodel_not_found, response_not_found, task_not_foundNo
408timeout_errorgateway_timeout, provider_timeout
409conflict_erroridempotency_conflict, task_already_cancelledDepende
422validation_errorschema_validation_failed, unsupported_modalityNo
429rate_limit_erroraccount_rpm_exceeded, account_tpm_exceeded, provider_rate_limited
500internal_errorinternal_error
502provider_errorprovider_bad_gateway, provider_invalid_response
503service_unavailablemodel_unavailable, provider_unavailable, insufficient_capacity
504timeout_errorprovider_timeout, gateway_timeout

Códigos de error comunes

CódigoSignificadoAcción recomendada
missing_api_keyNo se proporcionó una clave API.Agregue el encabezado Authorization.
invalid_api_keyLa clave API es inválida o ha sido revocada.Cree o rote la clave API.
model_not_foundEl ID del modelo no existe o no está habilitado para la cuenta.Consulte la página de Modelos o llame a GET /v1/models.
model_access_deniedLa clave API o la cuenta no tiene acceso al modelo.Habilite el modelo o contacte al administrador.
unsupported_parameterLa solicitud incluye un parámetro no soportado por el endpoint o modelo seleccionado.Elimine el parámetro o elija un modelo compatible.
unsupported_modalityLa modalidad de entrada o salida no es soportada por el modelo seleccionado.Elija un modelo que soporte la modalidad.
account_rpm_exceededSe excedió el límite de solicitudes por minuto de la cuenta.Reintente con backoff o solicite límites más altos.
account_tpm_exceededSe excedió el límite de tokens por minuto de la cuenta.Reintente con backoff, reduzca tokens o solicite límites más altos.
provider_rate_limitedEl proveedor aguas arriba limitó la solicitud.Reintente o habilite el respaldo.
insufficient_creditsLa cuenta no tiene créditos suficientes.Recargue el monedero, compre un paquete o mejore el plan.
provider_timeoutEl proveedor aguas arriba no respondió a tiempo.Reintente o habilite el respaldo.
model_unavailableEl modelo no está disponible temporalmente.Reintente o use un alias de enrutamiento.
content_policy_errorLa solicitud o salida fue bloqueada por una política de seguridad.Modifique la entrada o elija un flujo de trabajo adecuado.
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 积分