RouterShiftRouterShift
Explorar ModelosPreciosDocumentación
RouterShiftRouterShiftRouterShift. Infraestructura de IA Empresarial.
Explorar ModelosEstadoDocumentaciónTérminosPrivacidadDPATransparencia

Documentación de la API

ResumenCapacidades de la plataformaInicio RápidoSDK y agentesAutenticaciónRealizar SolicitudesLímites de tasaFacturación y PreciosAcceso privadoLiquidación en dos monedasManejo de Errores
Referencia de API

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.

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)

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

MétodoRutaDescripción
GET/v1/versionVersión y compatibilidad de la API de datos
GET/v1/modelsListado de modelos
GET/v1/requests/:idRecibo original: consultar pruebas de ejecución y facturación sin reenviar
GET/v1/requests/:id/resultResultado de audio capturado: leer resultados originales compatibles sin generar de nuevo
POST/v1/chat/completionsCompletado de chat (compatible con OpenAI)
POST/v1/contracted/chat/completionsCompletado de chat (compatible con OpenAI)
POST/v1/messagesAPI de mensajes (compatible con Anthropic)
POST/v1/messages/count_tokensEstimación de tokens de Messages (texto, razonamiento y herramientas; no es uso nativo exacto)
POST/v1/models/gemini/:model/generateContentGeneración de contenido de Gemini
POST/v1/models/gemini/:model/streamGenerateContentGeneración de contenido en streaming de Gemini
POST/v1/embeddingsEmbeddings de texto
POST/v1/rerankReordenación
POST/v1/chat/completions/estimateEstimación previa de tokens y coste
POST/v1/images/generationsGeneración de imágenes
POST/v1/contracted/images/generationsGeneración de imágenes
GET/v1/images/tasks/:idTarea de imagen: consultar una tarea existente sin reenviar la generación
POST/v1/audio/transcriptionsTranscripción de audio
POST/v1/audio/speechTexto a voz
POST/v1/contracted/audio/speechTexto a voz
POST/v1/ttsTexto a voz extendido
POST/v1/transcriptionsTranscripción extendida
POST/v1/contracted/transcriptionsTranscripción extendida
POST/v1/midjourney/imagineGeneración de imágenes Midjourney
POST/v1/suno/generateGeneración de música Suno
POST/v1/video/generationsTarea de generación de video
POST/v1/contracted/video/generationsTarea de generación de video
GET/v1/video/tasks/:task_idEstado de la tarea de vídeo
POST/v1/chat/completions/asyncTarea asíncrona — Enviar
GET/v1/chat/completions/async/:task_idTarea asíncrona — Verificar estado
GET/v1/chat/completions/async/:task_id/resultTarea asíncrona — Obtener resultado
POST/v1/batchProcesamiento por lotes
GET/v1/batch/:batch_idEstado del trabajo por lotes
GET/v1/batch/:batch_id/resultsDescarga de resultados por lotes
POST/v1/batch/:batch_id/cancelCancelar trabajo por lotes
POST/v1/mcp/Pasarela de herramientas MCP JSON-RPC
GET/v1/mcp/sseTransporte SSE de MCP
POST/v1/a2a/Pasarela JSON-RPC A2A
GET/v1/a2a/sseFlujo 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 baseEjemplo de parámetro de modeloEncabezado 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
Abrir

Guía de Inicio Rápido

Comienza con RouterShift en menos de 3 minutos. Sigue los pasos a continuación para hacer tu primera llamada a la API.

  • 1. Crear una cuenta
  • 2. Haz tu primera llamada a la API
  • 3. Instalar un SDK
Abrir

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.

  • Respuestas en Streaming
  • Solicitudes Asíncronas
  • Procesamiento por Lotes
Abrir

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
  • Grupos de cuentas
  • Conmutación por error
Abrir

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.

  • Crear un directorio dedicado e instalar MCP
  • Configurar el cliente stdio local
  • Reiniciar el conector y verificar diez herramientas
Abrir

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
  • Billetera y Créditos
  • Facturación y Facturas
Abrir

Guía de Inicio Rápido

