RouterShift ofrece interfaces compatibles con OpenAI, Anthropic y Gemini para los modelos activos para tu clave. Routing, failover, facturación y evidencia de auditoría se aplican tras el límite de protocolo.
Características Principales
API compatible con OpenAI — reemplazo directo para cualquier cliente SDK de OpenAI
Enrutamiento inteligente con estrategias configurables (ponderado, round-robin, basado en latencia, failover)
Circuit breaker y limitación de tasa integrados para proteger tu aplicación
Caché semántica para reducir latencia y costos en consultas repetidas
Registro, monitoreo y análisis de gastos completos
Soporte multiproveedor con failover automático cuando un proveedor no está disponible
URL Base
Todas las solicitudes a la API usan la siguiente URL base. La API es totalmente compatible con las librerías cliente de OpenAI — solo cambia la URL base y usa tu clave API de RouterShift.
https://api.routershift.com/v1
Base URL compatible con Anthropic
Para el SDK de Anthropic o Claude Code. Nota: sin sufijo /v1 — el SDK añade /v1/messages automáticamente.
https://api.routershift.com
Compatibilidad con OpenAI
Los clientes OpenAI, Anthropic y Gemini suelen conectarse cambiando la URL base y la credencial. Las extensiones del protocolo nativo no son automáticamente portables: la conversión entre protocolos solo admite campos con semántica equivalente. Consulte OpenAPI para las interfaces documentadas; siguen aplicándose las restricciones de rutas y modelos.
Categorías de Modelos Soportados
GET /v1/models es la autoridad para los modelos disponibles para tu clave. La disponibilidad también depende de producto, salud de ruta, permisos, saldo, región y acceso privado.
Obtener Ayuda
Si encuentras problemas o tienes preguntas, consulta las secciones a continuación para guías detalladas. Para consultas de facturación, contacta al soporte a través de la consola. Para actualizaciones de estado en tiempo real, visita la página de Estado.
Lista completa de endpoints
La tabla es un índice legible del plano de datos público. Usa /api/openapi.yaml como contrato de máquina y /api/docs como referencia interactiva; siguen aplicando los alcances de clave.
GET/v1/version
Versión y compatibilidad de la API de datos
GET/v1/models
Listado de modelos
GET/v1/requests/:id
Recibo original: consultar pruebas de ejecución y facturación sin reenviar
GET/v1/requests/:id/result
Resultado de audio capturado: leer resultados originales compatibles sin generar de nuevo
POST/v1/chat/completions
Completado de chat (compatible con OpenAI)
POST/v1/contracted/chat/completions
Completado de chat (compatible con OpenAI)
POST/v1/messages
API de mensajes (compatible con Anthropic)
POST/v1/messages/count_tokens
Estimación de tokens de Messages (texto, razonamiento y herramientas; no es uso nativo exacto)
Tarea de imagen: consultar una tarea existente sin reenviar la generación
POST/v1/audio/transcriptions
Transcripción de audio
POST/v1/audio/speech
Texto a voz
POST/v1/contracted/audio/speech
Texto a voz
POST/v1/tts
Texto a voz extendido
POST/v1/transcriptions
Transcripción extendida
POST/v1/contracted/transcriptions
Transcripción extendida
POST/v1/midjourney/imagine
Generación de imágenes Midjourney
POST/v1/suno/generate
Generación de música Suno
POST/v1/video/generations
Tarea de generación de video
POST/v1/contracted/video/generations
Tarea de generación de video
GET/v1/video/tasks/:task_id
Estado de la tarea de vídeo
POST/v1/chat/completions/async
Tarea asíncrona — Enviar
GET/v1/chat/completions/async/:task_id
Tarea asíncrona — Verificar estado
GET/v1/chat/completions/async/:task_id/result
Tarea asíncrona — Obtener resultado
POST/v1/batch
Procesamiento por lotes
GET/v1/batch/:batch_id
Estado del trabajo por lotes
GET/v1/batch/:batch_id/results
Descarga de resultados por lotes
POST/v1/batch/:batch_id/cancel
Cancelar trabajo por lotes
POST/v1/mcp/
Pasarela de herramientas MCP JSON-RPC
GET/v1/mcp/sse
Transporte SSE de MCP
POST/v1/a2a/
Pasarela JSON-RPC A2A
GET/v1/a2a/sse
Flujo de eventos SSE de A2A
Método
Ruta
Descripción
GET
/v1/version
Versión y compatibilidad de la API de datos
GET
/v1/models
Listado de modelos
GET
/v1/requests/:id
Recibo original: consultar pruebas de ejecución y facturación sin reenviar
GET
/v1/requests/:id/result
Resultado de audio capturado: leer resultados originales compatibles sin generar de nuevo
POST
/v1/chat/completions
Completado de chat (compatible con OpenAI)
POST
/v1/contracted/chat/completions
Completado de chat (compatible con OpenAI)
POST
/v1/messages
API de mensajes (compatible con Anthropic)
POST
/v1/messages/count_tokens
Estimación de tokens de Messages (texto, razonamiento y herramientas; no es uso nativo exacto)
POST
/v1/models/gemini/:model/generateContent
Generación de contenido de Gemini
POST
/v1/models/gemini/:model/streamGenerateContent
Generación de contenido en streaming de Gemini
POST
/v1/embeddings
Embeddings de texto
POST
/v1/rerank
Reordenación
POST
/v1/chat/completions/estimate
Estimación previa de tokens y coste
POST
/v1/images/generations
Generación de imágenes
POST
/v1/contracted/images/generations
Generación de imágenes
GET
/v1/images/tasks/:id
Tarea de imagen: consultar una tarea existente sin reenviar la generación
POST
/v1/audio/transcriptions
Transcripción de audio
POST
/v1/audio/speech
Texto a voz
POST
/v1/contracted/audio/speech
Texto a voz
POST
/v1/tts
Texto a voz extendido
POST
/v1/transcriptions
Transcripción extendida
POST
/v1/contracted/transcriptions
Transcripción extendida
POST
/v1/midjourney/imagine
Generación de imágenes Midjourney
POST
/v1/suno/generate
Generación de música Suno
POST
/v1/video/generations
Tarea de generación de video
POST
/v1/contracted/video/generations
Tarea de generación de video
GET
/v1/video/tasks/:task_id
Estado de la tarea de vídeo
POST
/v1/chat/completions/async
Tarea asíncrona — Enviar
GET
/v1/chat/completions/async/:task_id
Tarea asíncrona — Verificar estado
GET
/v1/chat/completions/async/:task_id/result
Tarea asíncrona — Obtener resultado
POST
/v1/batch
Procesamiento por lotes
GET
/v1/batch/:batch_id
Estado del trabajo por lotes
GET
/v1/batch/:batch_id/results
Descarga de resultados por lotes
POST
/v1/batch/:batch_id/cancel
Cancelar trabajo por lotes
POST
/v1/mcp/
Pasarela de herramientas MCP JSON-RPC
GET
/v1/mcp/sse
Transporte SSE de MCP
POST
/v1/a2a/
Pasarela JSON-RPC A2A
GET
/v1/a2a/sse
Flujo de eventos SSE de A2A
Correspondencia de protocolos
RouterShift es compatible con múltiples protocolos API. La siguiente tabla muestra la base URL y la configuración del SDK para cada uno.
Compatible con OpenAI
https://api.routershift.com/v1
Models: <available-model-code>
Authorization: Bearer / x-api-key
Compatible con Anthropic
https://api.routershift.com
Models: <available-model-code>
x-api-key: sk-xxx
Gemini nativo
https://api.routershift.com/v1
Models: <available-model-code>
Authorization: Bearer
URL base
Ejemplo de parámetro de modelo
Encabezado de autenticación
https://api.routershift.com/v1
SDK estándar de OpenAI — solo cambia base_url
<available-model-code>
Authorization: Bearer / x-api-key
https://api.routershift.com
SDK estándar de Anthropic — solo cambia base_url
<available-model-code>
x-api-key: sk-xxx
https://api.routershift.com/v1
Formato nativo de Gemini, llama a generateContent directamente
<available-model-code>
Authorization: Bearer
Autenticación unificada
Todos los endpoints usan la misma autenticación. Ambos formatos de encabezado funcionan de manera idéntica:
Formato compatible con OpenAI
Authorization: Bearer sk-xxx
Formato compatible con Anthropic
x-api-key: sk-xxx
Capacidades de la plataforma
Resumen de la API de RouterShift
RouterShift ofrece interfaces compatibles con OpenAI, Anthropic y Gemini para los modelos activos para tu clave. Routing, failover, facturación y evidencia de auditoría se aplican tras el límite de protocolo.
RouterShift usa billeteras prepagadas y precios fijados por solicitud. Las solicitudes correctas se cargan al precio de venta al cliente y según las dimensiones configuradas para cada producto.
Características Principales
GET /v1/models es la autoridad para los modelos disponibles para tu clave. La disponibilidad también depende de producto, salud de ruta, permisos, saldo, región y acceso privado.
API compatible con OpenAI — reemplazo directo para cualquier cliente SDK de OpenAI
Enrutamiento inteligente con estrategias configurables (ponderado, round-robin, basado en latencia, failover)
Circuit breaker y limitación de tasa integrados para proteger tu aplicación
RouterShift ofrece chat, embeddings, descubrimiento de modelos y otros endpoints admitidos. Use el formato de solicitud y respuesta del endpoint elegido, compatible con OpenAI, Anthropic o Gemini.
Añada herramientas al agente mediante MCP o use el SDK Python/Node en su aplicación: son opciones de acceso paralelas. Siga estos cuatro pasos de stdio local y no incluya credenciales en configuraciones compartidas ni en el control de versiones.
Crear un directorio dedicado e instalar MCP
Configurar el cliente stdio local
Reiniciar el conector y verificar diez herramientas
RouterShift usa billeteras prepagadas y precios fijados por solicitud. Las solicitudes correctas se cargan al precio de venta al cliente y según las dimensiones configuradas para cada producto.
Concilia estado, latencia, uso nativo, fuente de caché y gasto por fecha, modelo y clave API; configura presupuestos y alertas cuando estén disponibles.
Integraciones de SDK y agentes
Usa hoy un cliente compatible estándar o adopta los SDK de datos de Python y Node.js de RouterShift; ambos comparten el mismo contrato de API activo.
Descargas de Python 0.3.7 y Node 0.3.7
Las descargas de versión fija de esta página corresponden a Python 0.3.7 y Node 0.3.7 e incluyen el descubrimiento detallado de modelos. Se requiere Python 3.9 o posterior; Node.js y MCP local requieren Node 20 o posterior. Estos archivos no implican publicación en npm o PyPI. El SDK Node normal no necesita dependencias MCP opcionales.
No se necesitan el código fuente del cliente ni credenciales del proveedor. Comparta lenguaje/entorno y versión del SDK, model_code + operation + mode, parámetros anonimizados, límites multimedia y caducidad de URL, recuperación, presupuesto por moneda y concurrencia. REST es el contrato de ejecución; los SDK son clientes ligeros opcionales y MCP local es una entrada stdio para agentes. El SDK propio usa un origen sin /v1. Un SDK del proveedor puede necesitar ajustes de campos y reintentos; cambiar solo la clave o URL base no garantiza compatibilidad multimodal. Acuerde muestras anónimas de solicitud/respuesta y resultados esperados. Pruebe primero respuestas sintéticas 200/202, GET pendiente, SSE incompleto, envío desconocido y entrega duplicada; la aceptación de pago requiere autorización y presupuesto explícitos.
Ejecute primero esta solicitud de solo lectura y copie un código de modelo exacto en los ejemplos siguientes. La lista muestra lo que puede ver la clave; no confirma que cada operación o modo esté habilitado para ese modelo.
Consulte GET /v1/models?details=1 con la misma clave de ejecución: no crea tareas, reserva fondos ni llama al proveedor; siguen aplicándose autenticación, registros y límites. Revise rutas/modos de details.operations, constraints.status e import_contract.status/reason. Conserve dimensiones, condiciones, moneda, precisión, selectores, hora de observación y semantic_sha256. El precio de referencia no es un contrato ejecutable. Los límites ausentes/desconocidos no permiten entradas ilimitadas; available no garantiza fondos. No es un Schema de entrada completo ni una proyección universal de contratos sin tokens. models.list() sigue siendo la lista normal por defecto; solicite detalles explícitos con los métodos incluidos en el SDK o REST. En constraints, available describe el subconjunto revisado de la operación; unsupported requiere la guía específica.
Distinga details.constraints.operations[].scope: reviewed_subset es un subconjunto revisado de la operación; finite_admission_opt_in solo afecta a solicitudes con límite finito explícito, no a todo chat normal. parameters no es un Schema completo de entrada. Si existe details.admission, revise status, profile, /details/admission/required_headers y los límites declarados de entrada/salida; los modelos desconocidos siguen unavailable. El descubrimiento no concede fondos ni un límite de precio universal.
Node 0.3.7 incluye listDetails() y la opción details=true de models.list; Python 0.3.7 incluye models.list(details=True) y list_details(). Estos métodos de descubrimiento detallado están incluidos en los paquetes de esta versión. models.list() mantiene la lista normal por defecto; las instalaciones antiguas no adquieren métodos nuevos automáticamente.
Python, Node y MCP pueden llamar a modelos de texto. El agente puede conservar su modelo principal y usar RouterShift cuando lo necesite. Los permisos y cargos siguen en la misma API.
import os
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
response = client.chat.completions.create(
model="YOUR_TEXT_MODEL_CODE",
messages=[{"role": "user", "content": "Summarize this project in one sentence."}],
request_options=RequestOptions(max_retries=0),
)
print(response.choices[0].message.content)
Solicitudes Omni por HTTP
El ejemplo envía audio WAV y solicita texto y audio mediante transmisión HTTP. Elija una ruta compatible con OpenAI ya validada, con modo stream y voz admitidos por el modelo. Los modelos que solo admiten SSE requieren stream:true; routershift_chat también acepta esta opción. El SDK conserva bloques de contenido, audio, modalidades, llamadas a herramientas y respuestas de audio. HTTP Omni no ofrece WebSocket Realtime ni conversión arbitraria entre protocolos de proveedores.
import base64
import os
from pathlib import Path
from routershift import RequestOptions, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
audio_data = base64.b64encode(Path("/absolute/path/to/sample.wav").read_bytes()).decode()
response = client.chat.completions.create(
model="YOUR_OMNI_MODEL_CODE",
messages=[{"role": "user", "content": [
{"type": "text", "text": "Describe the sound."},
{"type": "input_audio", "input_audio": {"data": audio_data, "format": "wav"}},
]}],
stream=True,
modalities=["text", "audio"],
audio={"voice": "YOUR_MODEL_VOICE", "format": "wav"},
request_options=RequestOptions(max_retries=0),
)
for chunk in response:
if chunk.choices:
delta = chunk.choices[0].delta or {}
print(delta.get("content", ""), end="")
if delta.get("audio"):
print(delta["audio"].get("transcript", ""), end="")
Generación de voz
audio.speech llama a /v1/audio/speech. Python devuelve bytes de audio; Node devuelve bytes en data y el contentType real. Elija una voz y un formato admitidos. El audio no se guarda automáticamente en archivos locales.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
speech = client.audio.speech(
model="YOUR_SPEECH_MODEL_CODE",
input="Welcome to RouterShift.",
voice="YOUR_MODEL_VOICE",
response_format="wav",
)
print(len(speech))
Transcripción de audio
audio.transcribe envía el archivo de audio seleccionado explícitamente mediante multipart a /v1/audio/transcriptions. Conserve su extensión real. El ejemplo solicita JSON y lee text; los idiomas y formatos admitidos dependen de la ruta.
import os
from pathlib import Path
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe(
model="YOUR_TRANSCRIPTION_MODEL_CODE",
file=Path("/absolute/path/to/sample.wav").read_bytes(),
filename="sample.wav",
response_format="json",
)
print(transcript.text)
Transcribir una URL de audio HTTPS
Use audio.transcribe_url en Python, audio.transcribeURL en Node.js o envíe JSON a /v1/transcriptions con file_url. El SDK valida la URL HTTPS y no descarga la grabación localmente. Las pestañas Go y Java usan sus clientes HTTP estándar; RouterShift no afirma ofrecer SDK propios para Go o Java.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
transcript = client.audio.transcribe_url(
"YOUR_TRANSCRIPTION_MODEL_CODE",
"https://media.example/recording.wav",
language="en",
audio_format="wav",
response_format="json",
)
print(transcript.text)
Generar imágenes y consultar tareas de imagen
Use images.generate con un modelo habilitado para generar imágenes. Para modelos con imágenes asíncronas, añada async_=True en Python o async: true en Node.js y consulte el id devuelto con images.retrieve. La respuesta final contiene data con las URL de las imágenes; una respuesta pendiente contiene id y status.
import os
from routershift import ImageTaskResponse, RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
image = client.images.generate(
model="YOUR_IMAGE_MODEL_CODE",
prompt="A quiet garden in watercolor",
)
print(image)
if isinstance(image, ImageTaskResponse):
print(client.images.retrieve(image.id))
Enviar un vídeo y consultar su estado
videos.create envía una tarea de vídeo y devuelve task_id. Guárdelo antes de consultar videos.retrieve; una tarea pendiente puede no tener todavía video_url. Ambos SDK ofrecen videos.poll para esperar con un límite de tiempo. La ruta de la API es /v1/video/generations, con video en singular.
Las rutas nativas verificadas de Seedance y Wan 3.0 admiten generate_audio: omítalo para conservar el valor del proveedor, false para quitar el audio y true para incluirlo. Wan lo convierte en parameters.audio y actualmente incluye sonido por defecto. Activarlo o desactivarlo usa la misma tarifa de vídeo Wan, sin cargo adicional de audio. Otras rutas pueden no admitirlo; los valores explícitos no se descartan silenciosamente.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
task = client.videos.create(
model="YOUR_VIDEO_MODEL_CODE",
prompt="A slow camera movement through a garden",
)
print(task.task_id)
result = client.videos.retrieve(task.task_id)
print(result.status, result.video_url)
Elegir parámetros según el modelo
Envíe solo parámetros validados para el modelo y la operación elegidos. Conserve false explícito y seed=0; omitir un campo mantiene el valor predeterminado del proveedor. Estas notas describen la implementación, no una disponibilidad en producción verificada.
Qwen Image 3.0: seed, watermark, prompt_extend y enable_thinking son controles específicos del modelo. prompt_extend_mode acepta direct o agent; agent requiere ampliar el prompt y no se usa para editar imágenes. enable_thinking solo se aplica con la ampliación del prompt activada y no activa prompt_extend implícitamente.
Vídeo Wan 3.0: seed, watermark y prompt_extend son controles específicos del modelo. Use generate_audio para generar audio; que sea opcional, obligatorio o no compatible depende del modelo. Los medios file/link requieren prompt_extend=true u omisión; false explícito se rechaza.
Ark Seedance: la ruta actual de la plataforma no acepta seed ni prompt_extend. No reutilice parámetros de Qwen o Wan entre proveedores.
Soporte en el código no equivale a despliegue, ni despliegue a validación del producto. La edición avanzada, extensión de vídeo, MOV, Draft, HappyHorse, Wan 2.7, Animate y VACE en desarrollo sin conexión no implican productos habilitados. Confirme modelo, operación y parámetros antes de una solicitud de pago.
De imágenes de referencia a vídeo con primer fotograma (REST, SDK, MCP)
Este ejemplo genera una imagen a partir de tres referencias HTTPS sin retratos y pasa su URL HTTPS como image_url para el primer fotograma del vídeo. Sustituya ambos modelos por códigos visibles para su clave en /v1/models y aceptados por separado para cada operación; la visibilidad no basta. Los 720p y 5 segundos del ejemplo requieren que la ruta de vídeo elegida los admita.
Ark: use una ruta aceptada de edición de imágenes Seedream Pro y una ruta Seedance de primer fotograma. Solo un modelo que admita tres referencias puede recibirlas así; 2048x1152 no es un tamaño universal. Los retratos de personas reales tienen reglas propias; una excepción de texto a imagen en la misma cuenta no autoriza fusionar tres fotos.
Bailian: una ruta aceptada de edición Qwen Image 3.0 admite de una a tres referencias y devuelve una URL; no espere b64_json ni dé por habilitado el modo asíncrono de imagen. Wan usa image_url para el primer fotograma. La resolución y la duración deben estar aceptadas por la ruta elegida; una función en la consola del proveedor no demuestra que la ruta de la plataforma esté habilitada.
Las pestañas muestran una secuencia, no reintentos automáticos. En REST o MCP, invoque cada paso por separado. Omita la consulta de la tarea de imagen si ya recibió una URL final; en caso contrario, consulte una vez la tarea original y continúe solo con una URL HTTPS utilizable. Guarde el task_id del vídeo y consulte esa misma tarea una vez; una tarea pendiente puede consultarse más tarde.
Las tareas de imagen REST y SDK devuelven id, mientras que las de vídeo devuelven task_id. Los resultados MCP locales exponen structuredContent.task_id cuando hay un ID de tarea: revise isError y next_action, y después lea structuredContent.outputs[].url o el contenido de imagen MCP adjunto. Solo una URL HTTPS real puede pasarse como image_url del vídeo; el contenido de imagen adjunto por sí solo no es una URL. No suponga que MCP devuelve data[0].url de REST.
Un rechazo 400 recibido difiere de un tiempo de espera de transporte cuyo resultado de envío se desconoce. Ante un error, conserve el código y mensaje seguros, X-Request-ID y el ID de tarea si existe; no espere motivos originales del proveedor ni reenvíe automáticamente un POST facturable. Una consulta fallida de tarea solo deja el estado sin confirmar, no demuestra que falló la generación. Agotar la espera no cancela ni reembolsa el trabajo. Presupuesto, cobro y liquidación siguen los registros de la plataforma, no este ejemplo ni el precio mostrado por el proveedor.
Añadir herramientas de modelos al agente
Añada herramientas al agente mediante MCP o use el SDK Python/Node en su aplicación: son opciones de acceso paralelas. Siga estos cuatro pasos de stdio local y no incluya credenciales en configuraciones compartidas ni en el control de versiones.
1. Crear un directorio dedicado e instalar MCP
Use Node 20 o posterior. Esta instalación exclusiva para MCP añade las dos dependencias pares del protocolo; la instalación normal del SDK Node no las necesita.
Sustituya la ruta de ejemplo, defina la clave API solo en el entorno local y conserve el origen de API de confianza sin /v1, credenciales, consulta ni fragmento. La pestaña Codex usa la sintaxis documentada de stdio y env_vars.
4. Reiniciar el conector y verificar diez herramientas
Reinicie o recargue el cliente MCP, confirme que aparecen las diez herramientas y ejecute primero routershift_list_models, que es de solo lectura. Invoque una herramienta de modelo facturable solo cuando quiera enviar esa operación.
Hay diez herramientas: routershift_list_models, routershift_estimate_chat, routershift_chat, routershift_generate_image, routershift_create_video, routershift_get_task, routershift_get_request, routershift_speech, routershift_transcribe, routershift_transcribe_url. Elija primero un modelo compatible con la operación. Consulte tareas de imagen o vídeo con routershift_get_task, indicando kind (image o video) y task_id. Consulte el comprobante de una solicitud con routershift_get_request y request_id, en modo de solo lectura; esto no envía ni activa una operación de pago. En 0.3.7, details:true consulta modelos y contratos detallados. routershift_estimate_chat solo consulta un límite superior finito de admisión: sin llamada al proveedor, reserva ni ejecución automática; funds_verified=false. La cotización no es la factura final ni una autorización de ejecución.
routershift_chat acepta referencias HTTPS de imágenes y vídeo; audio_file lee una ruta absoluta WAV/MP3 seleccionada explícitamente, hasta 16 MiB. routershift_transcribe lee un archivo local seleccionado mediante file_path; routershift_transcribe_url pasa un file_url HTTPS sin descargarlo. La voz y el audio Omni se devuelven integrados. routershift_generate_image acepta response_format url o b64_json; si la salida b64_json es un PNG, JPEG, WebP o GIF válido y de tamaño limitado, devuelve contenido image nativo de MCP sin escribir, descargar ni realojar archivos y sin copiar Base64 en JSON de texto. Los datos demasiado grandes o de formato desconocido se omiten explícitamente; no repita una solicitud de pago para recuperar una salida omitida. El adaptador no explora directorios ni guarda resultados automáticamente.
La pestaña JSON muestra la estructura mcpServers habitual; la pestaña TOML muestra la sintaxis documentada de Codex. Las ubicaciones de configuración y los permisos de subprocesos varían según el cliente. Los clientes exclusivamente remotos necesitan otro transporte compatible; estos ejemplos no afirman haberse probado en todas las interfaces de agentes.
El adaptador MCP local permite llamar a las API de texto, multimodalidad, audio y tareas de RouterShift. La pasarela /v1/mcp existente da acceso a herramientas externas configuradas. Su configuración HTTP/SSE no sustituye la configuración local de herramientas de modelos mostrada aquí.
Acceso a modelos, espera y facturación
Plataformas UGC: enviar una vez, guardar el ID de tarea y el X-Request-ID original, y consultar la misma tarea. Un ID de trabajo propio no garantiza una repetición segura en el servidor. REST, SDK y MCP comparten tareas y facturación; cambiar de acceso no debe repetir una generación incierta.
Con import_contract disponible y una operación compatible, use endpoint_prefix/request_header (X-RouterShift-Customer-Contract) en /v1/contracted/... con la solicitud completa y semantic_sha256. Esa cabecera en una ruta /v1 normal no activa protección. Deténgase ante contrato incompatible, 404 o cambio de resumen; no reenvíe sin protección. El chat protegido también exige X-RouterShift-Token-Bound, X-RouterShift-Max-Admission-Quote y X-RouterShift-Quote-Currency con un contrato finito verificado de entrada/salida/razonamiento. No los deduzca del resumen ni del contexto. Una simulación pública o admission_quote con bound_proven=false o funds_verified=false no autoriza gastos ni fija un límite universal.
Registrar por separado envío, ejecución, entrega y facturación. Si falta el ID de tarea, investigar sin otro POST. Un GET fallido solo deja el estado no disponible. Si la generación terminó pero falló la descarga, recuperar la entrega del mismo resultado conocido. released y reconciliation_required finalizan el sondeo; no prueban éxito ni reembolso.
Guarde el ID original y consulte GET /v1/requests/ORIGINAL_REQUEST_ID para el recibo. GET /v1/requests/ORIGINAL_REQUEST_ID/result solo recupera resultados de audio capturados compatibles; no es un almacén universal. Python 0.3.7 (desde 0.3.6) audio.retrieve/poll consulta ASR nativo 202; Node 0.3.7 no anuncia métodos equivalentes. Estos GET no reenvían ni asumen recuperación contable. Guarde resultados síncronos e IDs asíncronos reales. Separe envío desconocido, fallo de entrega y liquidación pendiente; un tiempo agotado no autoriza repetir un POST de pago.
Con receipt.metering.basis=recorded_settlement_context solo se exponen dimensiones registradas de solicitudes ya liquidadas. No es un recibo nativo del proveedor, una factura ni un desglose completo. Conserve las cadenas quantity/unit/pricing_unit_divisor; la evidencia ausente o no admitida sigue unavailable. No sustituya uso desconocido por cero, deduzca cargos finales ni active recuperación desde esta proyección de solo lectura.
El estado y la lista de chats asíncronos conservan status y añaden execution_status, billing_status, reason_code, next_action y retry_allowed: false. completed indica un resultado disponible, no una liquidación terminada; unknown no significa gratuito ni reembolsado. _billing_status del SDK de imágenes y billing_status de MCP solo copian la cabecera real X-Billing-Status de la lista permitida; si falta o es inválida, no añaden valor. Consultar no inicia la recuperación de facturación ni autoriza otro envío.
Copie el identificador completo desde los gastos del usuario o los registros de solicitudes del administrador y busque por request_id exacto: UTF-8 válido, no vacío, máximo 256 bytes, sin espacios ni caracteres de control. Se mantienen los permisos y filtros de tiempo y modelo; ningún resultado no demuestra que no hubo aceptación o cargo. Conserve por separado el identificador del envío original, el de la tarea y los de consultas posteriores. El CSV sigue abarcando todo el intervalo seleccionado, no solo las filas filtradas por identificador.
Controlar nuevos envíos con la cola y los límites por usuario de la aplicación; consultar con límites de tiempo y de forma escalonada. El tiempo agotado detiene la espera local, no al proveedor. Las pruebas simuladas no certifican su capacidad de generación simultánea.
Sustituya YOUR_* por sus códigos de modelo, voces o identificadores de tarea. /v1/models muestra códigos visibles para su clave, pero no confirma texto, Omni, imágenes, vídeo, audio ni todos los modos. Verifique entradas, salidas y modos habilitados del modelo. No se promete compatibilidad universal ni Realtime.
El chat/Messages normal del SDK conserva reintentos automáticos: los envíos UGC de chat/Omni deben usar explícitamente Python RequestOptions(max_retries=0) o Node maxRetries=0, redirect=error. La ausencia de reintentos en métodos multimedia específicos no cubre todos los métodos. Los envíos de imágenes, vídeo, voz y transcripción no se reintentan automáticamente; el chat MCP también se envía una vez. Agotar el tiempo o dejar de esperar no cancela el trabajo, no lo reembolsa ni hace seguro repetirlo. Conserve id de imagen y task_id de vídeo. released y reconciliation_required son estados finales, no pruebas de generación correcta.
Las llamadas del SDK y MCP usan la misma API, precios, medición, cartera y liquidación que las solicitudes directas. No añaden otro saldo ni sistema de facturación. Una URL de resultado no certifica la liquidación; consulte el estado de facturación de la API cuando esté disponible y los registros de la consola.
El as_of de una estimación es la hora de consulta, no un período de precio garantizado. Las tareas aceptadas se liquidan con su contrato de precios congelado y el uso real nativo, sin aplicar cambios posteriores de catálogo o precios de la clave. Una tarifa congelada no fija el importe final. Si el uso falta o es contradictorio, se requiere conciliación, no un cargo estimado. Recupere la tarea original; no genere otra con nuevos parámetros.
SDK oficiales
Clientes tipados para modelos, chat, mensajes, embeddings, medios y tareas asíncronas, sin exponer APIs de sesión de la consola.
Ecosistemas compatibles
Los clientes compatibles OpenAI, Anthropic y Gemini usan su subconjunto de protocolo admitido. Verifique prefijo de URL base, campos, lectura de respuestas y reintentos; cambiar solo la clave o URL base no garantiza multimedia fuera del chat.
Protocolos de agentes
MCP y A2A ofrecen límites estables de interoperabilidad sin revelar detalles internos de enrutamiento.
Versiones SDK independientes
Los SDK se publican independientemente de la plataforma. Python 0.3.7 y Node 0.3.7 incluyen los métodos de descubrimiento detallado. Verifique las descargas de versión fija con sus sumas SHA-256; estos archivos no implican publicación en npm o PyPI ni aceptación nativa del modelo. El contrato OpenAPI activo sigue siendo la autoridad.
import os
from routershift import RouterShift
client = RouterShift(api_key=os.environ["ROUTERSHIFT_API_KEY"])
models = client.models.list()
print([model.id for model in models])
response = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Hello"}],
)
Autenticación
Todas las solicitudes a la API requieren autenticación usando un token Bearer. Puedes generar y gestionar claves API desde el panel de tu consola.
Formato de Clave API
Las claves API comienzan con sk- seguido de un identificador único. Mantén tus claves API seguras y nunca las expongas en código del lado del cliente o control de versiones.
Cabecera de Autorización
Incluye tu clave API en la cabecera Authorization de cada solicitud:
Authorization: Bearer YOUR_API_KEY
Mejores Prácticas de Seguridad
Nunca incluyas claves API directamente en tu código fuente. Usa variables de entorno o un gestor de secretos.
Rota las claves API regularmente desde el panel de la consola — crea nuevas claves y revoca las antiguas sin tiempo de inactividad.
Usa claves API separadas para entornos de desarrollo y producción.
Establece límites de uso y restricciones de IP en las claves API para seguridad adicional.
Monitorea el uso de claves en el panel de la consola para detectar actividad inusual.
Nunca subas claves API al control de versiones. Añade archivos .env a .gitignore.
Firmas HMAC de Webhooks
Los webhooks de usuario incluyen en X-RS-Signature el resumen hexadecimal HMAC-SHA256 del cuerpo. X-RS-Event y X-RS-Delivery identifican el evento y la entrega.
Realizar Solicitudes
RouterShift ofrece chat, embeddings, descubrimiento de modelos y otros endpoints admitidos. Use el formato de solicitud y respuesta del endpoint elegido, compatible con OpenAI, Anthropic o Gemini.
Completaciones de Chat
Envía una solicitud de completación de chat con un nombre de modelo, un array de mensajes y parámetros opcionales como temperature, max_tokens y top_p. RouterShift enruta tu solicitud al proveedor apropiado según tu configuración de enrutamiento.
Respuestas en Streaming
Habilita el streaming configurando stream: true. RouterShift soporta Server-Sent Events (SSE) para streaming de tokens en tiempo real. El formato de stream es compatible con la especificación de streaming de OpenAI.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.routershift.com/v1",
api_key=os.environ["ROUTERSHIFT_API_KEY"],
)
stream = client.chat.completions.create(
model="YOUR_MODEL_CODE",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Solicitudes Asíncronas
Para tareas de larga duración o procesamiento por lotes, usa el modo asíncrono. Envía una solicitud y consulta los resultados — útil para cargas de trabajo que exceden los límites de tiempo típicos.
Procesamiento por Lotes
Suba un archivo JSONL a POST /v1/batch y consulte su estado y resultados. El tiempo y precio dependen del modo de ejecución y contrato del modelo; un lote no garantiza descuento ni plazo fijo.
Representaciones vectoriales
Genera embeddings vectoriales para texto usando el endpoint /v1/embeddings. Los embeddings son útiles para búsqueda semántica, clustering y generación aumentada por recuperación (RAG).
Estimación de Tokens
Envíe el cuerpo del chat a POST /v1/chat/completions/estimate para estimar tokens y costo antes de la llamada. La estimación no es el cargo final; la facturación depende del uso real y del contrato de precio aplicable.
Límites y controles de solicitud
Los límites efectivos proceden de la clave API, la política del cliente, la ruta del modelo y la capacidad del proveedor. Los encabezados y la consola reflejan la configuración real en ejecución.
Límites de Tasa Predeterminados
Las claves de la plataforma devuelven x-ratelimit-limit-{tps,rpm,tpm,tph} y, para límites activos, x-ratelimit-remaining-{tps,rpm,tpm,tph}. Retry-After solo aparece cuando esperar puede recuperar capacidad, redondeado hacia arriba en segundos; no garantiza el reintento. Si falta, revisa la cuota por petición y la política. No reenvíes automáticamente un POST de resultado desconocido; usa espera limitada con variación aleatoria solo si es seguro reintentar.
Códigos de Respuesta HTTP
429429 Demasiadas Solicitudes — Has excedido tu límite de tasa. Verifica la cabecera Retry-After y retrocede.
402402 Pago Requerido — El saldo de tu cuenta es insuficiente. Añade créditos en la sección de Facturación.
403403 Prohibido — La clave autenticada no puede usar este modelo, ruta u operación. Revisa los permisos de la clave y la política del cliente.
503503 Servicio No Disponible — Ningún proveedor está disponible actualmente para el modelo solicitado. El circuit breaker puede haber deshabilitado temporalmente todos los proveedores.
401401 No Autorizado — Cabecera de Autorización faltante o mal formada.
400400 Solicitud Incorrecta — Parámetros de solicitud inválidos. Revisa el mensaje de error para más detalles.
Facturación y Precios
RouterShift usa billeteras prepagadas y precios fijados por solicitud. Las solicitudes correctas se cargan al precio de venta al cliente y según las dimensiones configuradas para cada producto.
Modelo de Precios
El cargo usa el precio de venta al cliente aprobado y fija modelo, moneda, versión de precio y dimensiones por solicitud. El catálogo público muestra precios de lista para comparar; los costes del proveedor son hechos de liquidación.
Facturación y Facturas
Concilia llamadas, tokens, dimensiones de caché y gasto por fecha, modelo y clave API. Facturas y reembolsos usan evidencia de precio guardada en el servidor; los cambios posteriores no reescriben el historial.
Billetera y Créditos
Las billeteras CNY y USD se contabilizan por separado. El efectivo disponible ya excluye los fondos congelados; no los restes de nuevo. El crédito personal de tolerancia y la garantía de la plataforma están desactivados por defecto y requieren crédito y capital de respaldo aprobados por separado. El crédito comprometido y el principal pendiente no son efectivo ni acceso automático a modelos. La admisión exige un contrato de medición revisado y un límite de coste demostrado. El progreso en directo no es la factura final; resultados o consumos desconocidos quedan pendientes de conciliación. Las recargas siguen los pagos realmente recibidos.
Paquetes y Cupones
Paquetes, promociones, cupones o planes de ahorro solo afectan al precio si existe una regla aplicable. La financiación del descuento queda separada del pago nativo al proveedor.
Motor de comisiones de reseller
Los resellers ganan un porcentaje del margen de la plataforma en cada solicitud de usuarios invitados. Las tasas de comisión por modelo permiten programas de partners granulares — ej., 15% en GPT-4o, 10% en Claude. La atribución es automática vía enlaces de invitación; la liquidación es en tiempo real por solicitud.
Acceso privado
El acceso privado integra BYOK y grupos de cuentas de IA con control central, precios flexibles y conmutación por error.
Integración BYOK
Vincule sus claves tras activar el acceso privado. El proveedor factura su cuenta por separado; las tarifas de servicio RouterShift siguen el plan y las exenciones aplicables. BYOK no convierte todo el uso en gratuito.
Grupos de cuentas
Conecte grupos de cuentas externos mediante un puente de claves y una capa de políticas unificados.
Modalidad de suscripción
El acceso privado es un servicio adicional opcional. Antes de activarlo, revise la cuota mensual fija o tarifa por uso, moneda, renovación y exenciones del plan elegido. La API principal sigue siendo de pago por uso.
Conmutación por error
Si una fuente privada no está disponible, pueden intentarse secuencialmente rutas elegibles de la plataforma para el mismo modelo, según los permisos de clave y región. Se aplican el precio de venta y las comprobaciones de saldo y presupuesto; una suscripción privada o exención no hacen gratuitas estas solicitudes.
Liquidación auditable en CNY y USD
Una cadena de evidencia financiera para precios, cargos, reparto, reembolsos, pagos y facturas; no una simple conversión visual. Una cuenta compra modelos locales y globales: el cliente conserva la experiencia CNY mientras los costes internacionales se liquidan en su moneda nativa.
Monedas de venta y coste separadas
Los productos nacionales se venden y facturan en CNY; un proveedor que cobra en USD no traslada al cliente la volatilidad cambiaria por solicitud.
Instantáneas de precio y cambio
Cada operación fija la versión aprobada del tipo de cambio, el precio y las partidas reales de cartera; los cambios futuros no reescriben el historial.
Cuentas por pagar en moneda nativa
La deuda con el proveedor conserva su moneda de origen; margen, comisión e impuestos se registran como hechos contables separados.
Reembolso por la ruta original
Los reembolsos revierten las partidas CNY/USD originales; una reconversión real registra por separado la ganancia o pérdida cambiaria.
Manejo de Errores
Comprende los errores comunes de la API y cómo manejarlos correctamente en tu aplicación.
Estructura de Respuesta de Error
Todos los errores siguen el formato estándar con un objeto error que contiene un mensaje, tipo, código y parámetro (si corresponde).
Respeta Retry-After cuando esté presente. Reintenta solo operaciones idempotentes o que puedan repetirse de forma segura, usa retroceso exponencial acotado con jitter y detente al agotar el presupuesto de intentos o tiempo de la aplicación.
Tipos de Errores Comunes
invalid_request_error — Cuerpo de solicitud mal formado o parámetros requeridos faltantes.
authentication_error — Clave API inválida, vencida o revocada.
rate_limit_error — Demasiadas solicitudes. Reduce la velocidad y respeta las cabeceras Retry-After.
server_error — Problema temporal del proveedor o la plataforma. Reintenta con retroceso.
upstream_error — No hay proveedor disponible o falló una llamada. Consulte error.code antes de decidir si debe reintentar.
content_filter_error — Solicitud bloqueada por guardrails o filtro de contenido. Revisa el contenido marcado.
Códigos de error estructurados
Los errores de inferencia compatibles con OpenAI incluyen el campo legible por máquina error.code. Use ese campo para el manejo programático, no el texto del mensaje.
AUTH_INVALIDCredenciales inválidas
AUTH_EXPIREDSesión expirada
AUTH_EMAIL_NOT_VERIFIEDCorreo no verificado
AUTH_INSUFFICIENTAcceso denegado
WALLET_LOWSaldo insuficiente
WALLET_EMPTYBilletera vacía
RATE_LIMIT_GLOBALLímite de velocidad excedido
RATE_LIMIT_KEYLímite de velocidad de clave API excedido
Configura los tiempos de espera de conexión, solicitud e inactividad del flujo según la carga y la latencia del modelo. Las operaciones síncronas, streaming, asíncronas y por lotes no deben compartir un valor fijo.