Dokumentation

BreignHUB spricht das OpenAI-Protokoll. Richten Sie einen beliebigen Client auf die Basis-URL unten, verwenden Sie einen BreignHUB-Schlüssel als API-Key, und Ihr übriger Code bleibt unverändert.

Basis-URL und Authentifizierung

Der Schlüssel wird im Authorization-Header als Bearer Token gesendet. Schlüssel werden im Dashboard erstellt und einmalig angezeigt — BreignHUB speichert das Geheimnis nicht und kann es nicht erneut zeigen.

Basis-URL
https://api.hub.breign.eu/v1
API-Key
Ein Schlüssel aus dem Dashboard, beginnend mit otoapk_

Vom eigenen Server aufrufen, nicht aus dem Browser

Das Gateway antwortet Browsern nur vom Ursprung dieser Website, für die Testkonsole des Dashboards. Das ist beabsichtigt: Ein BreignHUB-Schlüssel im Frontend-Code ist ein veröffentlichter Schlüssel. Bewahren Sie ihn auf Ihrem Server oder hinter einem Proxy unter Ihrer Kontrolle auf.

Ihr erster Aufruf

Modell-IDs sind einfache Namen, genau wie GET /models sie auflistet: ohne Provider-Präfix. Dort nachsehen oder im Katalog.

first-call.sh
curl https://api.hub.breign.eu/v1/chat/completions \
  -H "Authorization: Bearer $BREIGNHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<model>",
    "messages": [{ "role": "user", "content": "Say hello." }]
  }'

Aus dem OpenAI SDK

Nur die Basis-URL ändert sich. Streaming funktioniert genauso.

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.hub.breign.eu/v1",
    api_key=os.environ["BREIGNHUB_API_KEY"],
)

stream = client.chat.completions.create(
    model="<model>",
    messages=[{"role": "user", "content": "Say hello."}],
    stream=True,
)

for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
typescript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.hub.breign.eu/v1",
  apiKey: process.env.BREIGNHUB_API_KEY,
});

const stream = await client.chat.completions.create({
  model: "<model>",
  messages: [{ role: "user", content: "Say hello." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Modelle auflisten

Liefert die Modelle, die die Organisation des Schlüssels erreicht. Die Verfügbarkeit kommt von der Organisation, nicht vom Schlüssel.

models.sh
curl https://api.hub.breign.eu/v1/models \
  -H "Authorization: Bearer $BREIGNHUB_API_KEY"

Was das Gateway berücksichtigt

Am Gateway gemessen, nicht aus einer Spezifikation abgeleitet. Die Felder unten verhalten sich wie von OpenAI dokumentiert, sofern die Tabelle nichts anderes sagt.

FeldVerhalten
model, messages, tools, tool_choice: auto | none, max_tokens, stop, temperature, response_format: json_schema, stream, stream_optionsBerücksichtigt
tool_choice: a named functionAkzeptiert, aber von der Inferenz-Engine nicht erzwungen: Das Modell kann ein anderes Werkzeug aufrufen. Prüfen Sie den Werkzeugnamen in der Antwort.
finish_reason: "length"Übermittelt. Eine nicht gestreamte Antwort, die max_tokens abschneidet, endet mit "length" (Anthropic: "max_tokens"), wie der Anbieter es gemeldet hat.
usage.prompt_tokens_details.cached_tokensÜbermittelt, wenn der Anbieter es meldet. DEEP antwortet derzeit 0, auch bei einem Cache-Treffer; eine Null wird nicht gemessen.
POST /v1/messages/count_tokensVerfügbar. Der Prompt wird vom Anbieter selbst gemessen, mit einem Ein-Token-Aufruf: exakt, aber gemessen und abgerechnet wie jeder andere Aufruf.

BreignHUB aus einem Coding-Agenten nutzen

Jedes Werkzeug, das eine OpenAI-kompatible Basis-URL erlaubt, funktioniert. Zwei Beispiele.

opencode

Fügen Sie einen Provider in opencode.json hinzu. Verwenden Sie @ai-sdk/openai-compatible, das auf /v1/chat/completions zielt. Markieren Sie das Modell mit tool_call, damit opencode Tools nativ aufruft, danach /models ausführen und auswählen.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "breignhub": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "BreignHUB",
      "options": {
        "baseURL": "https://api.hub.breign.eu/v1",
        "apiKey": "{env:BREIGNHUB_API_KEY}"
      },
      "models": {
        "<model>": {
          "name": "Qwen3.6 35B",
          "tool_call": true
        }
      }
    }
  }
}

export BREIGNHUB_API_KEY=otoapk_…  ·  opencode  ·  /models

Alle anderen

Continue, Cline, aider, LangChain, das Vercel AI SDK — alle nehmen eine Basis-URL und einen API-Key. Beides setzen, fertig. Tool-Calling und response_format: json_schema funktionieren. Das Einzige, was das Gateway nicht durchsetzt, ist ein tool_choice, das eine bestimmte Funktion erzwingt: Das Modell kann ein anderes Werkzeug aufrufen, prüfen Sie daher den Werkzeugnamen in der Antwort.

Fehler

Fehler nutzen nicht die OpenAI-Hülle. Ein fehlender oder abgelehnter Schlüssel antwortet mit 400 und einem Feld Otoroshi-Error; ein fehlerhafter Body mit 400, error und error_details; ein Fehler des Inferenz-Clusters wird so durchgereicht, wie der Cluster ihn erzeugt hat.

errors.json
# no key, or a key the gateway rejects — 400
{ "Otoroshi-Error": "invalid apikey tuple" }

# a body that is not valid JSON — 400
{ "error": "bad_request", "error_details": "Unexpected end-of-input…" }

# an error raised by the inference cluster, passed through
{ "detail": "Model not found" }

Schlüssel erstellen

Schlüssel werden im Dashboard erstellt und widerrufen.

Schlüssel erstellen