Metti Sluis davanti alle tue chiamate ai modelli.
Sluis è un proxy compatibile OpenAI. Cambia una sola riga, la tua base_url, e ogni richiesta inizia a passare per la tua policy di residenza ed entra nel registro a prova di manomissione. Nessun SDK da imparare, nessun payload da riscrivere. Cinque passaggi qui sotto; il riferimento completo è nella barra laterale.
Tempo alla prima chiamata sigillata: ~2 minuti. Se il tuo codice parla già con OpenAI, tieni il tuo client, i tuoi modelli e il tuo formato dei messaggi esattamente come sono.
Ottieni una chiave
Crea una chiave nella Console, sezione API keys. Ogni chiave porta una policy di residenza e un budget, così puoi riservare eu-only a tutto ciò che è personale e eu-uk-us alle bozze generiche senza cambiare una riga di codice.
# keep it in your environment, never in source export SLUIS_KEY="sk_live_a91c…"
Punta base_url su Sluis
Cambia l'host. Tutto il resto (modelli, streaming, tool, function calling) funziona invariato, perché Sluis fa da proxy alla stessa superficie API.
from openai import OpenAI client = OpenAI( base_url="https://api.sluis.ai/v1", api_key=os.environ["SLUIS_KEY"], )
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.sluis.ai/v1", apiKey: process.env.SLUIS_KEY, });
// no SDK required — reqwest = { version = "0.12", features = ["json"] } let client = reqwest::Client::new(); let base = "https://api.sluis.ai/v1"; // ← the only change let key = std::env::var("SLUIS_KEY")?;
curl https://api.sluis.ai/v1/chat/completions \ -H "Authorization: Bearer $SLUIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mistral/mistral-large-latest", "messages": [...] }'
Invia una richiesta
Chiamalo esattamente come chiameresti il provider. Sluis ispeziona la richiesta, la instrada secondo la tua policy, la sigilla nella catena di audit e restituisce la risposta del modello invariata. Le chiamate a un alias sluis/* divulgano la rotta concreta negli header di risposta x-sluis.
# Anthropic Claude, served from Google's EU multi-region resp = client.chat.completions.create( model="vertex/claude-opus-4-8", messages=[{"role": "user", "content": "Summarise this chart…"}], ) print(resp.choices[0].message.content)
// Anthropic Claude, served from Google's EU multi-region const resp = await client.chat.completions.create({ model: "vertex/claude-opus-4-8", messages: [{ role: "user", content: "Summarise this chart…" }], }); console.log(resp.choices[0].message.content);
// Anthropic Claude, served from Google's EU multi-region let resp: serde_json::Value = client .post(format!("{base}/chat/completions")) .bearer_auth(&key) .json(&serde_json::json!({ "model": "vertex/claude-opus-4-8", "messages": [{ "role": "user", "content": "Summarise this chart…" }] })) .send().await? .json().await?; println!("{}", resp["choices"][0]["message"]["content"]);
# response headers on a sluis/* alias call { "x-sluis-route": "sluis/auto", "x-sluis-model": "vertex/claude-opus-4-8" }
Imposta la residenza
La residenza è policy dell'organizzazione, impostata nella Console (Policy → Residenza) e applicata al dispatch su ogni richiesta. Il default consente solo la giurisdizione UE: una richiesta che raggiungerebbe un provider fuori dall'insieme consentito viene rifiutata con 451 prima che parta un solo byte, che si tratti di PHI in un flusso regolato da HIPAA o di categorie particolari ai sensi del GDPR.
# default policy is EU-only — a US provider is refused at dispatch curl https://api.sluis.ai/v1/chat/completions \ -H "Authorization: Bearer $SLUIS_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.6", "messages": [...] }' # → 451 permission_error # "blocked by residency policy: provider jurisdiction US is not in the allowed set [EU]"
Estendere dove possono andare i dati è sempre una decisione esplicita e registrata: la Console richiede di riconoscere le condizioni di trasferimento prima di sbloccare provider statunitensi o cinesi, e la modifica finisce nel registro di audit.
Vuoi tenere i dati personali completamente fuori dal modello, così da usare qualsiasi modello senza far trapelare un solo nome, numero o segreto? Abilita Criteri → Protezione dei dati: Sluis sostituisce i PII e i segreti rilevati con token tipizzati stabili (es. «EMAIL_1»), invia solo i token al provider e ripristina i valori originali nella risposta. La corrispondenza non viene mai conservata. È questo a rendere sicuro chiamare qualsiasi modello di terze parti. La libreria completa dei rilevatori e la rilevazione dei nomi sono trattate nel riferimento Protezione dei dati qui sotto.
Verifica il sigillo
Ogni chiamata aggiunge una voce alla catena di hash. Scarica la catena e riverificala offline, l'hash di ogni voce è sha256(prev_hash + record), quindi qualsiasi campo alterato spezza tutti gli anelli successivi.
curl https://api.sluis.ai/v1/audit/export?from=genesis \ -H "Authorization: Bearer $SLUIS_KEY" | sluis verify - # → 18,442 entries · chain intact · head #4f9c2a ✓