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.
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.
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="")
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.
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.
| Feld | Verhalten |
|---|---|
| model, messages, tools, tool_choice: auto | none, max_tokens, stop, temperature, response_format: json_schema, stream, stream_options | Berücksichtigt |
| tool_choice: a named function | Akzeptiert, 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_tokens | Verfü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.
{
"$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.
# 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.