API PII native v2
Détecter, protéger et restaurer les données personnelles dans du texte, des tableaux, du JSON, des transcriptions, des images, de l’audio et des documents avec un seul contrat.
Le même corps de requête fonctionne avec l’API hébergée, le bac à sable et une installation dans votre propre cluster. L’édition hors ligne sert l’API native v1 jusqu’à ce que son image inclue la v2. Les contrats Azure, AWS et Google restent disponibles comme API de compatibilité.
Les changements en 2.x sont uniquement des ajouts : nouveaux champs, paramètres, valeurs et routes. Un changement incompatible reçoit une nouvelle version majeure avec un nouveau préfixe de chemin. Nous l’annonçons 12 mois à l’avance, et la version majeure précédente reste servie pendant cette période.
Ignorez les champs et les valeurs de réponse que vous ne connaissez pas. Versions de l’API →
Fonctionnalités en bref
Chaque fonctionnalité a une explication d’une ligne et une requête minimale. Les sections ci-dessous donnent les détails.
export SHINRAI_API_KEY=shr_live_...Entrées
Texte Trouvez les données personnelles dans un texte. Chaque entité revient avec son type, sa position et sa confiance.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}'curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
# Once: create SigV4 credentials with your ShinrAI key
# curl -X POST https://aws.api.getshinrai.com/providers/aws/credentials -H "Authorization: Bearer $SHINRAI_API_KEY"
import boto3, os
client = boto3.client(
"comprehend",
region_name="eu-central-1",
endpoint_url="https://aws.api.getshinrai.com",
aws_access_key_id=os.environ["SHINRAI_AWS_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["SHINRAI_AWS_SECRET_ACCESS_KEY"],
)
print(client.detect_pii_entities(Text="Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00", LanguageCode="en"))Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:inspect' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"},"inspectConfig":{"includeQuote":true}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
Plusieurs textes Envoyez jusqu’à 256 textes dans une requête. Une requête conserve une seule table de remplacement pour tous ces textes.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"texts": ["Anna Weber called.", "Call Anna Weber back at +49 30 1234567."]}'Fichiers texte Envoyez un fichier texte tel quel et recevez le texte protégé.
curl -s "https://api.getshinrai.com/v2/protect?preset=label" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: text/plain" -H "Accept: text/plain" --data-binary @letter.txt# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna.weber@example.org"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna.weber@example.org"},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
Tableaux Protégez des lignes et des colonnes. Chaque entité indique sa ligne et sa colonne.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "table", "columns": [{"name": "name"}, {"name": "email"}], "rows": [["Anna Weber", "anna@example.org"]]}]}'JSON Protégez chaque chaîne d’une valeur JSON, par exemple un appel d’outil. Chaque entité porte un JSON Pointer vers sa chaîne.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "json", "value": {"customer": {"name": "Anna Weber", "email": "anna@example.org"}}}]}'Transcriptions Envoyez une transcription avec l’horodatage des mots. Chaque entité revient avec l’horodatage de ses mots.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "transcript", "forms": {"display": "Call Anna Weber"}, "atoms_form": "display", "time_unit": "ms",
"atoms": [{"text": "Call", "t0": 0, "t1": 300}, {"text": "Anna", "t0": 350, "t1": 600}, {"text": "Weber", "t0": 600, "t1": 950}]}]}'Pages Envoyez le texte d’une page avec les cadres de mots issus de votre propre OCR ou de la couche texte du PDF. Chaque entité revient avec ses cadres.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "page", "text": "Anna Weber", "box_unit": "px",
"atoms": [{"start": 0, "end": 4, "page": 1, "box": [10, 20, 40, 12]}, {"start": 5, "end": 10, "page": 1, "box": [54, 20, 50, 12]}]}]}'Images Trouvez les données personnelles dans une capture d’écran ou une numérisation. L’OCR lit 14 langues, et chaque entité revient avec des cadres en pixels.
curl -s "https://api.getshinrai.com/v2/detect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: image/png" --data-binary @screenshot.pngImages caviardées Recevez l’image caviardée, avec chaque entité remplie en noir.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: image/png" -H "Accept: image/png" --data-binary @screenshot.png -o redacted.png# Google returns the redacted image as redactedImage.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/image:redact' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"byteItem":{"type":"IMAGE_PNG","data":"'"$(base64 < screenshot.png | tr -d '\n')"'"}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
Audio Envoyez un enregistrement de 5 minutes maximum et recevez-le avec chaque donnée personnelle masquée par un bip.
curl -sS "https://api.getshinrai.com/v2/protect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" -H "Accept: audio/wav" --data-binary @call.mp3 -o call.redacted.wavTranscriptions audio Recevez la transcription d’un enregistrement et l’horodatage de chaque entité, sans l’audio.
curl -sS "https://api.getshinrai.com/v2/detect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" --data-binary @call.mp3Détection
Langue et modèle Indiquez la langue pour obtenir les meilleurs résultats, et fixez une version du modèle si vous avez besoin des mêmes résultats dans la durée.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber wohnt in Darmstadt.", "detection": {"language": "de", "model": "latest"}}'Types Incluez ou excluez des types par leurs noms ShinrAI ou par les noms de Google, AWS, Azure ou Presidio.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org, +49 30 1234567", "detection": {"types": {"include": ["EMAIL_ADDRESS", "PHONE_NUMBER"], "vocabulary": "google"}}}'Seuils de confiance Définissez un seuil de confiance pour tous les types, par type ou par langue.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, Darmstadt", "detection": {"thresholds": {"default": 0.5, "per_type": {"CITY": 0.8}}}}'Valeurs ignorées et vos propres valeurs Ne signalez jamais des valeurs comme le nom de votre entreprise, et trouvez vos propres valeurs avec un type.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Innovius support: case K-4711 for Anna Weber", "detection": {"exclude_values": {"values": ["Innovius"]},
"custom": {"user_values": [{"value": "K-4711", "type": "CUSTOMER_ID"}]}}}'Vos propres plages Protégez les plages trouvées par votre propre détecteur, seules ou avec la détection ShinrAI.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "text", "text": "Ticket for Anna Weber", "entities": [{"type": "PERSON", "span": {"start": 11, "end": 21}}]}],
"detection": {"mode": "provided"}}'Textes longs Choisissez comment le modèle lit un texte long : automatique, phrase par phrase ou d’un seul bloc.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber called. She lives in Darmstadt.", "detection": {"spans": {"segment": "sentence"}}}'Protection
Pseudonymisation Pseudonymisez et conservez la table de correspondance pour pouvoir restaurer une réponse plus tard.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber lives in Darmstadt.", "policy": {"preset": "pseudonymize"}, "output": {"include": ["entities", "mapping"]}}'# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber lives in Darmstadt."}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber lives in Darmstadt."},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
Étiquettes et masques Remplacez chaque valeur par une étiquette numérotée comme [PERSON_1], ou masquez-la avec un caractère.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org", "policy": {"preset": "label", "rules": [{"types": ["EMAIL"], "action": "mask", "mask": {"char": "*"}}]}}'# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna@example.org"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna@example.org"},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'Les API de compatibilité limitent ce que ShinrAI peut renvoyer. Pour une qualité complète, utilisez l’API PII native v2.
Valeurs partielles et généralisées Conservez le domaine de l’e-mail et les quatre derniers chiffres d’une carte, généralisez les noms et les lieux.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber aus Biberach, anna@example.org, Karte 4111 1111 1111 1111", "language": "de",
"policy": {"default": {"action": "generalize"}, "rules": [{"types": ["EMAIL", "CREDIT_CARD"], "action": "partial"}]}}'Règles par type Choisissez une action par type : remplacer par un texte fixe, supprimer ou conserver.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber from Darmstadt, +49 30 1234567, anna@example.org", "policy": {"preset": "pseudonymize",
"rules": [{"types": ["PHONE"], "action": "replace", "replace": {"value": "[phone]"}}, {"types": ["EMAIL"], "action": "remove"},
{"types": ["CITY"], "action": "keep"}]}}'Sorties
Annotations Recevez les années, montants, références juridiques et termes de biais sous forme d’annotations. Protect ne les modifie jamais.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "In 2019 Anna Weber paid 1,200 EUR.", "output": {"include": ["entities", "annotations"]}}'Risque de liaison Estimez la probabilité qu’un texte isole une personne. C’est une heuristique, pas un décompte.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "The 34-year-old head surgeon from Biberach joined in 2019.", "output": {"include": ["entities", "linkage_risk"]}}'Décalages, textes et statistiques Recevez les positions en UTF-16 ou UTF-8, les textes des entités, des statistiques et une liste d’entités plus courte.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org", "output": {"offset_unit": "utf16", "include_text": true, "include": ["entities", "stats"], "max_entities": {"per_input": 10}}}'Restauration et sessions
Restauration Restaurez un texte qui contient les substituts. Envoyez les entrées de mapping.delta comme paires d’original et de remplacement.
curl -s https://api.getshinrai.com/v2/restore -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}, "inputs": [{"id": "1", "text": "Julia Brandt replied."}]}'Tables de restauration Compilez une table de correspondance en table de restauration et restaurez dans votre propre code, par exemple dans une réponse de modèle diffusée en streaming.
curl -s https://api.getshinrai.com/v2/restore-tables -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}}'Un seul remplacement Recevez un remplacement pour une valeur et un type de votre choix.
curl -s https://api.getshinrai.com/v2/replacements -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"value": "Anna Weber", "type": "PERSON", "language": "de"}'Sessions Conservez une seule table sur de nombreuses requêtes avec une session (24 heures après sa création par défaut), puis exportez-la.
SESSION=$(curl -s -X POST https://api.getshinrai.com/v2/sessions -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"ttl_s": 3600}' | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber called.", "mapping": {"session": "'$SESSION'"}}'
curl -s https://api.getshinrai.com/v2/sessions/$SESSION/mapping -H "Authorization: Bearer $SHINRAI_API_KEY"Paires connues Transmettez les paires précédentes à une nouvelle requête, afin que les mêmes valeurs gardent les mêmes substituts.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber called again.", "mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}}'Jobs
Lots de textes Protégez jusqu’à 20 000 textes d’un fichier JSONL en arrière-plan, à moitié prix.
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/x-ndjson" --data-binary @rows.jsonl | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "text_batch", "inputs": [{"kind": "file", "source": {"upload": "'$UPLOAD'"}}]}'Documents Recevez un fichier PDF ou Word sous forme de PDF caviardé, avec son texte protégé.
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/pdf" --data-binary @contract.pdf | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "document", "inputs": [{"kind": "file", "source": {"upload": "'$UPLOAD'"}}]}'Enregistrements longs Masquez par des bips un enregistrement de 60 minutes maximum, en arrière-plan.
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" --data-binary @meeting.mp3 | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "audio", "inputs": [{"kind": "audio", "source": {"upload": "'$UPLOAD'"}, "language": "de"}]}'Niveaux, nouvelles tentatives et compte
Niveaux Choisissez temps réel pour les petites entrées à faible latence, ou lot à moitié prix.
curl -s "https://api.getshinrai.com/v2/detect?tier=realtime" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: text/plain" --data-binary 'Call Anna Weber at +49 30 1234567.'Nouvelles tentatives sûres Réessayez avec le même Idempotency-Key. Le service facture la requête une seule fois.
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Idempotency-Key: order-4711" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, order 4711"}'Capacités Ce que ce déploiement sert : modèles, langues, types d’entrée, niveaux autorisés par votre offre et limites.
curl -s https://api.getshinrai.com/v2/capabilities -H "Authorization: Bearer $SHINRAI_API_KEY"Liste des types Listez chaque type avec sa description et les noms de Google, AWS, Azure et Presidio.
curl -s https://api.getshinrai.com/v2/types -H "Authorization: Bearer $SHINRAI_API_KEY"Consommation Votre solde et les 30 derniers jours.
curl -s https://api.getshinrai.com/v2/usage -H "Authorization: Bearer $SHINRAI_API_KEY"OpenAPI Obtenez le document OpenAPI 3.1 complet de l’API v2.
curl -s https://api.getshinrai.com/v2/openapi.json -o shinrai-pii-api-v2.jsonCommencer par les capacités
Lisez les capacités une fois au démarrage. Elles listent les modèles, langues, types d’entrée, niveaux et limites de votre déploiement.
curl -s https://api.getshinrai.com/v2/capabilities -H "Authorization: Bearer $SHINRAI_API_KEY"
Envoyer tout type d’entrée
Un texte simple n’a pas besoin d’enveloppe. Pour un fichier texte, une image ou un enregistrement, envoyez le fichier lui-même comme corps de requête et placez les options dans la chaîne de requête.
| Entrée | Comment l’envoyer | Remarques |
|---|---|---|
| Texte | {"text": "..."} ou text/plain | Envoyer du JSON ou le fichier brut |
| Tableaux | "kind": "table" | Colonnes et lignes |
| JSON | "kind": "json" | Toutes les chaînes de la valeur |
| Transcriptions | "kind": "transcript" | Formes et atomes de mots horodatés |
| Pages | "kind": "page" | Texte et cadres de mots issus de votre propre OCR ou de la couche texte du PDF |
| Images | image/png, image/jpeg, image/bmp, image/tiff, image/webp | Jusqu’à 6 Mio : OCR, cadres en pixels par entité et image caviardée |
| Audio | audio/wav, audio/mpeg, audio/ogg, audio/flac, audio/mp4, audio/aac, audio/webm | Jusqu’à 5 minutes et 12 Mio : intervalles de temps par entité et enregistrement masqué par des bips |
| Documents | POST /v2/jobs | PDF et DOCX via un job : le PDF caviardé et le texte protégé |
Détecter, protéger et restaurer du texte
La plupart des intégrations commencent par du texte. Detect trouve les données personnelles. Protect renvoie le texte avec chaque entité remplacée. Restore remet les valeurs d’origine dans un texte ultérieur, par exemple une réponse du modèle.
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}'
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber lives in Darmstadt.", "policy": {"preset": "pseudonymize"}, "output": {"include": ["entities", "mapping"]}}'
curl -s https://api.getshinrai.com/v2/restore -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}, "inputs": [{"id": "1", "text": "Julia Brandt replied."}]}'
Qu’est-ce que le chiffrement sémantique ?
ShinrAI appelle chiffrement sémantique son remplacement réversible qui préserve le contexte. Cette pseudonymisation remplace les valeurs sensibles par des alternatives utiles ; votre application peut restaurer les originaux grâce à sa correspondance.
Protégez la correspondance comme une donnée sensible et excluez-la des prompts. Des remplacements réalistes ne signifient pas que chaque mot est chiffré cryptographiquement ni que le texte est automatiquement anonyme.
Langues et catégories de données · Historique des modèles · Comparer ShinrAI
Choisir le mode de protection
Un préréglage définit une politique pour tous les types. Les règles définissent une action par type.
| Paramètre | Valeurs |
|---|---|
| Préréglage | pseudonymize, mask, label, strict |
| Action par type | surrogate, label, mask, partial, generalize, replace, remove, keep |
- Pseudonymize écrit des substituts réalistes que vous pouvez restaurer.
- Partial conserve ce qui n’identifie pas : le domaine de l’e-mail, l’indicatif pays du téléphone, les quatre derniers chiffres d’une carte ou d’un compte, l’année d’une date.
- Generalize écrit une expression pour le type de nom, de lieu ou d’organisation, dans la langue de l’entrée.
- Partial et generalize sont irréversibles.
Contrôler la détection
- Définissez un seuil de confiance pour tous les types, par type ou par langue.
- Incluez ou excluez des types par leurs noms canoniques ou par les noms de Google, AWS, Azure ou Presidio.
- Excluez les valeurs qui ne doivent jamais être signalées, comme le nom de votre entreprise, ou ajoutez vos propres valeurs.
- Envoyez les plages de votre propre détecteur, seules ou avec la détection ShinrAI.
- Demandez des annotations : années, montants, références juridiques et termes de biais. Protect ne les modifie jamais.
- Demandez le risque de liaison : une estimation de la probabilité qu’une entrée isole une personne. C’est une heuristique, pas un décompte.
Restaurer et conserver une table
Demandez la table de correspondance lorsque vous devez restaurer une réponse plus tard. Elle contient les valeurs d’origine. Stockez-la comme donnée applicative sensible et gardez-la hors des prompts du modèle.
- Au sein d’une requête, une valeur garde un seul substitut.
- La requête suivante tire de nouveaux substituts : des requêtes répétées ne permettent donc pas de remonter des substituts aux originaux.
- Pour garder les mêmes substituts entre les requêtes, utilisez une session ou envoyez les paires précédentes comme correspondances connues.
- La cohérence à l’échelle du compte est disponible en option. Elle est plus faible : toute personne disposant de la clé peut alors constituer une table des originaux par répétition.
- Les autres clients obtiennent toujours des substituts différents.
- Les tables de restauration vous permettent de restaurer dans votre propre code, par exemple dans une réponse de modèle diffusée en streaming.
Une session conserve une table sur le serveur. Elle dure au plus 24 heures après sa création, ou jusqu’à 7 jours avec le réglage de sessions prolongées de votre compte. La table est stockée chiffrée et seule votre clé peut la lire.
Protéger captures d’écran et numérisations
- L’OCR lit toutes les langues servies par le modèle. Indiquez la langue pour les images en arabe, hébreu, japonais et coréen.
- Chaque entité revient avec des cadres en pixels, un par ligne de texte ou un par mot.
- Protect renvoie l’image avec les zones remplies.
- Le niveau temps réel accepte une image par requête, jusqu’à 4,2 mégapixels et 3 Mio.
Protéger l’audio
- Envoyez un enregistrement de 5 minutes et 12 Mio maximum comme corps d’une requête detect ou protect au niveau standard.
- Protect renvoie l’enregistrement en WAV avec chaque donnée personnelle masquée par un bip. Demandez un silence à la place de la tonalité, et élargissez les intervalles muets si nécessaire.
- Demandez du JSON pour recevoir la transcription protégée et l’horodatage de chaque entité au lieu de l’audio.
- Indiquez la langue : la reconnaissance vocale et la détection lisent alors la bonne langue.
- L’audio coûte les records de sa transcription, au moins 10 records par minute entamée.
- Une seule requête audio par compte s’exécute à la fois. Les enregistrements jusqu’à 60 minutes s’exécutent en job.
- Un mot que la reconnaissance vocale entend mal et que le modèle manque ensuite reste audible. Écoutez les enregistrements sensibles avant de les partager.
Exécuter les gros lots, les documents et les enregistrements en jobs
Utilisez un job lorsque le travail est trop volumineux pour une requête : de nombreux textes, un fichier PDF ou Word, ou un long enregistrement. Un job s’exécute en arrière-plan au poids du lot et conserve ses résultats pendant 24 heures.
- Téléversez un fichier JSONL avec une entrée par ligne, un fichier PDF ou DOCX, ou un enregistrement.
- Lancez le job avec l’ID du téléversement.
- Interrogez le job et téléchargez les artefacts.
{"custom_id": "row-1", "text": "Anna Schmidt, anna@example.com"}
{"custom_id": "row-2", "text": "Call +49 30 1234567", "language": "de"}
{"custom_id": "row-3", "input": {"kind": "table", "columns": [{"name": "email"}], "rows": [["max@example.org"]]}}
curl -s https://api.getshinrai.com/v2/uploads \
-H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/x-ndjson" \
--data-binary @rows.jsonl
curl -s https://api.getshinrai.com/v2/jobs \
-H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rows-2026-09-28" \
-d '{"kind": "text_batch",
"inputs": [{"kind": "file", "source": {"upload": "up_..."}}],
"output": {"artifacts": ["protected", "entities"]}}'
curl -s https://api.getshinrai.com/v2/jobs/$JOB -H "Authorization: Bearer $SHINRAI_API_KEY"
Un fichier téléversé est supprimé dès que le dernier job qui le lit se termine. Ajoutez ?keep=true au téléversement lorsque plusieurs jobs le lisent : il est alors conservé 24 heures, et chaque job qui le lit prolonge ce délai. La suppression d’un job supprime aussi un téléversement conservé dès qu’aucun autre job ne le lit. Supprimez un job pour effacer ses résultats avant la fin des 24 heures.
Un job de document renvoie le PDF caviardé, le texte protégé et les entités. Un job audio renvoie le WAV caviardé, la transcription protégée et les entités avec leur horodatage.
Limites
L’API hébergée applique ces limites. Les capacités renvoient les valeurs de votre déploiement.
| Limite | Standard | Temps réel | Batch | Jobs |
|---|---|---|---|---|
| Entrées par requête | 64 | 4 | 200 | 20 000 lignes |
| Caractères par entrée | 200.000 | 4.000 | 200.000 | 200.000 |
| Corps de requête | 12 Mio | 12 Mio | 12 Mio | Téléversement de 50 Mo |
| Image | 6 Mio | 4,2 mégapixels, 3 Mio | 6 Mio | Non proposé |
| Audio | 5 minutes, 12 Mio | Non proposé | Non proposé | 60 minutes, 50 Mo |
| Document | Non proposé | Non proposé | Non proposé | PDF ou DOCX, 10 Mo |
Une requête au-delà d’une limite répond 413 et n’est pas facturée. Votre offre fixe les niveaux que vous pouvez utiliser et le nombre de requêtes par minute.
Niveaux, nouvelles tentatives et consommation
| Niveau | Poids | Idéal pour |
|---|---|---|
| Standard | ×1 | Par défaut |
| Batch | ×0.5 | Moitié prix, priorité la plus basse |
| Temps réel | ×1.6 | Petites entrées et faible latence, à partir de l’offre Team |
- Envoyez un en-tête Idempotency-Key pour réessayer sans risque. Une répétition avec la même clé et le même corps n’est facturée qu’une fois.
- La restauration, les sessions, les capacités, les types et la consommation sont gratuits.
- Les appels en échec ne sont pas facturés.
Erreurs
Chaque erreur comporte un code, un message, l’ID de requête et l’indication qu’une nouvelle tentative peut réussir ou non. Les erreurs de validation désignent le champ avec un JSON Pointer et ne répètent jamais vos données.
- Réessayez uniquement lorsque l’erreur indique qu’une nouvelle tentative peut réussir, et attendez le délai de l’en-tête Retry-After.
- Une erreur de limite nomme la limite. Pour l’audio, elle renvoie vers la route des jobs.
- Une option que votre déploiement ne sert pas encore répond 501.