API: Authentifizierung
Wie du Kasimir-API-Schlüssel erstellst und Requests an die OpenAI-kompatible REST-API per Bearer-Token authentifizierst.
Die öffentliche Kasimir-API ist OpenAI-kompatibel und unter der Basis-URL https://kasimir.ai/api/v1 erreichbar. Jeder Request wird über einen firmengebundenen API-Schlüssel im Authorization-Header authentifiziert – es gibt keine Session, keine Cookies und kein OAuth. Ein Schlüssel repräsentiert immer genau eine Organisation (Mandant), und sämtliche Nutzung (Tokens, Kosten) wird auf das Monatsbudget dieser Organisation verrechnet. Weil die Wire-Formate denen von OpenAI entsprechen, kannst du das offizielle OpenAI-SDK unverändert verwenden – du setzt lediglich base_url und api_key.
Überblick
Eigenschaft | Wert |
|---|---|
Basis-URL |
|
Auth-Schema |
|
Schlüsselformat |
|
Geltungsbereich | pro Organisation (Mandant) |
Kompatibilität | OpenAI Chat Completions, Embeddings, Models |
Der API-Schlüssel ist mandantengebunden, nicht benutzergebunden. Jeder Request läuft im Kontext der Organisation, für die der Schlüssel erstellt wurde – mit deren freigeschalteten Modellen, deren Modell-Governance (EU-Gate, deaktivierte Modelle, Tarif) und deren Monatsbudget.
API-Schlüssel erstellen
API-Schlüssel werden ausschließlich in der Weboberfläche unter Administration → Zugriff (/administration/access) verwaltet. Nur Mitglieder mit der Rolle owner oder admin dürfen Schlüssel anlegen, auflisten oder widerrufen.
Öffne
/administration/accessund klicke bei API-Keys auf Neuer Key.Vergib einen sprechenden Namen (z. B.
ci-pipelineodercrm-integration).Klicke auf Erstellen.
Kopiere den vollständigen Schlüssel sofort – er wird nur ein einziges Mal im Klartext angezeigt.
Der vollständige Schlüssel wird nur einmal angezeigt – direkt nach dem Erstellen. Kasimir kann ihn danach nicht mehr anzeigen. Geht er verloren, widerrufe ihn und erstelle einen neuen.
Schlüsselformat
Ein Schlüssel beginnt mit kasi_. In der Liste siehst du danach nur noch den Anfang (z. B. kasi_ab3f…), damit du ihn wiedererkennst.
Scopes
Beim Erstellen fragt Kasimir nur nach einem Namen; jeder Schlüssel erhält die Scopes chat:read und chat:write.
Scope | Bedeutung | Erforderlich für |
|---|---|---|
| Lesezugriff (Modell-Liste) | – |
| Inferenz ausführen |
|
Die Laufzeit-Endpunkte (Chat, Embeddings, Assistant-Run) verlangen alle den Scope chat:write. GET /models verlangt nur einen gültigen Schlüssel (kein spezifischer Scope). In der Praxis benötigt fast jede Integration chat:write.
Authentifizierung im Request
Sende den Schlüssel als Bearer-Token im Authorization-Header. Erwartet wird exakt das Muster Bearer <schlüssel> (Groß-/Kleinschreibung des Wortes „Bearer" wird toleriert).
curl https://kasimir.ai/api/v1/chat/completions \
-H "Authorization: Bearer kasi_DEIN_SCHLUESSEL" \
-H "Content-Type: application/json" \
-d '{
"model": "gemma-4-31b",
"messages": [
{ "role": "user", "content": "Sag Hallo auf Deutsch." }
]
}'Schneller Verbindungstest gegen den models-Endpunkt (benötigt nur einen gültigen Schlüssel):
curl https://kasimir.ai/api/v1/models \
-H "Authorization: Bearer kasi_DEIN_SCHLUESSEL"Mit dem OpenAI Python SDK
Da die API OpenAI-kompatibel ist, genügt das Umstellen von base_url und api_key:
from openai import OpenAI
client = OpenAI(
api_key="kasi_DEIN_SCHLUESSEL",
base_url="https://kasimir.ai/api/v1",
)
# Verfügbare Modelle auflisten
for m in client.models.list().data:
print(m.id)
# Chat-Completion
resp = client.chat.completions.create(
model="gemma-4-31b",
messages=[{"role": "user", "content": "Sag Hallo auf Deutsch."}],
)
print(resp.choices[0].message.content)Setze den Schlüssel über die Umgebungsvariablen OPENAI_API_KEY und OPENAI_BASE_URL, dann konfiguriert sich das SDK ohne Code-Änderung. Schreib Schlüssel niemals in den Quellcode oder ins Repository.
Fehlerformat
Authentifizierungs- und sonstige Fehler werden im OpenAI-Fehlerformat zurückgegeben, sodass off-the-shelf-SDKs sie normal verarbeiten:
{
"error": {
"message": "Invalid API key",
"type": "authentication_error",
"code": null
}
}Auth- und budgetbezogene Statuscodes
Status |
| Ursache |
|---|---|---|
|
| Kein Bearer-Token, ungültiger Schlüssel oder widerrufener Schlüssel |
|
| Monatsbudget der Organisation erreicht |
|
| Fehlender Scope (z. B. |
|
| Modell unbekannt oder Agent nicht gefunden |
|
| Zu viele Anfragen in kurzer Zeit mit diesem Schlüssel |
|
| Ungültiger Request-Body |
|
| Vorübergehender Fehler bei der Verarbeitung |
Konkrete 401-Meldungen je nach Ursache: Missing bearer token, Invalid API key, API key revoked. Ein fehlender Scope liefert 403 mit Missing scope: chat:write.
Beim gestreamten Chat ("stream": true) werden Fehler, die vor Beginn des Streams auftreten (z. B. Auth, Budget), als normaler JSON-Fehler geliefert. Tritt der Fehler erst während des laufenden SSE-Streams auf, kann er nicht mehr in das JSON-Format umgewandelt werden – der Stream bricht dann ab.
Schlüssel verwalten und widerrufen
Unter Administration → Zugriff sehen owner/admin alle Schlüssel der Organisation mit Name, Präfix, Scopes, Erstellungsdatum und letzter Nutzung. Widerrufene Schlüssel werden ab sofort mit 401 API key revoked abgelehnt. Ein Widerruf ist endgültig; es gibt keine Reaktivierung.
Verwende pro Integration/Umgebung einen eigenen benannten Schlüssel (z. B. prod-backend, staging, analytics-job). So kannst du einen kompromittierten oder ausgemusterten Schlüssel gezielt widerrufen, ohne andere Integrationen zu beeinträchtigen. Namen müssen pro Organisation eindeutig sein.
Sicherheitshinweise
Behandle API-Schlüssel wie Passwörter: niemals committen, niemals an Clients/Browser ausliefern, niemals in Logs schreiben.
Schlüssel haben keinen Ablauf – rotiere sie regelmäßig durch Widerruf + Neuerstellung.
Die gesamte Nutzung über die API zählt zusammen mit allen anderen KI-Kosten der Organisation (Chat, Workflows, Bilder und mehr) auf ihr Monatsbudget.
Modell-Governance gilt identisch zur App: deaktivierte Modelle, nicht-EU-Modelle (ohne Opt-in der Organisation) und Modelle, die der Tarif nicht enthält, sind auch über die API gesperrt.