API Documentation
z0.chat provides an OpenAI-compatible API via the Vercel AI Gateway. Send one prompt to multiple models simultaneously, compare responses, and build with parallel inference. This API is 100% compatible with existing OpenAI SDKs — just change the base URL and API key.
https://ai-gateway.vercel.sh/v1
Authentication
All requests require an API key passed in the Authorization header as a Bearer token. Get your API key from the z0.chat dashboard after signing in.
Authorization: Bearer z0-xxxxxxxxxxxxxxxxxxxxNever expose your API key in client-side code. Always proxy requests through your backend server.
Base URL
All API endpoints are relative to the base URL:
https://ai-gateway.vercel.sh/v1Append the endpoint path to this base URL. For example, to call chat completions: https://ai-gateway.vercel.sh/v1/chat/completions
POST /chat/completions
Send a chat completion request to one or more models. Supports streaming, parallel inference across multiple models, and consensus scoring.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | required | Model ID or comma-separated list for parallel inference (e.g. gpt-4o,claude-3.5-sonnet) |
| messages | array | required | Array of message objects with role and content |
| stream | boolean | optional | If true, returns a streaming response (SSE) |
| temperature | number | optional | 0–2, default 1. Higher = more random |
| max_tokens | integer | optional | Maximum tokens to generate |
| top_p | number | optional | Nucleus sampling, 0–1. Default 1 |
| stop | string|array | optional | Up to 4 stop sequences |
| consensus | boolean | optional | If true with multiple models, returns consensus score |
Request Body
curl -X POST https://ai-gateway.vercel.sh/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer z0-xxxxxxxxxxxx" \
-d '{
"model": "gpt-4o,claude-3.5-sonnet",
"messages": [
{"role": "user", "content": "Explain quantum computing in 2 sentences."}
],
"stream": false,
"consensus": true
}'const res = await fetch("https://ai-gateway.vercel.sh/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer z0-xxxxxxxxxxxx",
},
body: JSON.stringify({
model: "gpt-4o,claude-3.5-sonnet",
messages: [{ role: "user", content: "Explain quantum computing in 2 sentences." }],
stream: false,
consensus: true,
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://ai-gateway.vercel.sh/v1/chat/completions",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer z0-xxxxxxxxxxxx",
},
json={
"model": "gpt-4o,claude-3.5-sonnet",
"messages": [{"role": "user", "content": "Explain quantum computing in 2 sentences."}],
"stream": False,
"consensus": True,
},
)
print(res.json())Response
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1700000000,
"models": ["gpt-4o", "claude-3.5-sonnet"],
"choices": [
{
"index": 0,
"model": "gpt-4o",
"message": {"role": "assistant", "content": "Quantum computing uses..."},
"finish_reason": "stop"
},
{
"index": 1,
"model": "claude-3.5-sonnet",
"message": {"role": "assistant", "content": "Quantum computing leverages..."},
"finish_reason": "stop"
}
],
"consensus": {"score": 0.82, "agreement": "high"},
"usage": {"prompt_tokens": 12, "completion_tokens": 48, "total_tokens": 60}
}GET /models
List all available models on the z0.chat gateway.
curl https://ai-gateway.vercel.sh/v1/models \
-H "Authorization: Bearer z0-xxxxxxxxxxxx"{
"object": "list",
"data": [
{"id": "gpt-4o", "provider": "openai", "context": 128000},
{"id": "claude-3.5-sonnet", "provider": "anthropic", "context": 200000},
{"id": "llama-3.1-70b", "provider": "meta", "context": 131072},
{"id": "mistral-large", "provider": "mistral", "context": 128000}
]
}Code Examples
Streaming with SSE
const res = await fetch("https://ai-gateway.vercel.sh/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${apiKey}`,
},
body: JSON.stringify({
model: "gpt-4o,claude-3.5-sonnet",
messages: [{ role: "user", content: "Write a haiku about the ocean." }],
stream: true,
}),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
chunk.split("\n").forEach((line) => {
if (line.startsWith("data: ")) {
const data = JSON.parse(line.slice(6));
console.log(data.model, "→", data.choices[0]?.delta?.content || "");
}
});
}Error Codes
| Code | Type | Description |
|---|---|---|
| 400 | bad_request | Invalid request body or parameters |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks permission for the requested resource |
| 404 | not_found | Model not available on the gateway |
| 429 | rate_limit | Rate limit exceeded. Retry with exponential backoff |
| 500 | server_error | Internal gateway error. Retry after brief delay |
| 503 | unavailable | Upstream provider temporarily unavailable |
| 504 | timeout | Request timed out waiting for upstream model |
Rate Limits
Rate limits are applied per API key and vary by tier. All responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
On 429, use exponential backoff: wait 1s, 2s, 4s, 8s. The Retry-After header tells you exactly how long to wait.
SDK Examples
OpenAI SDK (JavaScript)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.Z0_API_KEY,
baseURL: "https://ai-gateway.vercel.sh/v1",
});
const res = await client.chat.completions.create({
model: "gpt-4o,claude-3.5-sonnet",
messages: [{ role: "user", content: "Hello, z0!" }],
});
console.log(res.choices);OpenAI SDK (Python)
from openai import OpenAI
client = OpenAI(
api_key=os.environ["Z0_API_KEY"],
base_url="https://ai-gateway.vercel.sh/v1",
)
res = client.chat.completions.create(
model="gpt-4o,claude-3.5-sonnet",
messages=[{"role": "user", "content": "Hello, z0!"}],
)
print(res.choices)LangChain Integration
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o",
api_key=os.environ["Z0_API_KEY"],
base_url="https://ai-gateway.vercel.sh/v1",
)
response = llm.invoke("What is multi-model inference?")