Developer Platform · vb0 API
vb0 API Documentation
The vb0 API gives your applications programmatic access to vb0, Vort's enterprise language model. The API follows the industry-standard chat completions format, so most existing OpenAI-compatible SDKs and tools work with vb0 by changing only the base URL and API key.
All requests are served over HTTPS. Request and response bodies are JSON, and streaming responses use server-sent events (SSE).
Authentication
Every request must be authenticated with a Vort API key. Keys start with vrt_live_ and are created from the company dashboard.
Pass your key in one of two headers:
Authorization: Bearer vrt_live_xxxxxxxxxxxxxxxx # or, equivalently: X-API-Key: vrt_live_xxxxxxxxxxxxxxxx
Authorization header. If you receive a 401 missing_key error while sending a valid Bearer token, switch to the X-API-Key header.Quickstart
Create an API key in the dashboard, then send your first request.
cURL
curl https://vort.org.za/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $VORT_API_KEY" \
-d '{
"model": "vb0",
"messages": [
{ "role": "user", "content": "Summarise the POPIA consent requirements." }
]
}'Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://vort.org.za/api/v1",
api_key="vrt_live_...",
# fallback if your network strips the Authorization header:
default_headers={"X-API-Key": "vrt_live_..."},
)
response = client.chat.completions.create(
model="vb0",
messages=[
{"role": "system", "content": "You are a concise legal analyst."},
{"role": "user", "content": "Summarise the POPIA consent requirements."},
],
)
print(response.choices[0].message.content)TypeScript / Node.js
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://vort.org.za/api/v1",
apiKey: process.env.VORT_API_KEY,
defaultHeaders: { "X-API-Key": process.env.VORT_API_KEY },
})
const response = await client.chat.completions.create({
model: "vb0",
messages: [{ role: "user", content: "Summarise the POPIA consent requirements." }],
})
console.log(response.choices[0].message.content)Chat Completions
Generate a model response for a conversation.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| messages | array | Yes | Conversation history. Each message has a role (system, user, or assistant) and content string. Must be non-empty. |
| model | string | No | Model to use. Defaults to "vb0". See Models below. |
| stream | boolean | No | When true, the response is streamed as server-sent events. Defaults to false. |
| max_tokens | integer | No | Upper bound on the length of the generated response. Defaults to 8192. |
| temperature | number | No | Sampling temperature. Lower values are more deterministic; higher values more creative. |
| tools | array | No | Tool definitions for function calling, in the standard chat-completions tools format. |
| tool_choice | mixed | No | Controls how the model selects tools when tools are provided. |
Response
{
"id": "chatcmpl-1751790000000",
"object": "chat.completion",
"created": 1751790000,
"model": "vb0",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Under POPIA, consent must be voluntary, specific and informed..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 187,
"total_tokens": 211
}
}The usage object is provided for SDK compatibility and request-level statistics. Your plan is governed by your monthly allowance, not by per-request metering — see Plans & Limits.
Streaming
Set "stream": true to receive the response incrementally as server-sent events. Each event is a chat.completion.chunk object; the stream ends with data: [DONE].
curl https://vort.org.za/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $VORT_API_KEY" \
-d '{
"model": "vb0",
"stream": true,
"messages": [{ "role": "user", "content": "Write a haiku about Johannesburg." }]
}'data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"City"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" of gold"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]With the OpenAI SDKs, pass stream=True and iterate over the chunks:
stream = client.chat.completions.create(
model="vb0",
messages=[{"role": "user", "content": "Write a haiku about Johannesburg."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Models
vb0 is the default and recommended model — Vort's enterprise model tuned for South African legal, financial, and enterprise domains.
| Parameter | Type | Required | Description |
|---|---|---|---|
| vb0 | chat | — | General-purpose enterprise model. Best default for chat, analysis, drafting, and extraction. |
Customers with fine-tuned deployments can address their private models by the model ID shown in the dashboard's Models panel. Fine-tuned models are only visible to, and callable by, the account that owns them.
Errors
Errors are returned as JSON with an error object containing a message, a type, and (where applicable) a code.
{
"error": {
"message": "Invalid or revoked API key",
"type": "invalid_request_error",
"code": "invalid_key"
}
}| Parameter | Type | Required | Description |
|---|---|---|---|
| 401 | missing_key | — | No API key found. Send it via Authorization: Bearer or X-API-Key. |
| 401 | invalid_key | — | The key does not exist or has been revoked. |
| 400 | invalid_request_error | — | Malformed JSON body, or messages is missing / empty. |
| 5xx | server_error | — | Upstream or platform issue. Safe to retry with exponential backoff. |
Plans & Limits
vb0 access is plan-based. Every account starts with a free evaluation allowance; paid plans carry a monthly usage allowance sized to your engagement. When the allowance is reached, responses direct you to the dashboard to upgrade or recharge.
Allowances, current usage, and recharge options are visible in the company dashboard. For enterprise volumes, dedicated capacity, or fine-tuned deployments, book a consultation.
Dashboard
From the company dashboard you can:
- Create, name, and revoke API keys
- Monitor request volume over 24h / 7d / 30d / 90d windows
- Track your monthly allowance and recharge your plan
- View and manage fine-tuned models