API-Referenz
Authentifizierung, die OpenAI-kompatible Endpoint-Oberfläche, Streaming, Reasoning und die Fehler-Taxonomie.
Authentifizierung
Jede Anfrage an /v1/* authentifiziert sich mit einem virtuellen Key im Header Authorization: Bearer. Erzeugen Sie Keys in der Console; das Secret wird nur einmal angezeigt und nur sein Hash wird gespeichert. Ein Key trägt eigene Rate-Limits, ein Budget, Tags und eine optionale Modell-Allow-List (leer = jedes Modell).
Eine Anfrage, deren Modell nicht auf der nicht leeren Allow-List des Keys steht, wird mit einem versiegelten 403 permission_error abgewiesen, bevor irgendetwas versendet wird; die Abweisung selbst landet in der Audit-Kette.
Das Erzeugen eines Produktions-Keys erfordert eine verifizierte E-Mail-Adresse.
curl https://api.sluis.ai/v1/models \ -H "Authorization: Bearer $SLUIS_KEY" # a model outside the key's allow-list never dispatches: # → 403 permission_error · the refusal is sealed in the audit chain
Endpunkte
Sluis stellt die unten stehende OpenAI-kompatible Oberfläche bereit. Endpunkte ohne First-Class-Handler werden unverändert an den gerouteten Anbieter weitergereicht, Streaming inbegriffen, sodass OpenAI-kompatible Upstreams volle Fidelität behalten.
| Endpunkt | Zweck |
|---|---|
| POST /v1/chat/completions | Chat Completions, die primäre Oberfläche: Routing, Datenschutz, Caching, Streaming. |
| POST /v1/completions | Legacy-Text-Completions. |
| POST /v1/embeddings | Embeddings; speist auch den semantischen Cache. |
| POST /v1/moderations | Moderations-Klassifikation. |
| POST /v1/responses | Die OpenAI Responses API. |
| GET /v1/models | Die Modelle, die Ihre Policy und Ihre Zugangsdaten tatsächlich erreichen können, nichts Hypothetisches. |
| GET /v1/models/{id} | Die Metadaten eines Modells. |
| POST /v1/audio/* | Transkription, Übersetzung, Sprache · an den gerouteten Anbieter weitergereicht. |
| POST /v1/images/* | Bildgenerierung und -bearbeitung · weitergereicht. |
| POST /v1/video/generations | Videogenerierung · weitergereicht. |
| /v1/files | Dateioperationen · weitergereicht. |
Streaming
Setzen Sie stream: true und die Antwort kommt als Server-Sent Events: jedes Frame ist ein chat.completion.chunk-Delta, und der Stream endet mit data: [DONE]. Streams werden im Gateway nie gepuffert: sie werden durchgeschleust, und Audit-Siegel und Metering erfolgen selbst dann, wenn der Client früh auflegt.
Fordern Sie stream_options.include_usage an, und das letzte Frame trägt die exakte Token-Nutzung, dieselben Zahlen, die das Gateway zählt und abrechnet.
stream = client.chat.completions.create(
model="mistral/mistral-large-latest",
messages=[{"role": "user", "content": "Write a haiku"}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")const stream = await client.chat.completions.create({ model: "mistral/mistral-large-latest", messages: [{ role: "user", content: "Write a haiku" }], stream: true, stream_options: { include_usage: true }, }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); }
Reasoning
Übergeben Sie den OpenAI-Parameter reasoning_effort (minimal | low | medium | high) bei jedem reasoning-fähigen Modell. Sluis übersetzt ihn je Anbieter (Geminis Thinking-Level, Claudes adaptiver Thinking-Effort) und lässt ihn weg, wo ein Modell ihn ablehnen würde, sodass ein einziger Parameter über den gesamten Katalog funktioniert.
resp = client.chat.completions.create(
model="vertex/claude-opus-4-8",
messages=[{"role": "user", "content": "Prove it step by step…"}],
reasoning_effort="high", # minimal | low | medium | high
)Fehlercodes
Fehler verwenden das OpenAI-Fehler-Envelope; der Wert error.type spiegelt den HTTP-Status, sodass die Fehlerbehandlung Ihres SDK unverändert weiterarbeitet.
| Code | Wann |
|---|---|
| 400 invalid_request_error | Fehlerhafter Request-Body oder Parameter. |
| 400 invalid_request_error | Modell-ID ohne Provider-Präfix. Jede aufrufbare ID ist provider/model, z. B. mistral/mistral-large-latest; der Body meldet: model must be provider-prefixed. |
| 401 authentication_error | Fehlender oder unbekannter API-Key. |
| 402 insufficient_quota | Freikontingent aufgebraucht oder Budget erreicht. Aktivieren Sie einen Plan oder erhöhen Sie das Budget; die Anfrage erreicht nie einen Anbieter. |
| 403 permission_error | Dem Key fehlt die Berechtigung, etwa weil das Modell nicht auf seiner Allow-List steht. |
| 422 invalid_request_error | Vor dem Versand abgewiesen, etwa weil der Datenschutz im block-Modus die Anfrage erfasst hat. |
| 429 rate_limit_error | Rate-Limit erreicht. Am Gateway durchgesetzt; die Anfrage erreicht nie einen Anbieter. |
| 451 permission_error | Durch die Residency-Policy blockiert: keine erlaubte Jurisdiktion bedient die Anfrage. Der Body enthält den Grund. |
| 5xx api_error | Ausfall des Upstream-Anbieters nach Wiederholungsversuchen; der Circuit Breaker lenkt den Traffic an fehlerhaften Anbietern vorbei. |