Placez Sluis devant vos appels de modèles.
Sluis est un proxy compatible OpenAI. Changez une seule ligne, votre base_url, et chaque requête se met à passer par votre politique de résidence avant d'entrer dans le registre infalsifiable. Aucun SDK à apprendre, aucun payload à réécrire. Cinq étapes ci-dessous ; la référence complète se trouve dans la barre latérale.
Premier appel scellé : ~2 minutes. Si votre code parle déjà à OpenAI, vous gardez votre client, vos modèles et votre format de messages tels quels.
Obtenir une clé
Créez une clé dans la Console, section API keys. Chaque clé porte une politique de résidence et un budget : vous pouvez réserver eu-only à tout ce qui est personnel et eu-uk-us à la rédaction courante sans changer une ligne de code.
# keep it in your environment, never in source export SLUIS_KEY="sk_live_a91c…"
Pointer base_url vers Sluis
Changez l'hôte. Tout le reste (modèles, streaming, outils, function calling) fonctionne à l'identique, car Sluis expose la même surface d'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": [...] }'
Envoyer une requête
Appelez exactement comme vous appelleriez le fournisseur. Sluis inspecte la requête, la route selon votre politique, la scelle dans la chaîne d'audit et renvoie la réponse du modèle inchangée. Les appels à un alias sluis/* divulguent la route concrète via des en-têtes de réponse 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" }
Définir la résidence
La résidence est une politique d'organisation, définie dans la Console (Politiques → Résidence) et appliquée à l'envoi sur chaque requête. Le défaut n'autorise que la juridiction UE : une requête qui atteindrait un fournisseur hors de l'ensemble autorisé est refusée avec 451 avant qu'un seul octet ne parte, qu'il s'agisse de PHI dans un flux soumis à HIPAA ou de données sensibles au titre du RGPD.
# 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]"
Élargir où vos données peuvent aller est toujours une décision explicite et consignée : la Console exige la reconnaissance des conditions de transfert avant de débloquer des fournisseurs américains ou chinois, et le changement est inscrit dans le journal d'audit.
Vous souhaitez garder les données personnelles entièrement hors du modèle, pour utiliser n'importe quel modèle sans laisser fuir le moindre nom, numéro ou secret ? Activez Politiques → Protection des données : Sluis remplace les PII et les secrets détectés par des tokens typés stables (ex. «EMAIL_1»), ne transmet que les tokens au fournisseur et restaure les valeurs d'origine dans la réponse. La correspondance n'est jamais persistée. C'est ce qui permet d'appeler n'importe quel modèle tiers en toute sécurité. La bibliothèque de détecteurs complète et la détection des noms sont présentées dans la Référence protection des données ci-dessous.
Vérifier le sceau
Chaque appel ajoute une entrée à la chaîne de hachage. Récupérez la chaîne et revérifiez-la hors ligne, le hash de chaque entrée est sha256(prev_hash + record) : tout champ modifié casse tous les maillons suivants.
curl https://api.sluis.ai/v1/audit/export?from=genesis \ -H "Authorization: Bearer $SLUIS_KEY" | sluis verify - # → 18,442 entries · chain intact · head #4f9c2a ✓