API REST simple, traitée en UE (sans IA tierce), conforme RGPD. Détectez et masquez automatiquement les données personnelles dans n'importe quel document — PDF, Word, scan, ou texte brut.
Conçue pour les apps qui touchent à des documents sensibles avant traitement par un LLM.
Détection, OCR et LLM tournent sur nos serveurs en Europe. Aucun envoi vers OpenAI, Google ou Anthropic.
PDF (natif ou scanné via OCR), Word (.docx, .doc), texte brut, Markdown. Taille max 20 Mo.
Recevez un mapping JSON. Restaurez les vrais noms dans la réponse de l'IA en un POST.
Détection auto FR/EN/DE/ES/IT. Patterns spécifiques : NSS, SSN, Steuer-ID, DNI, Codice Fiscale…
~15s pour un PDF de 33 pages scannées. Endpoint synchrone ou async selon la taille.
Aucune persistance des données originales. Logs minimaux. Audit log dispo en Enterprise.
Connectez-vous, copiez votre clé, lancez votre première requête.
Créez un compte gratuit sur safe-doc.ai, puis allez dans l'onglet 🔑 API pour générer votre clé personnelle (`sd_xxxxx`).
Exemple d'appel à l'endpoint POST /api_v2/anonymize-text :
curl -X POST https://safe-doc.ai/api_v2/anonymize-text \ -H "Authorization: Bearer sd_VOTRE_CLE" \ -F "text=Jean Dupont habite 12 rue de la Paix, 75002 Paris. Email: jean@example.fr" \ -F "level=N1"
import requests response = requests.post( "https://safe-doc.ai/api_v2/anonymize-text", headers={"Authorization": "Bearer sd_VOTRE_CLE"}, data={ "text": "Jean Dupont habite 12 rue de la Paix, 75002 Paris.", "level": "N1", }, ) data = response.json() print(data["anonymized_text"]) # → "[PERSONNE_1] habite [ADRESSE_1]."
const formData = new FormData(); formData.append('text', 'Jean Dupont habite 12 rue de la Paix, 75002 Paris.'); formData.append('level', 'N1'); const res = await fetch('https://safe-doc.ai/api_v2/anonymize-text', { method: 'POST', headers: { 'Authorization': 'Bearer sd_VOTRE_CLE' }, body: formData, }); const data = await res.json(); console.log(data.anonymized_text); // → "[PERSONNE_1] habite [ADRESSE_1]."
{
"session_id": "a3f8c1d2e9b40516...",
"anonymized_text": "[PERSONNE_1] habite [ADRESSE_1].",
"mapping": {
"Jean Dupont": "[PERSONNE_1]",
"12 rue de la Paix, 75002 Paris": "[ADRESSE_1]"
},
"reverse_mapping": {
"[PERSONNE_1]": "Jean Dupont",
"[ADRESSE_1]": "12 rue de la Paix, 75002 Paris"
},
"stats": {
"total_entities": 2,
"by_label": { "PERSONNE": 1, "ADRESSE": 1 }
},
"detected_lang": "fr"
}
Une fois ChatGPT, Claude ou Mistral a répondu, faites un GET /api_v2/session/{session_id}/mapping pour récupérer le mapping et remplacer les tokens.
La doc complète est dans Swagger ou ReDoc.
/api_v2/anonymize-text
/api_v2/upload
/api_v2/session/{id}/mapping
/api_v2/re-anonymize
/api_v2/session/{id}/report
/api_v2/session/{id}/pdf
Au-delà de l'API : SafeDoc se branche directement dans vos outils.
Serveur MCP officiel, zéro dépendance (Python 3.8+). Claude Desktop / Claude Code
anonymisent vos textes avant de raisonner dessus, et la ré-identification se
fait localement (l'outil restore_text ne fait aucun appel
réseau).
⬇ Télécharger safedoc_mcp.py
claude mcp add safedoc \
-e SAFEDOC_API_KEY=sd_votre_cle \
-- python3 safedoc_mcp.py
Sélectionnez un texte sur n'importe quelle page → clic droit →
« Anonymiser avec SafeDoc » → résultat copié, prêt à coller dans ChatGPT, Claude ou
Gemini. Popup inclus pour le collage manuel.
⬇ Télécharger l'extension
chrome://extensions → mode développeur → « Charger l'extension non empaquetée ». Publication Web Store en cours.
Tout ce qu'il faut savoir avant d'intégrer dans un produit B2B sérieux.
Serveurs Hetzner (Allemagne / Finlande). Aucune donnée transitant en dehors de l'UE.
Documents originaux supprimés dès traitement. Logs minimaux (timestamp + comptage).
Trace immutable de qui a anonymisé quoi, quand, depuis quelle IP. Disponible sur demande.
Révoquez et régénérez votre clé à tout moment depuis votre profil.
Plan gratuit 5 docs/mois, sans carte. Upgrade quand vous êtes prêt.