Gateway de LLM
Un gateway de LLM con la capa de datos incluida
Tres URL base, una clave, un saldo. Chat, imagen, video y modelos de decisión con el SDK que ya usas; búsqueda, documentos y diapositivas con los mismos créditos — desde una décima parte del precio oficial del proveedor.
10%
Tarifa de partida, frente al precio oficial de la API del proveedor
5,000+
API en el mismo catálogo
Un gateway suele tener una superficie. Este tiene tres.
Comparten tu cuenta, tu clave y tu saldo, pero responden a preguntas distintas y viven en URL base distintas. Saber a cuál estás llamando es todo el truco.
| Superficie | URL base | Para qué |
|---|---|---|
| API de modelos | openapi.felo.ai/api/v1 · openapi.felo.ai/api | Llamar directamente a un modelo de lenguaje, imagen, video o decisión |
| API de datos | openapi.felo.ai/v1/beta | Llamar a un proveedor de datos o búsqueda de terceros por su nombre |
| Felo APIs | openapi.felo.ai/v2 | Flujos propios de Felo: búsqueda, ofimática, extracción, conocimiento |
Una clave cubre las tres. Una recarga compra créditos de servicio en dólares, y la llamada a un modelo, la llamada a la API de datos y el flujo de Felo salen de lo mismo — sin una cuenta aparte por proveedor.
Leer la documentaciónSeis endpoints, no uno
Todo lo que hay bajo /api/v1 es una llamada a un modelo, pero el tipo de modelo decide qué endpoint puede responder — y cada endpoint devuelve su propio formato.
| Endpoint | Protocolo | Devuelve |
|---|---|---|
POST /api/v1/chat/completions | OpenAI Chat Completions | Streaming o una respuesta |
POST /api/v1/responses | OpenAI Responses | Streaming o una respuesta |
POST /api/v1/messages | Anthropic Messages | Streaming o una respuesta |
POST /api/v1/images/generations | Sobre de imagen de OpenAI | Un task_id que consultar |
POST /api/v1/videos/generations | Sobre de video de OpenAI | Un task_id que consultar |
POST /api/v1/decisions | Esquema de decisión de Felo | Respuestas tipadas, sin streaming |
Las tres superficies de chat son implementaciones nativas, no una capa de traducción: cada una emite eventos en su propio protocolo, así que analizas el stream igual que hoy.
Elige el endpoint por tipo de modelo, no a ciegas
Cada modelo del catálogo lleva un model_kind, y el tipo decide qué endpoint puede llamarlo. Descubrirlo es gratis: lee el catálogo local.
# discover before you call — free, reads the catalog
GET /api/v1/models # every kind, with channels and rates
GET /api/v1/models/{model_id} # one model, in detail
GET /api/v1/videos/models # video_generation only
GET /api/v1/decisions/models # decisions only| model_kind | Endpoint |
|---|---|
chat | Responses, Chat Completions o Messages, según lo que admita el modelo |
image_generation | POST /api/v1/images/generations |
video_generation | POST /api/v1/videos/generations |
decisions | POST /api/v1/decisions |
Filtra con ?provider= para ver un solo proveedor, o con ?exclude_video_and_decisions=true para ocultar todo menos chat e imagen. Estar en el catálogo no es una promesa: un modelo de video no responde a una petición de chat, y la API devuelve model_kind_mismatch.
Ruta por defecto, o una cabecera para elegir el proveedor
Un modelo puede servirse desde varios canales upstream, cada uno con su proveedor y su tarifa publicada. Sin la cabecera, la plataforma elige uno; con X-Felo-Channel, eliges tú.
# first channel only — no automatic fallback
X-Felo-Channel: claude-cc
X-Felo-Channel: claude-cc,anthropic # ordered selection, not a retry list- El valor es una lista ordenada de códigos de canal públicos tomados de
channels[].codedel modelo, validada en el orden en que la escribes. - Solo se envía el grupo de proveedor del primer canal, y es la tarifa de ese canal la que pagas.
- No hay conmutación automática. Una lista de canales es una selección, no una política de reintentos — si un proveedor falla, reenvía desde tu aplicación con otro canal.
X-Felo-Channel funciona en los seis endpoints de generación de arriba. No se aplica a la API de datos ni a las Felo APIs: esas van al proveedor que indiques en la petición.
Cuánto cuesta de verdad una llamada
Las llamadas a modelos se cobran por token — entrada, salida y caché — con el multiplicador de descuento del canal aplicado. Las tarifas se publican por 1M de tokens por legibilidad, pero el cobro usa la precisión por token del snapshot de precios actual, así que una petición corta nunca se redondea a un millón.
- Las tarifas de caché solo se aplican cuando la respuesta del protocolo informa uso de caché; un modelo que no lo informa cobra todo a la tarifa de entrada.
- La búsqueda web que el servicio del modelo ejecuta e informa cuesta $0.01 por búsqueda.
- Algunos modelos escalonan por tamaño del prompt: Claude Haiku 5.5 cuesta $0.10 de entrada y $0.50 de salida por 1M de tokens hasta un prompt de 100K tokens, y por encima $0.50 y $2.50 por toda la petición.
- La primera recarga es de $1. Sin suscripción, sin cuota por usuario, sin compromiso mínimo: una clave inactiva no cuesta nada.
Las llamadas a la API de datos y los flujos de Felo salen del mismo saldo, cada uno con su base publicada: por petición correcta, por elemento devuelto o por uso real.
Ver tarifas y créditosDos límites que se parecen y no lo son
Quedarse sin crédito devuelve 402 INSUFFICIENT_CREDITS. Llamar demasiado rápido devuelve 429 RATE_LIMITED. Esperar resuelve el segundo y nunca el primero.
| Estado | Código | Qué hacer |
|---|---|---|
| 401 | UNAUTHORIZED | Corrige o regenera la clave |
| 402 | INSUFFICIENT_CREDITS | Recarga en la facturación de la consola y reenvía |
| 404 | depende del endpoint | Revisa el ID del modelo, de la tarea o de la ruta |
| 429 | RATE_LIMITED | Espera Retry-After y reintenta |
| 5xx | CHAT_FAILED, SERVICE_UNAVAILABLE | Reintenta con backoff exponencial y jitter |
Hoy solo /v2/chat documenta límites estrictos. Las llamadas a modelos también pueden limitarse upstream, y eso aparece como 429 — lee X-RateLimit-* y Retry-After en vez de fijar números. Cada respuesta lleva un request_id, y la cabecera X-Request-Id que envíes se devuelve tal cual, así que tus logs y los nuestros cuadran.
La imagen y el video terminan en segundo plano
Los dos endpoints de generación devuelven un task_id en lugar del resultado. Envía, consulta, recoge — y ten en cuenta que, una vez creada la tarea, la mayoría de los fallos llegan como 200 con un estado terminal, no como error HTTP.
# submit, then poll the task
POST /api/v1/images/generations → task_id
GET /api/v1/images/generations/{id} → status, result
POST /api/v1/videos/generations → task_id
GET /api/v1/videos/generations/{id} → status, resultLee el estado antes que el resultado: failed e interrupted también son respuestas, y error.message explica por qué. Un 402 al enviar significa que la tarea nunca se creó. SuperAgent funciona distinto: devuelve un stream_key y empuja eventos por SSE, así que no hay nada que consultar.
Cambia la URL base y conserva el cliente
Los dos SDK funcionan sin cambios en cuanto la URL base apunta aquí. npx feloapi-cli setup escribe la misma configuración para Claude Code y Codex.
# OpenAI SDK
base_url = "https://openapi.felo.ai/api/v1"
# Anthropic SDK — one level up; the SDK appends /v1/messages
base_url = "https://openapi.felo.ai/api"
# pin a provider (optional)
default_headers = {"X-Felo-Channel": "claude-cc"}Los ID de modelo no coinciden entre proveedores. Elige en el catálogo antes de cambiar la URL base, o la primera llamada responderá 404.
La mitad que un gateway suele dejarte a ti
Un gateway de LLM enruta llamadas a modelos. Aquí la misma clave también llega a un catálogo de 5,000+ API — así que el paso de búsqueda de tu agente, las diapositivas que genera y el documento que relee se cobran con los mismos créditos, no con tres proveedores más.
- Search
- PPT Task
- SuperAgent
- Web Fetch
- X Search
- Mindmap
- Landing Page Task
- LiveDoc
- YouTube Subtitling
Las llamadas a la API de datos van a proveedores con nombre bajo /v1/beta — Tavily, Exa, Apollo y el resto del catálogo — cada uno con su propia base publicada.
Dónde termina el gateway
- Sin conmutación automática entre canales: los reintentos son lógica de tu aplicación, a propósito.
- Estar en el catálogo no garantiza compatibilidad; cada tipo de modelo tiene una sola superficie de llamada.
- No hay un límite de peticiones de plataforma documentado para llamadas a modelos, pero el del proveedor upstream sigue aplicándose.
- Los créditos son prepago, no reembolsables y no se pueden retirar: recarga el importe que piensas gastar.
Seis preguntas sobre el gateway de LLM
¿Qué es un gateway de LLM?
Un punto de entrada delante de muchos proveedores de modelos, para que tu código hable con una URL base, una clave y un saldo en lugar de una docena de SDK. Un gateway de IA hace lo mismo; este además vende las API de datos que un agente necesita.
¿Puedo conservar mi SDK de OpenAI o Anthropic?
Sí. Chat Completions y Responses tienen forma de OpenAI y Messages es nativo. Las URL base son https://openapi.felo.ai/api/v1 y https://openapi.felo.ai/api — un nivel por encima, porque ese SDK añade /v1/messages por su cuenta.
¿Cómo sé qué modelo llamar?
GET /api/v1/models lista todos los tipos con sus canales y tarifas; los modelos de video y de decisión tienen sus propias listas. Lee el model_kind y llama al endpoint correspondiente. Estar en la lista no garantiza que todos los endpoints acepten ese modelo.
¿Hay conmutación si un proveedor se cae?
No, y es deliberado. Una lista de canales es una selección, no una política de reintentos: solo se envía el primero. La conmutación pertenece a tu aplicación, donde se ven el error, el presupuesto y el respaldo que de verdad quieres.
¿Cuánto cuesta?
Cada modelo tiene una tarifa propia de Felo que empieza en una décima parte del precio oficial del proveedor, y el canal que fijes determina la tarifa que pagas. Prepago, cobrado por llamada, primera recarga de $1, sin suscripción.
¿También puedo llamar a imagen, video y API de datos?
Sí. Una clave llega a los modelos de chat, imagen, video y decisión y al catálogo de 5,000+ API detrás de /v1/beta — todo se cobra con los mismos créditos.
Pruébalo con una llamada
Crea una clave, recarga y apunta el SDK que ya usas a una URL base.