Primeros pasos
Zabio es una API compatible con OpenAI. Mantienes tu SDK y cambias dos cosas: la URL base y la API key. Una sola key te da acceso a los modelos de Anthropic, OpenAI, Google, DeepSeek, xAI, Mistral AI y Together AI, más los modelos auto, que eligen el modelo más barato capaz de hacer el trabajo.
URL base
Section titled “URL base”| Host | Uso |
|---|---|
https://api.zabio.ai/v1 |
por defecto; resuelve a la región de EE. UU. |
https://api-us.zabio.ai/v1 |
la región de EE. UU. por su nombre |
Los dos hosts sirven la misma API. Usa el segundo cuando quieras indicar la región de forma explícita.
Tu API key
Section titled “Tu API key”Crea una key en la aplicación web, en la sección API keys, o con la CLI (zabio keys create --name laptop). Una key tiene la forma zb_live_ seguida de 43 letras y dígitos. Se muestra una sola vez; guárdala en un gestor de secretos o en una variable de entorno, nunca en el código.
Envíala como bearer token:
Authorization: Bearer zb_live_...Algunos SDK envían la key en una cabecera x-api-key. Zabio también la acepta.
Primera llamada con curl
Section titled “Primera llamada con curl”curl https://api.zabio.ai/v1/chat/completions \ -H "Authorization: Bearer insert your zabio.ai key here" \ -H "Content-Type: application/json" \ -d '{ "model": "auto", "messages": [{"role": "user", "content": "Saluda en una sola frase."}] }'La respuesta es un objeto chat.completion estándar con un campo extra, zabio, que te dice qué modelo respondió y cuánto costó la llamada:
{ "id": "chatcmpl-...", "object": "chat.completion", "model": "gpt-5.4-nano", "choices": [{"index": 0, "message": {"role": "assistant", "content": "¡Hola! ..."}, "finish_reason": "stop"}], "usage": {"prompt_tokens": 12, "completion_tokens": 9, "total_tokens": 21}, "zabio": { "vendor": "openai", "model_served": "gpt-5.4-nano", "routing": {"line": "balanced", "task": "conversation", "task_type": "conversational_reply", "difficulty": 1, "band": "easy", "stakes": "normal", "cell": "conversation/easy", "confidence": 0.93, "reason": "short greeting", "trigger": "no_prior_decision"}, "cost_micros": 265, "cost": {"vendor_micros": 14, "service_fee_micros": 1, "call_fee_micros": 250, "savings_fee_micros": 0, "classifier_micros": 0, "direct_micros": 330, "saved_micros": 65}, "cache": {"read_tokens": 0, "write_tokens": 0, "ttl_applied": ""} }}Python (SDK openai)
Section titled “Python (SDK openai)”from openai import OpenAI
client = OpenAI(base_url="https://api.zabio.ai/v1", api_key="insert your zabio.ai key here")
stream = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "Saluda en una sola frase."}], stream=True, extra_body={"zabio": {"session_id": "demo-1"}},)for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) if chunk.usage: print("\n", chunk.model_extra.get("zabio"))El SDK de Python rechaza argumentos que no conoce, así que las opciones de Zabio viajan en extra_body. Todo lo demás es un argumento normal.
Node (SDK openai)
Section titled “Node (SDK openai)”import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.zabio.ai/v1", apiKey: "insert your zabio.ai key here" });
const stream = await client.chat.completions.create({ model: "auto", messages: [{ role: "user", content: "Saluda en una sola frase." }], stream: true, zabio: { session_id: "demo-1" },});for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); if (chunk.usage) console.log("\n", chunk.zabio);}El SDK de Node deja pasar los campos que no conoce, así que zabio puede ir directamente en la petición.
Opciones de Zabio de un vistazo
Section titled “Opciones de Zabio de un vistazo”Dos campos que usarás en casi todas las peticiones, dentro del objeto zabio (o como headers):
{ "model": "auto", "messages": [{"role": "user", "content": "Resume este ticket."}], "zabio": { "session_id": "soporte-4711", "cache": {"ttl": "1h"} }}session_id agrupa las llamadas de una conversación para reutilizar la decisión de enrutamiento en vez de recalcularla, y para que el escalado tenga el historial. cache.ttl mantiene el prefijo de tu prompt en la caché del proveedor durante 5 minutos o 1 hora donde el proveedor lo ofrece, así los turnos repetidos pagan el precio cacheado; un prompt largo enviado una sola vez no se escribe. Los mismos valores viajan como headers x-zabio-session-id y x-zabio-cache-ttl. El resto de opciones (vendors, fallback) y las tres líneas (auto/best, auto/balanced, auto/cheap) están en la referencia de la API.
Qué leer después
Section titled “Qué leer después”- Modelos y enrutado: las tres líneas, cómo se clasifica una tarea, precios.
- Chat completions: todos los campos que Zabio acepta y devuelve.
- Errores: el formato de error y qué significa cada código.
- Línea de comandos: la CLI
zabio.