API — OpenAI-kompatible Schnittstelle
Priki lässt sich aus eigenen Anwendungen ansprechen. Die Schnittstelle folgt dem OpenAI-Schema: Bestehende SDKs funktionieren, indem Sie Basis-Adresse und Schlüssel austauschen. Der Inhalt bleibt dabei auf derselben Infrastruktur in Deutschland wie in der Anwendung selbst.
Basis-Adresse
https://api.priki.de/v1
Ausschließlich über HTTPS erreichbar. Andere Pfade unter
api.priki.de gehören nicht zur Schnittstelle und werden
abgewiesen.
Schlüssel anlegen
Schlüssel verwaltet die Inhaberin der Organisation in der Anwendung unter API-Keys. Mitglieder und Administratoren sehen den Bereich nicht.
Bereich „API-Keys" öffnen
In app.priki.de, angemeldet als Inhaberin der Organisation.
Neuen Key erstellen
Sie vergeben einen Namen (z. B. Website-Chatbot), ein Monatsbudget in Token, ein Rate-Limit in Anfragen pro Minute und die Modelle, die dieser Schlüssel benutzen darf. Alle vier Angaben gelten je Schlüssel — ein kompromittierter Schlüssel für den Chatbot reißt so nicht das Kontingent der ganzen Organisation mit.
Schlüssel sofort sichern
Der Klartext wird genau einmal angezeigt und danach nirgends mehr gespeichert — in der Datenbank liegen nur ein maskiertes Präfix und eine Prüfsumme. Auch der Betreiber kann ihn nicht erneut hervorholen. Behandeln Sie ihn wie ein Passwort: Umgebungsvariable oder Secret-Store, niemals im Frontend, niemals im Repository.
Bei Verdacht widerrufen
Ein Klick auf „Widerrufen" macht den Schlüssel sofort ungültig. Der Eintrag bleibt mit Datum stehen, damit der Verbrauch zuordenbar bleibt.
Authentifizierung
Der Schlüssel steht als Bearer-Token im Kopf jeder Anfrage:
Authorization: Bearer $PRIKI_KEY
Content-Type: application/json
Chat Completions
POST /v1/chat/completions — der Endpunkt für alles: Fragen,
Zusammenfassungen, Textentwürfe.
curl https://api.priki.de/v1/chat/completions \
-H "Authorization: Bearer $PRIKI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-14b",
"messages": [
{"role": "system", "content": "Du bist ein praeziser Assistent. Antworte auf Deutsch."},
{"role": "user", "content": "Fasse den folgenden Absatz in drei Saetzen zusammen: ..."}
],
"temperature": 0.3,
"max_tokens": 800
}'
Antwort (gekürzt)
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1753600000,
"model": "qwen3-14b",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "..."},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 61, "completion_tokens": 142, "total_tokens": 203}
}
Streaming
Mit "stream": true kommt die Antwort als Server-Sent Events,
Stück für Stück — dieselbe Darstellung wie im Priki-Chat.
curl https://api.priki.de/v1/chat/completions \
-H "Authorization: Bearer $PRIKI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-14b",
"messages": [{"role": "user", "content": "Nenne drei Vorteile der Zwei-Faktor-Anmeldung."}],
"stream": true
}'
Antwort (Ausschnitt)
data: {"choices":[{"delta":{"content":"Erstens"},"index":0}], ...}
data: {"choices":[{"delta":{"content":": Die"},"index":0}], ...}
data: [DONE]
Mit dem OpenAI-SDK
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.priki.de/v1",
api_key=os.environ["PRIKI_KEY"],
)
r = client.chat.completions.create(
model="qwen3-14b",
messages=[{"role": "user", "content": "Hallo Priki!"}],
)
print(r.choices[0].message.content)
web_search (siehe unten), die Priki auswertet.Websuche (optional)
Mit dem Feld "web_search": true reichert Priki den Prompt vor der
Antwort mit frischen Quellen aus dem Netz an — dieselbe Recherche wie der
Weltkugel-Knopf im Chat. Standardmäßig ist die Websuche aus:
Ohne dieses Flag verlässt keine Anfrage Ihre Organisation.
curl https://api.priki.de/v1/chat/completions \
-H "Authorization: Bearer $PRIKI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-14b",
"messages": [{"role": "user", "content": "Aktueller Leitzins der EZB?"}],
"web_search": true
}'
web_search ist eine Priki-Erweiterung, kein OpenAI-Feld. Im
OpenAI-SDK reichen Sie es über extra_body durch:
r = client.chat.completions.create(
model="qwen3-14b",
messages=[{"role": "user", "content": "Aktueller Leitzins der EZB?"}],
extra_body={"web_search": True},
)
- Der Suchbegriff ist Ihre letzte Nutzernachricht — nicht ein Vorschlag des Modells.
- Die gefundenen Auszüge zählen als Eingabe-Token auf Ihr Kontingent; die Suche kostet zusätzlich einige Sekunden.
- Findet die Suche nichts, oder ist sie in Ihrer Organisation nicht erlaubt, antwortet das Modell ohne Netzquellen weiter — die Anfrage schlägt deshalb nicht fehl.
- Bei Rechtsfragen ist der amtliche Rechtsbestand die bessere Quelle; die offene Websuche ersetzt ihn nicht.
Modelle
GET /v1/models liefert, was Ihr Schlüssel tatsächlich
ansprechen darf. Diese Liste ist maßgeblich — welche Modelle
geladen sind, hängt von der Ausstattung Ihrer Installation ab.
curl https://api.priki.de/v1/models -H "Authorization: Bearer $PRIKI_KEY"
Antwort (gekürzt)
{
"object": "list",
"data": [
{"id": "qwen3-14b", "object": "model"}
]
}
Der Katalog, aus dem Priki auswählt:
| Modell-ID | Bezeichnung | Kontextfenster | Wofür |
|---|---|---|---|
qwen3-14b | Qwen 3 14B | 32.768 Token | Standard — starke Qualität für Texte, Analysen und Deutsch |
qwen3-8b | Qwen 3 8B | 16.384 Token | Sparsam — kurze Aufgaben, Titel, Aufbereitung |
qwen3-30b-a3b | Qwen 3 30B-A3B (MoE) | 32.768 Token | Hohe Qualität bei hohem Tempo |
qwen3-32b | Qwen 3 32B | 32.768 Token | Höchste Präzision, dafür langsamer |
Grenzen
| Grenze | Wert | Anmerkung |
|---|---|---|
| Ratenbegrenzung | 20 Anfragen/Sekunde im Mittel, kurzzeitig bis 40 | gemessen je aufrufender IP-Adresse, vor der Authentifizierung |
| Rate-Limit je Schlüssel | frei wählbar (Anfragen pro Minute) | beim Anlegen des Schlüssels gesetzt |
| Monatsbudget je Schlüssel | frei wählbar (Token) | ist es aufgebraucht, antwortet der Schlüssel bis zum Monatswechsel nicht mehr |
| Grösse der Anfrage | 1 MB | weit mehr, als in das grösste Kontextfenster passt |
| Zeitlimit je Anfrage | 120 Sekunden | gilt für Anfragen
ohne stream; lange Generierungen besser gestreamt abholen |
API-Nutzung zählt auf dasselbe Monatskontingent wie die Anwendung. Den Verbrauch je Schlüssel sehen Sie im Bereich API-Keys, den der Organisation auf der Übersicht.
Fehler
Fehler kommen im OpenAI-Format; entscheidend ist das Feld
message:
{"error": {"message": "...", "type": "...", "code": "..."}}
| Status | Bedeutung | Was zu tun ist |
|---|---|---|
| 400 | Anfrage fehlerhaft: ungültiges JSON, fehlende Felder, zu langer Prompt — oder ein Modell, das dieser Schlüssel nicht nutzen darf bzw. das nicht geladen ist. | Rumpf prüfen, Modell-ID gegen
/v1/models abgleichen. |
| 401 | Kein, falscher oder widerrufener Schlüssel. | Kopfzeile prüfen (Bearer nicht vergessen). Widerrufene
Schlüssel leben nicht wieder auf — neuen anlegen. |
| 403 | Der Zugang Ihrer Organisation ruht — abgelaufene Testphase oder pausiertes Abonnement. | Nicht wiederholen, das löst sich nicht von selbst: in der Anwendung unter Einstellungen, Bereich Tarif & Zahlung, klären. |
| 404 | Diesen Endpunkt gibt es nicht. | Die Schnittstelle
kennt GET /v1/models und
POST /v1/chat/completions. |
| 429 | Zu viele Anfragen oder Budget erschöpft. | Wiederholen mit wachsendem Abstand (exponentielles Backoff), nicht in enger Schleife. Bei Budget: Grenze in der Anwendung anheben. |
| 500 / 502 / 503 | Das Modell ist gerade nicht erreichbar. | Nach kurzer Wartezeit erneut versuchen; hält es an, an den Support wenden. |
| 504 | Zeitlimit überschritten. | Kürzeren Prompt,
kleineres max_tokens oder stream verwenden. |
Was die Schnittstelle nicht tut
- Kein Internetzugang. Das Modell ruft keine Webseite ab, öffnet keinen Link und sucht nichts nach. Alles, was es wissen soll, muss im Prompt stehen.
- Kein Training auf Ihren Daten. Anfragen fließen nicht in ein Modell zurück. Das Gateway schreibt die Inhalte nicht mit — erfasst werden nur Tokenzahlen für die Verbrauchsanzeige.
- Kein Gedächtnis zwischen Anfragen. Jeder Aufruf steht
für sich; einen Gesprächsverlauf schicken Sie selbst im Feld
messagesmit. - Nur Text. Keine Bilder, keine Audiodateien, kein Datei-Upload. PDFs wandeln Sie vor dem Aufruf in Text um.
- Keine Anwendungsfunktionen. Dokumentanhänge, Briefe, Notizen, Team-Chat und Suche gehören zur Anwendung, nicht zur Schnittstelle. Die API ist reine Inferenz.
- Kein unbegrenzter Kontext. Siehe Kontextfenster oben.
Datenschutz
Für Anfragen über die API gilt, was auch in der Anwendung gilt: Die Verarbeitung findet auf einem dedizierten, in Deutschland gemieteten Server statt, es ist kein US-Anbieter beteiligt, und die Inhalte werden nicht zum Training verwendet. Es gilt der Auftragsverarbeitungsvertrag Ihrer Organisation: Er erfasst alle personenbezogenen Daten, die berechtigte Nutzer in die Plattform eingeben — also auch die über die API gesendeten. Details unter „Was mit Ihren Daten passiert" und „Verträge & DSGVO".