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.

BASEhttps://vort.org.za/api/v1

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:

http
Authorization: Bearer vrt_live_xxxxxxxxxxxxxxxx

# or, equivalently:
X-API-Key: vrt_live_xxxxxxxxxxxxxxxx
Some proxies and hosting edges strip the Authorization header. If you receive a 401 missing_key error while sending a valid Bearer token, switch to the X-API-Key header.
Your full API key is shown once, at creation time, and cannot be recovered afterwards — only its prefix is stored. If a key is lost or exposed, revoke it in the dashboard and create a new one.

Quickstart

Create an API key in the dashboard, then send your first request.

cURL

bash
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)

python
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

typescript
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.

POST/v1/chat/completions

Request body

ParameterTypeRequiredDescription
messagesarrayYesConversation history. Each message has a role (system, user, or assistant) and content string. Must be non-empty.
modelstringNoModel to use. Defaults to "vb0". See Models below.
streambooleanNoWhen true, the response is streamed as server-sent events. Defaults to false.
max_tokensintegerNoUpper bound on the length of the generated response. Defaults to 8192.
temperaturenumberNoSampling temperature. Lower values are more deterministic; higher values more creative.
toolsarrayNoTool definitions for function calling, in the standard chat-completions tools format.
tool_choicemixedNoControls how the model selects tools when tools are provided.

Response

json
{
  "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].

bash
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." }]
  }'
text
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:

python
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.

ParameterTypeRequiredDescription
vb0chatGeneral-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.

json
{
  "error": {
    "message": "Invalid or revoked API key",
    "type": "invalid_request_error",
    "code": "invalid_key"
  }
}
ParameterTypeRequiredDescription
401missing_keyNo API key found. Send it via Authorization: Bearer or X-API-Key.
401invalid_keyThe key does not exist or has been revoked.
400invalid_request_errorMalformed JSON body, or messages is missing / empty.
5xxserver_errorUpstream or platform issue. Safe to retry with exponential backoff.
If your monthly allowance is exhausted, the API does not return an error status — it returns a normal completion whose content explains the limit and links to the dashboard to upgrade. Check for this in long-running integrations.

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