API-Referenz
Die OpenAI-kompatible Data Plane.
Interaktive OpenAPI-Referenz
Die folgenden Operationen werden aus der maßgeblichen OpenAPI-Spezifikation generiert. Mit Test Request können Sie eine echte Anfrage erstellen und senden sowie alle Felder, Antworten und Fehlerschemas einsehen.
Der Test eines authentifizierten Endpunkts sendet eine echte Anfrage und kann Guthaben verbrauchen.
Chat-Completion erstellen
post/v1/chat/completionsResponse erstellen
post/v1/responsesEmbeddings erstellen
post/v1/embeddingsAudio transkribieren
post/v1/audio/transcriptionsSprache erzeugen
post/v1/audio/speechModelle auflisten
get/v1/modelsService-Status prüfen
get/healthzKonventionen
- Modell-IDs haben die Form
provider/model, z. B.mistral/mistral-medium-3.5. - Geld ist eine ganzzahlige Mikro-EUR-Größe (1 EUR = 1.000.000 µEUR), angegeben pro Million Tokens.
- Anfrage-Bodies sind auf 2 MiB begrenzt.
Anleitungen und Beispiele
Chat-Completion
const res = await client.chat.completions.create({
model: "mistral/mistral-medium-3.5",
messages: [{ role: "user", content: "Hallo!" }],
});res = client.chat.completions.create(
model="mistral/mistral-medium-3.5",
messages=[{"role": "user", "content": "Hallo!"}],
)curl https://api.kontinent.ai/v1/chat/completions \
-H "Authorization: Bearer $KONTINENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"mistral/mistral-medium-3.5",
"messages":[{"role":"user","content":"Hallo!"}]}'Streaming funktioniert genauso mit "stream": true. Siehe Streaming.
Tool Calling funktioniert bei jedem Chat-Modell, dessen supported_parameters tools enthalten, im Stream wie ohne. Ein Modell ohne diese Fähigkeit liefert 400 tools_not_supported. Schicken Sie tools (Function Tools) mit optionalem tool_choice und parallel_tool_calls, und das Modell antwortet mit message.tool_calls (im Stream delta.tool_calls) und finish_reason: "tool_calls". Für die nächste Runde schicken Sie den Assistenten-Zug mit seinen tool_calls zurück, danach je Aufruf eine Nachricht {"role": "tool", "tool_call_id": "...", "content": "..."}; bei einem Reasoning-Modell zusätzlich die reasoning_details dieses Zuges.
Eine Tool-Definition reist vollständig, samt strict und dem JSON-Schema in parameters. Auf den Wegen, die den Request neu bauen, wird nichts davon stillschweigend verworfen: jedes Modell auf Bedrock, Claude auf Vertex sowie /v1/responses. Dort wird die Anfrage mit einem 400 abgelehnt, das das Feld benennt, wo ein Upstream einen Wert nicht ausdrücken kann: tool_choice: "none" und parallel_tool_calls: false bei jedem Modell, das Bedrock bedient, das Erzwingen eines Tools ("required" oder eine benannte Funktion) zusammen mit reasoning auf beiden Claude-Wegen und gehostete Tools wie Websuche oder MCP, denn dieses Gateway führt keine eigenen Tools aus. Bei den übrigen Anbietern geht die Anfrage stattdessen unverändert durch; ein Tool, das der Anbieter ablehnt, kommt daher als dessen eigener Fehler zurück. Die Form der Deltas steht unter Streaming.
JSON-Modus. response_format (etwa {"type": "json_object"} oder ein json_schema) wird an OpenAI-kompatible Anbieter unverändert weitergegeben und funktioniert dort, wo der Anbieter es unterstützt. Bei jedem Modell, das Bedrock bedient (Claude, Nova, GPT-OSS, Qwen und weitere), und bei Claude über Vertex wird es derzeit ignoriert: Die Anfrage gelingt, die Antwort ist aber nicht sicher JSON. Für strukturierte Ausgabe nutzen Sie dort ein Tool mit JSON-Schema in parameters und lesen die Argumente des Tool-Aufrufs.
Reasoning-Modelle nehmen ein reasoning-Objekt und antworten mit message.reasoning und/oder message.reasoning_details. Garantiert ist keines der beiden Felder: reasoning.exclude: true entfernt beide, und Denken, das ein Anbieter nur verschlüsselt herausgibt, kommt als reasoning_details-Eintrag ohne message.reasoning, weil es keinen Klartext gibt. Behandeln Sie beide als optional. Siehe Reasoning.
Responses
Dieselben Modelle in OpenAIs Responses-Form. input nimmt einen String oder eine Liste von Input-Items, max_output_tokens ersetzt max_tokens, und die Antwort ist ein response-Objekt, dessen output-Array reasoning- und message-Items enthält.
curl https://api.kontinent.ai/v1/responses \
-H "Authorization: Bearer $KONTINENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"bedrock/claude-sonnet-5","input":"Hallo!",
"reasoning":{"effort":"high"}}'Mit "stream": true kommen benannte Events, jedes mit monoton steigender sequence_number: response.created, response.output_item.added, response.reasoning_text.delta, response.reasoning_text.done, response.content_part.added, response.output_text.delta, response.output_text.done, response.content_part.done, response.function_call_arguments.delta, response.function_call_arguments.done, response.output_item.done, response.completed oder response.failed, wenn eine Generierung nach dem ersten Byte abbricht. Item- und Content-Part-Events kommen paarweise (added/done), ein Client kann also schliessen, was er geöffnet hat.
Tools funktionieren auch hier, in der flachen Responses-Form: tools: [{"type": "function", "name": "...", "parameters": {...}}], dazu tool_choice und parallel_tool_calls. Ein Aufruf kommt als Output-Item vom Typ function_call zurück (call_id, name, arguments); die Runde geht weiter, indem Sie ihn in input als function_call-Item wiederholen, gefolgt von einem function_call_output-Item mit derselben call_id. Bei einem Reasoning-Modell wiederholen Sie zusätzlich das reasoning-Output-Item, das vor dem Aufruf stand, samt reasoning_details: Claude prüft sein eigenes Denken und lehnt eine Tool-Runde ab, die ohne es zurückkommt. Abgelehnt wird genau das, was auch Chat-Completions ablehnen, mit demselben Feldnamen.
Eingabe-Items tragen nur Text: Ein Bild- oder Datei-Inhalt liefert 400. Felder, die dieser Endpunkt nicht übersetzt, etwa text.format, werden ignoriert statt abgelehnt. Verlassen Sie sich für strukturierte Ausgabe also nicht darauf.
Dieser Endpunkt ist zustandslos. store: true und previous_response_id werden mit 400 abgelehnt. Kontinent speichert keine Prompts und keine Antworten, eine gespeicherte Response könnte also nie gelesen werden. Schicken Sie die vorherigen Züge stattdessen in input.
Embeddings
curl https://api.kontinent.ai/v1/embeddings \
-H "Authorization: Bearer $KONTINENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"mistral/mistral-embed","input":"Hallo!"}'Weitere OpenAI-Felder wie encoding_format und dimensions gehen unverändert an den Anbieter; ob sie wirken, hängt vom Modell ab. stream: true liefert 400, weil Embeddings keine schrittweise Form haben. Ein Chat-Modell hier zu senden (oder ein Embedding-Modell an den Chat-Endpunkt) wird abgelehnt.
Audio
Sprache zu Text und Text zu Sprache nutzen die OpenAI-Audioformen. Schicken Sie ein Transkriptionsmodell an den ersten Endpunkt und ein Sprachmodell an den zweiten; die falsche Modellart wird abgelehnt.
Die Transkription nimmt multipart/form-data mit file und model (beide Pflicht) sowie optional language, prompt, temperature, response_format und user. Die Datei darf bis zu 25 MB groß sein (die gesamte Anfrage bis zu 26 MB). response_format ist json (Standard) oder text; jeder andere Wert ergibt 400, ebenso stream=true. Der Dateiname wird nie an den Anbieter weitergegeben, nur eine unbedenkliche Dateiendung. Der gesamte Upload muss innerhalb von 5 Minuten abgeschlossen sein; ein langsamerer Upload wird abgebrochen und ergibt 400. Ist diese Gateway-Instanz bereits mit 4 Transkriptionen beschäftigt und wird binnen 10 Sekunden kein Platz frei, erhalten Sie 503 transcriptions_busy mit dem Header Retry-After: 10: Versuchen Sie es nach dieser Anzahl Sekunden erneut.
curl https://api.kontinent.ai/v1/audio/transcriptions \
-H "Authorization: Bearer $KONTINENT_API_KEY" \
-F model=scaleway/whisper-large-v3 \
-F file=@gespraech.m4a \
-F language=deDie Sprachausgabe nimmt JSON mit model, input (bis zu 4096 Zeichen) und voice (alle Pflicht) sowie optional response_format (mp3 Standard, wav, opus, aac, flac, pcm) und user. stream wird nicht unterstützt und ergibt 400. Der Antwort-Body ist die Audiodatei selbst.
curl https://api.kontinent.ai/v1/audio/speech \
-H "Authorization: Bearer $KONTINENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"mistral/voxtral-tts","input":"Guten Tag","voice":"en_paul_neutral"}' \
--output antwort.mp3- Abrechnung. Die Transkription wird je angefangener Sekunde Audio abgerechnet, vom Gateway gemessen, mindestens eine Sekunde. Die Sprachausgabe wird je Zeichen von
inputabgerechnet, gezählt als Unicode-Zeichen, nicht als Bytes. Die Preise stehen in/v1/modelsalsaudio_micro_eur_per_hourundcharacter_micro_eur_per_million; ein Feld fehlt, wenn es null ist. - Fallback. Die Transkription weicht wie Chat entlang der Fallback-Kette des Modells aus. Die Sprachausgabe wechselt nie von selbst auf ein anderes Modell, denn ein anderes Modell spricht mit einer anderen Stimme. Routing-Richtlinien, die Sie selbst anlegen, funktionieren weiterhin.
- Stimmen.
voicemuss eine der Stimmen sein, die der Katalog für das Modell führt. Jeder andere Wert wird mit400abgelehnt, bevor der Anbieter angefragt wird, und die Fehlermeldung nennt die gültigen Stimmen.mistral/voxtral-ttsbietet derzeit nur englische Stimmen. Für Deutsch nutzen Sieovh/nvr-tts-de-demit der StimmeGerman-DE-Male-1, seiner einzigen Stimme. Dieses Modell nimmt höchstens 1000 Zeichen an und liefert nurwav(16 kHz, mono): Senden Sieresponse_formatwavoder lassen Sie das Feld weg, dann kommtwavstattmp3zurück. - Guardrails. Inhalts-Guardrails (der Prompt-Injection-Scan) prüfen kein Audio. Anbieter-Sperren und Zero-Data-Retention-Regeln gelten weiterhin.
Modelle auflisten
const models = await client.models.list();models = client.models.list()curl https://api.kontinent.ai/v1/models \
-H "Authorization: Bearer $KONTINENT_API_KEY"Liefert alle aktiven Modelle, für jeden Schlüssel dieselbe Liste, jeweils mit kind, context_length (sofern bekannt), sovereignty, pricing und, bei denkenden Modellen, einem reasoning-Objekt (supported_efforts, default_effort, supports_max_tokens, mandatory). Siehe Modelle & Souveränität.
Health
curl https://api.kontinent.ai/healthzNicht authentifizierte Liveness-Probe. Nutzen Sie sie für Uptime-Monitoring, nicht für die Verfügbarkeit einzelner Modelle.
Verwandte Seiten
Limits & Konventionen Fehler behandeln…