Comienza con RouterShift en menos de 3 minutos. Sigue los pasos a continuación para hacer tu primera llamada a la API.

1. Crear una cuenta

Crea una cuenta si el autorregistro está activo o sigue la invitación y el flujo de cuenta proporcionados por tu administrador.

2. Haz tu primera llamada a la API

Crea una clave API con nombre y limita modelos, presupuesto, expiración, rangos IP y demás alcances al mínimo necesario.

3. Instalar un SDK

Consulta GET /v1/models, revisa el precio de venta y las dimensiones nativas, y asegura saldo disponible en la billetera CNY o USD correspondiente.

4. Usar el SDK de OpenAI con RouterShift

Sustituye YOUR_API_KEY y YOUR_MODEL_CODE por los valores de la consola y del catálogo en ejecución.

curl "https://api.routershift.com/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY" \
  -d '{
  "model": "YOUR_MODEL_CODE",
  "messages": [
    {
      "role": "user",
      "content": "Hello!"
    }
  ],
  "max_tokens": 100
}'

5. Explorar modelos disponibles

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.

python -m pip install "https://routershift.com/downloads/sdk/routershift-0.3.7-py3-none-any.whl"
Descargar wheel de PythonDescargar archivo de Node.jsVer sumas SHA-256

Listar modelos visibles para su clave API

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.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

Conversaciones de texto

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.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/models?details=1" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

curl --fail-with-body --connect-timeout 10 --max-time 120 -i -X POST "https://api.routershift.com/v1/images/generations" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"YOUR_ACCEPTED_IMAGE_MODEL_CODE","prompt":"Combine three landscapes into one scene","image":["https://media.example/landscape-1.png","https://media.example/landscape-2.png","https://media.example/landscape-3.png"],"n":1,"response_format":"url"}'

curl --fail-with-body --connect-timeout 10 --max-time 30 -i "https://api.routershift.com/v1/images/tasks/IMAGE_TASK_ID" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

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. 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.

    mkdir routershift-mcp
    cd routershift-mcp
    npm init -y
    npm install "https://routershift.com/downloads/sdk/routershift-sdk-0.3.7.tgz" @modelcontextprotocol/server@2.0.0 zod@4.6.4
  2. 2. Obtener la ruta absoluta del servidor

    Ejecute el comando en el directorio nuevo. Imprime una ruta absoluta escapada para JSON que puede pegar en el array args de la configuración.

    node -p "JSON.stringify(require('node:path').resolve('node_modules/@routershift/sdk/dist/mcp/cli.js'))"
  3. 3. Configurar el cliente stdio local

    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.

    {
      "mcpServers": {
        "routershift": {
          "command": "node",
          "args": [
            "/absolute/path/to/your/project/node_modules/@routershift/sdk/dist/mcp/cli.js"
          ],
          "env": {
            "ROUTERSHIFT_API_KEY": "sk-REPLACE_LOCALLY",
            "ROUTERSHIFT_BASE_URL": "https://api.routershift.com"
          }
        }
      }
    }
  4. 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.

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

curl --fail-with-body --connect-timeout 10 --max-time 30 "https://api.routershift.com/v1/requests/ORIGINAL_REQUEST_ID/result" \
  -H "Authorization: Bearer $ROUTERSHIFT_API_KEY"

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).

{
  "error": {
    "message": "no upstream available",
    "type": "upstream_error",
    "code": "UPSTREAM_UNREACHABLE"
  },
  "request_id": "example-request-id"
}

Estrategia de Reintento

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
RES_MODEL_NOT_FOUNDModelo no encontrado
UPSTREAM_UNREACHABLEProveedor upstream inaccesible
UPSTREAM_ERRORError del proveedor upstream
UPSTREAM_TIMEOUTTimeout del proveedor upstream
INTERNAL_ERRORError interno del servidor
error.codeDescripción
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
RES_MODEL_NOT_FOUNDModelo no encontrado
UPSTREAM_UNREACHABLEProveedor upstream inaccesible
UPSTREAM_ERRORError del proveedor upstream
UPSTREAM_TIMEOUTTimeout del proveedor upstream
INTERNAL_ERRORError interno del servidor

Manejo de Timeouts

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.