- Dokumentation
- BRANE AIF
- API-Referenz
API-Referenz
Brane AIF Entwickler-API
1. Überblick
Die Box stellt ein OpenAI-kompatibles Gateway unter /api/v1 bereit. Jedes Werkzeug, das das OpenAI-Chat-Completions-Protokoll spricht — IDE-Erweiterungen (Continue, Cline), SDKs (openai, @ai-sdk/openai-compatible), n8n, eigene Anwendungen — kann die Box als Modell-Provider verwenden.
Tipp
Der Unterschied zu einem normalen Provider
Jede Anfrage läuft durch den Guardian. Die Box entscheidet lokal, ob eine Anfrage on-premise bleibt oder an ein Cloud-Modell geht, und entfernt PII, bevor irgendetwas die Box verlässt. Sie erhalten das OpenAI-Wire-Format — die Box behält die Datenhoheit.
2. Base URL
https://<your-box-domain>/api/v1
Alle folgenden Endpoints sind relativ zu dieser Base URL (/api/v1/chat/completions, /api/v1/models usw.).
3. Authentifizierung
Bei jeder Anfrage ein Bearer-Token:
Authorization: Bearer brn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Einen Key erzeugen Sie im Admin-Dashboard unter Admin → API Keys (/admin/api-keys). Keys sind gescoped (chat:completions), können ein eigenes Rate-Limit pro Key tragen und jederzeit widerrufen werden. Der Klartext-Key wird nur einmal bei der Erstellung angezeigt — bewahren Sie ihn sicher auf.
Warnung
Legacy-Bearer
Ein globaler Legacy-Bearer (AI_BOX_API_SECRET) wird für bestehende n8n-Setups weiterhin akzeptiert. Verwaltete Keys pro Nutzer sind jedoch klar zu bevorzugen — sie sind widerrufbar, rate-limitiert und zuordenbar.
4. Modelle auflisten — GET /v1/models
Listet die Modelle auf, die die Box bereitstellt. Die meisten SDKs und IDE-Erweiterungen rufen diesen Endpoint beim Einrichten auf, um den Key zu validieren und die Modellauswahl zu befüllen.
curl https://<your-box>/api/v1/models \
-H "Authorization: Bearer $BRANE_KEY"
{
"object": "list",
"data": [
{ "id": "vllm:gemma-4-26b-nvfp4", "object": "model", "created": 1750000000, "owned_by": "local" },
{ "id": "openrouter:anthropic/claude-sonnet-4.5", "object": "model", "created": 1750000000, "owned_by": "openrouter" }
]
}
Die sichtbare Menge respektiert den Admin-ZDR-Filter und die OpenRouter-Allowlist. owned_by: "local" kennzeichnet lokale vLLM-Modelle. Hinweis: Der Routing-Modus wird hier nicht angewendet — im Modus local-only können Cloud-Modelle gelistet sein, obwohl jede Anfrage lokal ausgeführt wird.
5. Chat Completions — POST /v1/chat/completions
Standard OpenAI Chat Completions. Unterstützt messages und stream mit Text-Content. temperature, max_tokens und top_p werden akzeptiert, aber derzeit nicht an das Modell weitergereicht; Bild-Eingaben (image_url) sind noch nicht verfügbar (beides Roadmap).
curl https://<your-box>/api/v1/chat/completions \
-H "Authorization: Bearer $BRANE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "vllm:gemma-4-26b-nvfp4",
"messages": [{ "role": "user", "content": "Refactor this function: ..." }],
"stream": true
}'
Streaming liefert Server-Sent Events im Format chat.completion.chunk, abgeschlossen durch data: [DONE]. Ohne Streaming erhalten Sie ein einzelnes chat.completion-Objekt. Das usage-Feld verwendet derzeit die Feldnamen des Vercel AI SDK (inputTokens/outputTokens), nicht das OpenAI-Format (prompt_tokens/completion_tokens).
6. Souveränitäts-Verhalten
Hinweis
Vor der Integration lesen
Das Gateway ist auf Wire-Ebene OpenAI-kompatibel, aber der Guardian ändert zwei Dinge, die Sie verstehen müssen.
1. Das model-Feld ist rein informativ
Der Guardian wählt das tatsächliche Modell allein anhand des Routing-Modus der Box (local-only, local-preferred, …) und des Inhalts der Anfrage: lokal das konfigurierte Box-Modell, in der Cloud das vom Admin konfigurierte Cloud-Modell. Ihr angefordertes Modell wird nicht direkt angesteuert — auch dann nicht, wenn das Routing in die Cloud geht. Das model-Feld in der Antwort nennt das tatsächlich ausgeführte Modell; über x_brane.model_requested bzw. die X-Brane-Overridden-Header erkennen Sie eine Abweichung.
2. PII wird vor der Cloud redigiert
Wenn der Guardian an ein Cloud-Modell routet und die PII-Policy anonymize lautet, werden personenbezogene Daten durch Tokens ersetzt (<PERSON_1>, <EMAIL_1>), bevor die Anfrage die Box verlässt, und in der Antwort wiederhergestellt. Das Cloud-Modell sieht nie echte Daten. Im Modus local-only verlässt gar nichts die Box — es ist keine Redaktion nötig.
Warnung
Für Code / IDE-Nutzung
Betreiben Sie die Box bevorzugt im Modus local-only. Quellcode und großer, automatisch zusammengestellter Kontext tragen Geheimnisse (API-Keys, Hostnamen, Connection-Strings), die eine statistische PII-Erkennung nicht zuverlässig erfasst. local-only beseitigt dieses Risiko vollständig — nichts verlässt die Box.
7. IDE-Integration
Continue.dev (VS Code / JetBrains)
~/.continue/config.json:
{
"models": [
{
"title": "Brane AIF (sovereign)",
"provider": "openai",
"model": "vllm:gemma-4-26b-nvfp4",
"apiBase": "https://<your-box>/api/v1",
"apiKey": "brn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
]
}
provider: "openai" plus eine eigene apiBase richten Continue auf die Box aus. Chat, Erklären und Refactoring funktionieren bereits heute.
Cline / Roo
Wählen Sie den Provider „OpenAI Compatible“, setzen Sie die Base URL auf https://<your-box>/api/v1 und fügen Sie den Key ein.
8. Aktuelle Einschränkungen
Ehrlicher Umfang dessen, was das Gateway noch nicht leistet:
| Funktion | Status |
|---|---|
| Chat (fragen, erklären, refactoren) | verfügbar |
GET /v1/models Discovery |
verfügbar |
Tool- / Function-Calling (tools, tool_calls) |
noch nicht — erforderlich für agentisches Coding (Cline Agent Mode, Continue Agent) |
Inline-Autocomplete (FIM /v1/completions) |
noch nicht |
Embeddings (/v1/embeddings, @codebase) |
noch nicht |
Streaming usage / stream_options |
wird nicht ausgegeben |
temperature / max_tokens / top_p / max_completion_tokens |
werden akzeptiert, derzeit nicht an das Modell weitergereicht |
Hinweis
Ausblick
Für agentisches Coding und Inline-Vervollständigung ist ein transparenter Proxy auf die on-prem vLLM-/v1-Oberfläche geplant (Roadmap).
9. Fehler
OpenAI-typischer Fehler-Envelope:
{ "error": { "message": "Invalid API Key", "type": "auth_error" } }
| Status | type |
Ursache |
|---|---|---|
| 400 | invalid_request_error |
Fehlerhafter Body / fehlerhafte bekannte Felder (unbekannte Top-Level-Felder werden stillschweigend ignoriert) |
| 401 | auth_error |
Key fehlt oder ist ungültig |
| 403 | auth_error |
Key fehlt der Scope chat:completions |
| 403 | user_disabled |
Nutzer wurde deaktiviert |
| 429 | rate_limit_error |
Rate-Limit pro Key überschritten (Retry-After: 60). Das IP-basierte Gateway-Limit antwortet ebenfalls mit 429, jedoch mit vereinfachtem Envelope ({"error": "…"}) und dynamischem Retry-After |
| 500 | server_error |
Interner Fehler (Details werden serverseitig geloggt, nie zurückgegeben) |
Fragen zur Integration?
Unser Team unterstützt Sie bei der Anbindung Ihrer Werkzeuge.