Ir al contenido
Zabio está en beta: los modelos, los precios y las funciones pueden cambiar. Cuéntanos qué falla en hello@zabio.ai.

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.

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.

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.

Terminal window
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": ""}
}
}
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.

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.

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.