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 alla produzione e eu-uk-us a una sandbox di ricerca 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 e restituisce la risposta del modello con due header in più che dicono dove ha girato e come è stata sigillata.
# 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"]);
{
"x-sluis-region": "eu multi-region",
"x-sluis-provider": "vertex · claude-opus-4-8",
"x-sluis-decision": "in-region",
"x-sluis-seal": "#4f9c2a",
"x-sluis-prev": "#e1b7d9"
}Imposta la residenza per richiesta
La policy della chiave è il default. Sovrascrivila per una singola chiamata con un header, utile quando un endpoint gestisce una classe di dati più rigorosa del resto della chiave.
resp = client.chat.completions.create(
model="mistral/mistral-large-latest",
messages=msgs,
extra_headers={"X-Sluis-Residency": "eu-only"},
)
# PHI in the prompt? Sluis routes EU-only and
# blocks with 451 if no EU provider is available.const resp = await client.chat.completions.create( { model: "mistral/mistral-large-latest", messages }, { headers: { "X-Sluis-Residency": "eu-only" } }, ); // PHI in the prompt? Sluis routes EU-only and // blocks with 451 if no EU provider is available.
let resp = client .post(format!("{base}/chat/completions")) .bearer_auth(&key) .header("X-Sluis-Residency", "eu-only") .json(&body) .send().await?; // PHI in the prompt? Sluis routes EU-only and // blocks with 451 if no EU provider is available.
L'header può solo rendere una richiesta più rigorosa della policy della chiave, mai più permissiva. Una richiesta non può mai ampliare la propria residenza. Per estendere dove possono andare i dati (ad esempio autorizzare provider statunitensi o cinesi) modifica la policy di base nella Console.
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 un modello statunitense o cinese. 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 ✓