API-Referenz
Die API folgt dem OpenAI-Format unter https://ai.geraikita.com/v1 und dem Anthropic-Format unter https://ai.geraikita.com. Alle Request- und Response-Bodies sind JSON (UTF-8).
| Endpoint | Funktion |
|---|---|
| POST /v1/chat/completions | Chat im OpenAI-Format (Stream & Non-Stream) |
| POST /v1/messages | Messages im Anthropic-Format (Stream & Non-Stream) |
| POST /v1/messages/count_tokens | Prompt-Tokens im Anthropic-Format zählen — kostenlos |
| GET /v1/models | Liste der nutzbaren Modelle |
| POST /v1/images/generations | Bilder aus einem Text-Prompt erzeugen, Abrechnung pro Bild — siehe Bildgenerierung |
/v1/responses, /v1/embeddings) werden noch nicht unterstützt.Chat Completions (OpenAI)
https://ai.geraikita.com/v1/chat/completionsErzeugt eine Antwort aus einer Liste von Nachrichten. Header: Authorization: Bearer gk-… und Content-Type: application/json.
Request-Body
| Parameter | Typ | Beschreibung |
|---|---|---|
model | string | Pflicht. Modell-ID genau wie in der Modellliste, ohne Prefix. |
messages | array | Pflicht. Geordnetes Array von Nachrichten; jede Nachricht enthält role und content. Mindestens eine Nachricht. |
stream | boolean | true, um die Antwort schrittweise per Server-Sent Events zu erhalten. |
max_tokens | integer | Maximale Tokens der Antwort. Reicht das Guthaben für den angefragten Wert nicht, kann der Server ihn automatisch senken. |
temperature, top_p, stop | — | Wird unverändert an das Modell weitergegeben. Unterstützung und Wertebereich hängen vom Modell ab. |
tools, tool_choice | array / object | Function Calling (Tool Calling) im OpenAI-Format, weitergegeben an Modelle, die es unterstützen. |
Beispiel-Request
curl https://ai.geraikita.com/v1/chat/completions \
-H "Authorization: Bearer gk-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "Hallo!"}]
}'Beispiel-Response
{
"id": "chatcmpl-…",
"object": "chat.completion",
"model": "claude-sonnet-5",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "…" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 12, "completion_tokens": 9, "total_tokens": 21 }
}Das usage-Objekt enthält die Token-Anzahl, die der Abrechnung zugrunde liegt — siehe Preise & Abrechnung.
Messages (Anthropic)
https://ai.geraikita.com/v1/messagesNativer Anthropic-Endpoint für das Anthropic SDK und Claude Code CLI. Base-URL im Client = https://ai.geraikita.com (ohne /v1).
Header
| Header | Wert | Beschreibung |
|---|---|---|
| x-api-key | gk-… | Dein gk--API-Key (Authorization: Bearer wird ebenfalls akzeptiert). |
| anthropic-version | 2023-06-01 | Anthropic-API-Version; wird vom SDK automatisch gesendet. |
| content-type | application/json | — |
Request-Body
| Parameter | Typ | Beschreibung |
|---|---|---|
model | string | Pflicht. Modell-ID genau wie in der Modellliste, ohne Prefix. |
messages | array | Pflicht. Array von Nachrichten im Anthropic-Format, mindestens eine Nachricht. |
max_tokens | integer | Maximale Tokens der Antwort (im Anthropic-Format Pflicht). |
system | string / array | Systemanweisung (optional). |
stream | boolean | true, um die Antwort schrittweise per Server-Sent Events zu erhalten. |
Beispiel-Request
curl https://ai.geraikita.com/v1/messages \
-H "x-api-key: gk-xxxxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hallo!"}]
}'Musst du Tokens vor dem Senden zählen? POST https://ai.geraikita.com/v1/messages/count_tokens akzeptiert denselben Body und wird nicht abgerechnet.
Modellliste
https://ai.geraikita.com/v1/modelsGibt die Liste der Modell-IDs zurück, die du im Feld model senden kannst. Mit einem per Allowlist beschränkten Key werden nur die erlaubten Modelle angezeigt. Mit dem Header x-api-key oder anthropic-version folgt die Response dem Anthropic-Format.
curl https://ai.geraikita.com/v1/models \
-H "Authorization: Bearer gk-xxxxxxxx"Streaming (SSE)
Mit "stream": true wird die Antwort als text/event-stream gesendet. Der Server sendet sofort die Header und danach alle 10 Sekunden eine Keepalive-Kommentarzeile : ka, solange er wartet, damit die Verbindung nicht als tot gilt. Stelle den Gesamt-Timeout deiner App auf mindestens 300 Sekunden.
data: {"choices":[{"index":0,"delta":{"content":"Ha"}}]}
: ka
data: {"choices":[{"index":0,"delta":{"content":"lo!"}}]}
data: [DONE]- OpenAI-Format: Jeder Chunk ist eine
data:-Zeile mit JSON, daschoices[].deltaenthält, abgeschlossen mitdata: [DONE]. - Anthropic-Format: Events
message_start,content_block_delta, …,message_stopwie bei der Anthropic-API. - Ignoriere Zeilen, die mit einem Doppelpunkt (
:) beginnen — das sind Keepalives, keine Daten. Anleitungen pro Tool findest du unter Agentic-Tool-Einstellungen.