API: Embeddings
OpenAI-kompatibler Embeddings-Endpunkt der Kasimir Public API für 1024-dimensionale Vektor-Embeddings.
Der Embeddings-Endpunkt wandelt Text in Vektoren um, die du für semantische Suche, Clustering, Klassifikation oder eigene RAG-Anwendungen nutzen kannst. Er ist kompatibel zur OpenAI Embeddings API: Du kannst das offizielle OpenAI-SDK (oder jeden OpenAI-kompatiblen Client) unverändert verwenden und stellst nur base_url und api_key auf Kasimir um. Es gelten die Modellfreigaben und das Budget eurer Firma.
Endpunkt
Methode |
|
URL |
|
Base URL |
|
Content-Type |
|
Auth |
|
Benötigter Scope |
|
OpenAI-kompatibel
Setze in einem beliebigen OpenAI-Client base_url = "https://kasimir.ai/api/v1" und api_key = "<dein-kasimir-key>". Request- und Response-Form entsprechen POST /v1/embeddings von OpenAI.
Authentifizierung
Alle Aufrufe werden über einen Firmen-API-Key authentifiziert, der im Header Authorization: Bearer <key> mitgesendet wird.
Schlüssel erzeugen Inhaber und Admins unter Administration → Zugriff.
Ein Schlüssel beginnt mit kasi_ und wird nur einmal bei der Erstellung vollständig angezeigt.
Neue Schlüssel haben standardmäßig die Scopes chat:read und chat:write. Für Embeddings ist chat:write nötig.
Widerrufene Schlüssel werden mit 401 abgewiesen.
Key niemals im Client-Code
Behandle den API-Key wie ein Passwort. Verwende ihn ausschließlich serverseitig und committe ihn nie in ein Repository. Bei Verlust den Key in /administration/access widerrufen und einen neuen erzeugen.
Request
Header
Header | Wert | Pflicht |
|---|---|---|
|
| ja |
|
| ja |
Body-Parameter
Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
|
| ja | Der öffentliche Modell-Slug eines Embedding-Modells, z. B. |
|
| ja | Der zu embeddende Text. Entweder ein einzelner String oder ein Array von Strings für Batch-Embedding. |
Weitere OpenAI-kompatible Felder (z. B. encoding_format oder dimensions) werden an das Modell weitergegeben, sofern es sie unterstützt. Pflicht sind nur model und input.
Response
Die Antwort entspricht dem OpenAI-Embeddings-Schema. Das Feld model enthält den Kasimir-Slug.
Feld | Typ | Beschreibung |
|---|---|---|
|
| Immer |
|
| Liste der Embedding-Objekte (siehe unten). |
|
| Der angeforderte Kasimir-Modell-Slug. |
|
| Token-Verbrauch: |
Jedes Element in data:
Feld | Typ | Beschreibung |
|---|---|---|
|
| Immer |
|
| Position im |
|
| Der Vektor. Beim Standard-Modell 1024 Dimensionen. |
Das Standardmodell jina-embeddings-v3 (EU-gehostet) liefert Vektoren mit 1024 Dimensionen.
Beispiele
curl — einzelner Text
curl https://kasimir.ai/api/v1/embeddings \
-H "Authorization: Bearer kasi_DEIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jina-embeddings-v3",
"input": "Die DSGVO regelt den Umgang mit personenbezogenen Daten."
}'curl — Batch (mehrere Texte)
curl https://kasimir.ai/api/v1/embeddings \
-H "Authorization: Bearer kasi_DEIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jina-embeddings-v3",
"input": [
"Erster Absatz zum Embedden.",
"Zweiter Absatz zum Embedden."
]
}'OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="https://kasimir.ai/api/v1",
api_key="kasi_DEIN_API_KEY",
)
resp = client.embeddings.create(
model="jina-embeddings-v3",
input="Die DSGVO regelt den Umgang mit personenbezogenen Daten.",
)
vector = resp.data[0].embedding
print(len(vector)) # 1024
print(resp.usage.prompt_tokens)Batch mit dem Python SDK
texts = [
"Erster Absatz zum Embedden.",
"Zweiter Absatz zum Embedden.",
]
resp = client.embeddings.create(model="jina-embeddings-v3", input=texts)
for item in resp.data:
print(item.index, len(item.embedding))Beispiel-Antwort
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [0.0123, -0.0456, 0.0789, "...weitere 1021 Werte..."]
}
],
"model": "jina-embeddings-v3",
"usage": {
"prompt_tokens": 12,
"total_tokens": 12
}
}Modelle auflisten
Welche Slugs für deinen Workspace freigegeben sind, ermittelst du über den Modell-Endpunkt. Er gibt Chat- und Embedding-Modelle zurück (gefiltert nach Mandanten-Freigabe und EU-Gate):
curl https://kasimir.ai/api/v1/models \
-H "Authorization: Bearer kasi_DEIN_API_KEY"client.models.list()Fehler
Fehler werden im OpenAI-Fehlerformat zurückgegeben, damit Standard-SDKs sie normal behandeln:
{
"error": {
"message": "Missing scope: chat:write",
"type": "permission_error",
"code": null
}
}Der HTTP-Statuscode bestimmt das type-Feld:
Status |
| Ursache |
|---|---|---|
|
| Ungültiger Body (fehlendes |
|
| Kein Bearer-Token, ungültiger Key oder widerrufener Key. |
|
| Monatsbudget des Workspace erreicht. |
|
| Fehlender Scope ( |
|
| Modell-Slug unbekannt oder inaktiv. |
|
| Zu viele Anfragen in kurzer Zeit mit diesem Schlüssel. |
|
| Vorübergehender Fehler bei der Verarbeitung (z. B. |
Budget-Grenze (402) Hat eure Firma ein Monatsbudget gesetzt und die Summe aus API- und In-App-Verbrauch des laufenden Kalendermonats erreicht es, antwortet jeder Aufruf mit 402. Ohne Budget gibt es keine Grenze.
Governance & Abrechnung
Modellfreigabe: Es gelten dieselben Regeln wie bei der Modellauswahl in der App – nur aktive, für eure Firma freigegebene Embedding-Modelle.
EU-Freigabe: Modelle außerhalb der EU werden mit 403 abgelehnt, solange eure Firma sie nicht ausdrücklich freigeschaltet hat. Das Standardmodell ist EU-gehostet.
Verbrauch: Jeder erfolgreiche Aufruf wird mit Tokens und Kosten in Euro verbucht und zählt zum Monatsbudget.
DSGVO / Datenresidenz
Der Standard-Embedding-Slug jina-embeddings-v3 ist als EU-gehostet markiert. Wenn Datenresidenz für dich kritisch ist, prüfe vor dem Embedden personenbezogener Daten über GET /api/v1/models, dass dein gewähltes Modell EU-gehostet ist.