BETANous travaillons dur pour atteindre 99 % de précision. Quelques entités peuvent encore passer entre les mailles — relisez la mapping table avant de transmettre à un LLM.
100 % gratuit · zéro stockage · open API

Anonymisez n'importe quel document
avant de parler à une IA.

lexform reçoit votre PDF, extrait le texte en Markdown propre, remplace chaque entreprise, personne et email par des jetons neutres — puis vous rend une table de correspondance pour retrouver les vraies données après coup.

  • Aucun document stocké. Jamais.
  • Réversible. Vous seul pouvez désanonymiser.
  • Open API. POST /v1/anonymize
contrat-prestation.pdf → .mddocument reçu
CONTRAT DE PRESTATION

Entre Acme Corporation, représentée par Jane Dubois (jane@acme.com),
et Globex SA, il est convenu ce qui suit.

Acme Corporation s'engage à fournir à Globex SA un ensemble
de prestations pour un montant forfaitaire.

Initech Ltd interviendra en tant que sous-traitant de
Acme Corporation sur la partie infrastructure.
Mapping tableprivé · client-side only
  • COMPANY_1Acme Corporation
  • COMPANY_2Globex SA
  • COMPANY_3Initech Ltd
  • PERSON_1Jane Dubois
  • EMAIL_1jane@acme.com
aucune copie conservée p95 < 1.4s gratuit, sans clé
Comment ça marche

Quatre étapes. Zéro rétention.

01

Vous envoyez le document

PDF, DOCX, TXT, Markdown, HTML — peu importe. L'API accepte un upload multipart ou une URL signée. Le fichier est tenu en mémoire, jamais sur disque.

02

On extrait et anonymise

Extraction du texte en Markdown, détection des entités (entreprises, personnes, emails, IBAN, numéros). Chacune reçoit un jeton neutre : COMPANY_1, PERSON_2…

03

Vous recevez .md + mapping

Un Markdown propre et anonymisé, plus une table JSON qui associe chaque jeton à sa valeur d'origine. La table reste chez vous — on la renvoie, on ne la garde pas.

04

Parlez à l'IA en clair

Envoyez le Markdown anonymisé à OpenAI, Anthropic, un modèle local — aucun risque de fuite. Au retour, faites un remap local avec la table et retrouvez les vrais noms.

API

Un endpoint. C'est tout.

Pas de compte, pas de clé, pas de credit card. Rate-limit généreux, SDK Node et Python, source ouverte.

requête
curl -X POST https://lexform.zevra.tech/api/anonymize \
  -F "file=@contrat.pdf" \
  -F "kinds=COMPANY,PERSON,EMAIL,IBAN"
200 OKréponse
{
  "markdown": "# CONTRAT DE PRESTATION\n\nEntre COMPANY_1, représentée par PERSON_1 (EMAIL_1), et COMPANY_2…",
  "mapping": {
    "COMPANY_1": "Acme Corporation",
    "COMPANY_2": "Globex SA",
    "COMPANY_3": "Initech Ltd",
    "PERSON_1":  "Jane Dubois",
    "EMAIL_1":   "jane@acme.com"
  },
  "stats": { "pages": 3, "entities": 5, "ms": 812 }
}
Essayer maintenant

Déposez un document. On s'occupe du reste.

100 % local. Le fichier est traité en RAM puis effacé. Aucun LLM, aucun envoi externe.

Glissez un PDF, DOCX, TXT ou MD ici
ou
Max 30 Mo · regex + suffixes légaux · pas de clé
Intégrer

Branche-le sur ton app en 2 minutes.

Copie ce prompt et colle-le dans Claude Code, Cursor ou n'importe quel agent IA codeur. Il génèrera le wrapper, modifiera tes appels LLM existants, et ajoutera la couche de désanonymisation au retour.

prompt agent
Intègre lexform dans ce projet pour anonymiser tout document
ou texte avant envoi à un LLM (OpenAI, Anthropic, Mistral, etc.).

API
  POST https://lexform.zevra.tech/api/anonymize
  Content-Type: multipart/form-data
  Body: file=<binary>           (PDF, DOCX, TXT, MD, max 30 Mo)
        kinds=COMPANY,PERSON…   (optionnel)

  Réponse 200 OK :
  {
    "markdown":  "<contenu anonymisé>",
    "mapping":   { "COMPANY_1": "Acme SAS", "PERSON_1": "Jean Dupont", ... },
    "stats":     { "entities": N, "uniqueEntities": N, "ms": N, "nerActive": true }
  }

Tâches
  1. Crée un module `lib/lexform.ts` (ou équivalent dans le langage du
     projet) exposant deux fonctions :
       anonymize(input: File | Buffer | string) → { markdown, mapping }
       deanonymize(text: string, mapping: Record<string,string>) → string
  2. Identifie chaque appel sortant vers un LLM dans la codebase.
     Avant l'appel : remplace le payload utilisateur par sa version
     anonymisée. Après la réponse : applique deanonymize() au texte
     retourné par le LLM en utilisant la mapping table.
  3. Ne persiste JAMAIS la mapping table en base ou dans les logs.
     Garde-la en mémoire le temps de la requête, jette-la ensuite.
  4. Adapte le style de code à celui du projet (TS strict / async /
     gestion d'erreurs cohérente avec le reste).

Tests
  - Smoke test sur un document avec entités connues, vérifier que la
    réponse du LLM ré-injecte correctement les vraies valeurs après
    deanonymize.
  - Vérifier qu'aucune valeur originale n'apparaît dans les logs ni
    dans les payloads sortants vers le LLM.
Privacy · by design

On reçoit. On traite. On efface.

Aucun document n'est écrit sur disque. Aucune mapping table n'est loggée. Aucun apprentissage n'est fait sur votre contenu. Quand la réponse part, toute trace disparaît.

RAM-only processingHébergé en FranceGDPR-friendly
T+0msUpload reçu (RAM)
T+120msPDF → texte → Markdown
T+480msDétection d'entités
T+720msMasquage + mapping
T+812msRéponse envoyée
T+813msBuffer purgé · GC