Documentazione

Riferimento API

L'autenticazione, la superficie di endpoint compatibile OpenAI, lo streaming, il reasoning e la tassonomia degli errori.

Autenticazione

Ogni richiesta a /v1/* si autentica con una chiave virtuale nell'header Authorization: Bearer. Genera le chiavi nella Console; il segreto viene mostrato una sola volta e ne viene memorizzato solo l'hash. Una chiave porta i propri rate limit, budget, tag e una lista opzionale di modelli consentiti (vuota = qualsiasi modello).

Una richiesta il cui modello non è nella lista di consentiti non vuota della chiave viene rifiutata con un 403 permission_error sigillato prima che venga inoltrato alcunché; il rifiuto stesso finisce nella catena di audit.

Generare una chiave di produzione richiede un indirizzo email verificato.

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

Endpoint

Sluis espone la superficie compatibile OpenAI qui sotto. Gli endpoint senza un handler di prima classe vengono inoltrati alla lettera al provider instradato, streaming incluso, così gli upstream compatibili OpenAI mantengono piena fedeltà.

EndpointScopo
POST /v1/chat/completionsChat completions, la superficie principale: instradamento, protezione dei dati, caching, streaming.
POST /v1/completionsText completions legacy.
POST /v1/embeddingsEmbeddings; alimenta anche la cache semantica.
POST /v1/moderationsClassificazione di moderazione.
POST /v1/responsesL'API Responses di OpenAI.
GET /v1/modelsI modelli che la tua policy e le tue credenziali possono davvero raggiungere, niente di ipotetico.
GET /v1/models/{id}I metadati di un modello.
POST /v1/audio/*Trascrizione, traduzione, voce · inoltrato al provider instradato.
POST /v1/images/*Generazione e modifica di immagini · inoltrato.
POST /v1/video/generationsGenerazione di video · inoltrato.
/v1/filesOperazioni sui file · inoltrato.

Streaming

Imposta stream: true e la risposta arriva come server-sent events: ogni frame è un delta chat.completion.chunk e lo stream termina con data: [DONE]. Gli stream non vengono mai bufferizzati nel gateway: lo attraversano in tee, e il sigillo di audit e la misurazione avvengono anche se il client si disconnette in anticipo.

Richiedi stream_options.include_usage e il frame finale porta l'uso esatto dei token, gli stessi numeri che il gateway misura e fattura.

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

Ragionamento

Passa il parametro OpenAI reasoning_effort (minimal | low | medium | high) su qualsiasi modello capace di ragionamento. Sluis lo traduce per provider (il thinking level di Gemini, l'adaptive thinking effort di Claude) e lo omette dove un modello lo rifiuterebbe, così un solo parametro funziona su tutto il catalogo.

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
)

Codici di errore

Gli errori usano l'envelope di errore di OpenAI; il valore error.type rispecchia lo stato HTTP, così la gestione degli errori del tuo SDK continua a funzionare invariata.

CodiceQuando
400 invalid_request_errorCorpo della richiesta o parametri malformati.
400 invalid_request_errorId del modello senza prefisso del provider. Ogni id richiamabile è provider/model, ad es. mistral/mistral-large-latest; il body riporta: model must be provider-prefixed.
401 authentication_errorChiave API mancante o sconosciuta.
402 insufficient_quotaQuota gratuita esaurita o budget raggiunto. Attiva un piano o alza il budget; la richiesta non raggiunge mai un provider.
403 permission_errorLa chiave non ha il permesso, ad esempio il modello non è nella sua lista di consentiti.
422 invalid_request_errorRifiutata prima dell'inoltro, ad esempio la protezione dei dati in modalità block ha trovato corrispondenza nella richiesta.
429 rate_limit_errorRate limit raggiunto. Applicato al gateway; la richiesta non raggiunge mai un provider.
451 permission_errorBloccata dalla policy di residenza: nessuna giurisdizione consentita serve la richiesta. Il body include il motivo.
5xx api_errorErrore del provider upstream dopo i retry; il circuit breaker devia il traffico attorno ai provider non integri.