Documentation

Référence API

L'authentification, la surface d'endpoints compatible OpenAI, le streaming, le raisonnement et la taxonomie d'erreurs.

Authentification

Chaque requête vers /v1/* s'authentifie avec une clé virtuelle dans l'en-tête Authorization: Bearer. Générez des clés dans la Console ; le secret n'est affiché qu'une seule fois et seul son hash est stocké. Une clé porte ses propres limites de débit, son budget, ses tags et une liste d'autorisation de modèles facultative (vide = tout modèle).

Une requête dont le modèle ne figure pas sur la liste d'autorisation non vide de la clé est refusée avec un 403 permission_error scellé avant tout envoi ; le refus lui-même est inscrit dans la chaîne d'audit.

La création d'une clé de production requiert une adresse e-mail vérifiée.

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

Endpoints

Sluis expose la surface compatible OpenAI ci-dessous. Les endpoints sans gestionnaire de premier niveau sont relayés tels quels vers le fournisseur routé, streaming compris, afin que les upstreams compatibles OpenAI conservent une fidélité totale.

EndpointRôle
POST /v1/chat/completionsChat completions, la surface principale : routage, protection des données, mise en cache, streaming.
POST /v1/completionsText completions historiques.
POST /v1/embeddingsEmbeddings ; alimente aussi le cache sémantique.
POST /v1/moderationsClassification de modération.
POST /v1/responsesL'API OpenAI Responses.
GET /v1/modelsLes modèles que votre politique et vos identifiants peuvent réellement atteindre, rien d'hypothétique.
GET /v1/models/{id}Les métadonnées d'un modèle.
POST /v1/audio/*Transcription, traduction, synthèse vocale · relayé vers le fournisseur routé.
POST /v1/images/*Génération et retouche d'images · relayé.
POST /v1/video/generationsGénération de vidéo · relayé.
/v1/filesOpérations sur fichiers · relayé.

Streaming

Définissez stream: true et la réponse arrive sous forme de server-sent events : chaque frame est un delta chat.completion.chunk et le flux se termine par data: [DONE]. Les flux ne sont jamais mis en tampon dans la passerelle : ils la traversent en dérivation, et le sceau d'audit ainsi que le comptage se produisent même si le client raccroche tôt.

Demandez stream_options.include_usage et le frame final porte l'usage exact en tokens, les mêmes chiffres que la passerelle compte et facture.

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="")

Raisonnement

Passez le paramètre OpenAI reasoning_effort (minimal | low | medium | high) sur n'importe quel modèle capable de raisonnement. Sluis le traduit selon le fournisseur (le niveau de réflexion de Gemini, l'effort de réflexion adaptatif de Claude) et l'omet là où un modèle le rejetterait, de sorte qu'un seul paramètre fonctionne sur tout le catalogue.

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
)

Codes d'erreur

Les erreurs utilisent l'enveloppe d'erreur OpenAI ; la valeur error.type reflète le statut HTTP, si bien que la gestion d'erreurs de votre SDK continue de fonctionner sans changement.

CodeQuand
400 invalid_request_errorCorps de requête ou paramètres mal formés.
400 invalid_request_errorIdentifiant de modèle sans préfixe de fournisseur. Chaque identifiant appelable est provider/model, p. ex. mistral/mistral-large-latest ; le corps indique : model must be provider-prefixed.
401 authentication_errorClé API manquante ou inconnue.
402 insufficient_quotaAllocation gratuite épuisée ou budget atteint. Activez un forfait ou relevez le budget ; la requête n'atteint jamais un fournisseur.
403 permission_errorLa clé n'a pas la permission, par exemple le modèle ne figure pas sur sa liste d'autorisation.
422 invalid_request_errorRefusée avant l'envoi, par exemple la protection des données en mode block a détecté la requête.
429 rate_limit_errorLimite de débit atteinte. Appliquée à la passerelle ; la requête n'atteint jamais un fournisseur.
451 permission_errorBloquée par la politique de résidence : aucune juridiction autorisée ne sert la requête. Le corps inclut le motif.
5xx api_errorDéfaillance du fournisseur en amont après plusieurs tentatives ; le disjoncteur détourne le trafic des fournisseurs défaillants.