Respuesta corta
Una API compatible con OpenAI es cualquier API HTTP que acepta las mismas solicitudes que la API de OpenAI y responde con el mismo formato: las mismas rutas (/v1/chat/completions, /v1/models y a menudo /v1/responses), los mismos campos JSON y el mismo encabezado Authorization: Bearer con la clave. Por eso los SDK oficiales de OpenAI y las muchas herramientas basadas en ellos pueden usarla cambiando solo dos cosas: la base URL y la clave de API. «Compatible» describe el formato de las solicitudes, no el modelo que hay detrás, y cada servicio admite una parte distinta de las funciones de OpenAI, así que prueba lo que necesites.
Esta guía la publica APIVAI, una pasarela compatible con OpenAI para modelos Claude y GPT. Los ejemplos usan su dirección; los mismos pasos sirven con cualquier servicio compatible.
Qué cubre la «compatibilidad»
La mayoría de los servicios copian el núcleo de la API Chat Completions de OpenAI:
| Parte | Qué acepta o devuelve un servicio compatible |
|---|---|
POST /v1/chat/completions | Un ID de modelo en model y un array messages de {"role": ..., "content": ...} |
| Respuesta | choices[0].message.content, finish_reason y un objeto usage (prompt_tokens, completion_tokens, total_tokens) |
| Streaming | "stream": true devuelve server-sent events, un fragmento data: {...} por trozo de texto, terminando en data: [DONE] |
| Herramientas | tools con parameters en JSON Schema; el modelo responde con tool_calls y tú devuelves los resultados como mensajes role: "tool" |
GET /v1/models | La lista de IDs de modelo que puede usar tu clave |
| Autenticación | Authorization: Bearer <clave> |
| Errores | JSON con la forma {"error": {"message": ..., "type": ..., "code": ...}} |
Los servicios más recientes también implementan POST /v1/responses, la API Responses más nueva de OpenAI, que algunas herramientas (Codex CLI, por ejemplo) usan en lugar de Chat Completions. Menos servicios ofrecen /v1/embeddings o endpoints de imágenes, audio o archivos.
En qué difieren los servicios: lista de comprobación
La compatibilidad nunca es total. Antes de mover tráfico real, comprueba:
- IDs de modelo. Cada servicio nombra los modelos a su manera. Léelos de
GET /v1/modelsen lugar de reutilizar los nombres de OpenAI. - Parámetros ignorados. Los campos no admitidos suelen descartarse sin error:
response_format,seed,logprobs,n> 1,presence_penaltyo el indicadorstrictde las herramientas. La solicitud «funciona» pero hace menos de lo que crees. - Rangos de parámetros. Algunos modelos rechazan valores que OpenAI acepta (por ejemplo, una
temperaturemayor que 1, o fijar a la veztemperatureytop_p). - Endpoints más allá del chat. Embeddings, imágenes, audio, archivos, batch y fine-tuning faltan con frecuencia.
- Uso en streaming. El recuento de tokens en respuestas en streaming puede requerir
"stream_options": {"include_usage": true}o no enviarse. - Errores y límites. El JSON de error suele tener la forma correcta, pero los códigos de estado, los mensajes y los encabezados de límite (
x-ratelimit-*,retry-after) varían. - Herramientas e imágenes. Las admiten la mayoría de los modelos grandes, pero comprueba las llamadas en paralelo, el
tool_choiceforzado y las imágenes en el modelo exacto que vas a usar.
Quién ofrece una API compatible con OpenAI
Algunos ejemplos bien documentados:
| Servicio | Base URL | Notas |
|---|---|---|
| Ollama (local) | http://localhost:11434/v1 | Chat Completions, Completions, modelos, embeddings y un endpoint Responses sin estado; la clave es obligatoria pero se ignora |
| vLLM (autoalojado) | http://localhost:8000/v1 | Se inicia con vllm serve <modelo>; sirve Chat Completions, Completions, Responses, embeddings y modelos |
| LM Studio (local) | http://localhost:1234/v1 | Modelos, Chat Completions, Completions, Responses y embeddings |
| Anthropic | https://api.anthropic.com/v1/ | Anthropic la describe como una capa para probar y comparar modelos, no como una vía de producción a largo plazo; el caché de prompts y algunos campos solo están en su API nativa |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai/ | En beta, según Google |
| Pasarelas de API | La URL propia de la pasarela | Reúnen modelos de varios proveedores tras una clave y un formato; APIVAI es una, para Claude y GPT (ver también APIVAI frente a OpenRouter) |
Fíjate en las base URL: la mayoría terminan en /v1, la de Gemini no. Copia siempre la base URL de la documentación del proveedor.
Cómo cambiar una aplicación a otro servicio compatible
Los SDK oficiales de OpenAI leen dos variables de entorno, así que muchas aplicaciones cambian sin tocar el código:
export OPENAI_BASE_URL="https://api.apivai.com/v1" export OPENAI_API_KEY="your-key"
O defínelas en el código. Python:
from openai import OpenAI
client = OpenAI(base_url="https://api.apivai.com/v1", api_key="your-key")
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(resp.choices[0].message.content)Node.js:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.apivai.com/v1", apiKey: "your-key" });
const resp = await client.chat.completions.create({
model: "gpt-6-luna",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(resp.choices[0].message.content);Prueba con curl antes de tocar tu aplicación:
curl https://api.apivai.com/v1/models -H "Authorization: Bearer your-key"
La regla de /v1. Los SDK añaden /chat/completions a la base URL, así que la base URL ya debe incluir la versión (.../v1). Un 404 casi siempre significa que falta /v1 o está repetido. Cada herramienta añade algo distinto, así que sigue la guía de la tuya.
Herramientas que aceptan una URL compatible con OpenAI
La mayoría de las herramientas de IA para programar y chatear tienen un ajuste «custom OpenAI-compatible» u «OpenAI base URL». Guías paso a paso:
- Agentes y editores de código: Cline, Roo Code, Kilo Code, Continue, Cursor, Zed, Aider, OpenCode, Goose, Open Interpreter y Codex CLI (en la guía de Claude Code)
- Apps de chat: Cherry Studio, Chatbox, LobeChat, Open WebUI
- Automatización: Dify, n8n
Llamar a Claude con el formato de OpenAI
La API propia de Claude usa otro formato (/v1/messages, x-api-key, un campo system de nivel superior). Para usar Claude desde una herramienta con formato OpenAI necesitas algo que traduzca: la capa de compatibilidad de Anthropic (arriba) o una pasarela como APIVAI, que acepta solicitudes en formato OpenAI con IDs de modelos Claude en https://api.apivai.com/v1. Las herramientas que hablan el formato de Anthropic de forma nativa, como Claude Code, pueden usar https://api.apivai.com directamente; consulta la guía de Claude Code y la documentación de la API.
Preguntas frecuentes
¿«Compatible con OpenAI» significa que funcionan todas las funciones de OpenAI?
No. Significa que coincide el formato básico de solicitudes y respuestas. Cada servicio admite una parte: chat y streaming casi siempre, herramientas e imágenes en la mayoría de los modelos grandes, y embeddings, audio, archivos y batch con mucha menos frecuencia. Los campos no admitidos suelen ignorarse en silencio, así que prueba las funciones de las que dependes.
¿Tengo que cambiar mi código?
Normalmente solo la base URL, la clave y el ID de modelo. Si tu código usa funciones exclusivas de OpenAI (por ejemplo, salidas estructuradas con response_format o la Assistants API), comprueba que el nuevo servicio las admite.
¿Puede el mismo código hablar con un modelo local?
Sí. Ollama, vLLM y LM Studio ejecutan un servidor compatible con OpenAI, así que el mismo código del SDK funciona con base_url en http://localhost:11434/v1, http://localhost:8000/v1 o http://localhost:1234/v1. Los IDs de modelo y las funciones admitidas cambian según el servidor y el modelo.
¿La base URL termina en /v1?
En la mayoría de los servicios, sí: el SDK añade /chat/completions, así que la base URL debe terminar en la versión. Algunos proveedores usan otra ruta (la de Gemini termina en /v1beta/openai/), así que cópiala de su documentación.
¿Cómo sé qué modelos admite un servicio?
Llama a GET /v1/models con tu clave; los IDs de la respuesta son los que van en model. Los precios y tamaños de contexto están en la página de precios del proveedor; para APIVAI, en la página de modelos.