Référence API
Intégrez l'anonymisation dans vos applications
API REST complète pour la détection et l'anonymisation programmatique des PII.
URL de base
https://anonymize.today/apiTous les points de terminaison de l'API sont relatifs à cette URL de base. Par exemple, le point de terminaison d'analyse est https://anonymize.today/api/presidio/analyze.
Authentification
Authentifiez les requêtes API en utilisant des jetons Bearer :
Authorization: Bearer YOUR_API_TOKENObtention d'un jeton API
- Connectez-vous à votre compte anonymize.today
- Allez dans Paramètres → Compte → Jetons API
- Cliquez sur Générer un nouveau jeton
- Copiez et conservez votre jeton en toute sécurité (il ne sera plus affiché)
Note de sécurité
Ne jamais exposer votre jeton API dans le code côté client ou dans des dépôts publics. Utilisez des variables d'environnement et des requêtes côté serveur.
Jeton dans les requêtes
TypeScript
const response = await fetch('https://anonymize.today/api/presidio/analyze', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ANONYMIZE_API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ text, entities }),
});Python
import os
import requests
headers = {
"Authorization": f"Bearer {os.environ['ANONYMIZE_API_TOKEN']}",
"Content-Type": "application/json"
}
response = requests.post(
"https://anonymize.today/api/presidio/analyze",
headers=headers,
json={"text": text, "entities": entities}
)cURL
curl -X POST https://anonymize.today/api/presidio/analyze \
-H "Authorization: Bearer $ANONYMIZE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "John Doe works at Acme Corp", "entities": ["PERSON", "ORGANIZATION"]}'Limites de taux
| Type de point de terminaison | Limite de taux | Autorisation de rafale : 10 requêtes |
|---|---|---|
| Authentication | 3 requests/second | 5 requests |
| Analysis & Anonymization | 30 requests/second | 50 requests |
| Presets & Settings | 10 requests/second | 20 requests |
Lorsqu'il y a une limite de taux, l'API renvoie 429 Trop de requêtes avec un en-tête Retry-After indiquant quand vous pouvez réessayer.
Points de terminaison principaux
Analyser le texte
Détecter les entités PII dans le texte. Renvoie les positions et types d'entités détectées.
Anonymiser le texte
Anonymiser les entités PII détectées à l'aide de divers opérateurs.
Dé-anonymiser le texte
Restaurer les entités chiffrées à leurs valeurs d'origine à l'aide de la même clé de chiffrement.
Opérateurs d'anonymisation
| Opérateur | Description | Récupérable | Exemple |
|---|---|---|---|
| replace | Remplacer par un espace réservé | No | John → [PERSON] |
| mask | Masquer partiellement les caractères | No | john@email.com → j***@email.com |
| redact | Supprimer complètement | No | John → (empty) |
| hash | Hachage SHA-256 à sens unique | No | John → a3f2b1c4... |
| encrypt | Chiffrement AES-256-GCM | Yes | John → [ENC:...] |
Configurations des opérateurs
// Replace operator
{ "type": "replace", "new_value": "[PERSON]" }
// Mask operator
{
"type": "mask",
"masking_char": "*",
"chars_to_mask": 5,
"from_end": false
}
// Hash operator
{ "type": "hash", "hash_type": "sha256" }
// Encrypt operator (requires encryption key in user settings)
{ "type": "encrypt" }
// Redact operator
{ "type": "redact" }API des préréglages
Types d'entités
anonymize.today prend en charge 256 types d'entités dans 10 catégories :
Personal
PERSON, EMAIL_ADDRESS, PHONE_NUMBER
Financial
CREDIT_CARD, IBAN_CODE, SWIFT_CODE, CRYPTO
Location
LOCATION, ADDRESS, COORDINATES
Government
SSN, PASSPORT, DRIVER_LICENSE, NATIONAL_ID
Contact
URL, DOMAIN_NAME
Technical
IP_ADDRESS, MAC_ADDRESS
Temporal
DATE_TIME, AGE
Organizational
ORGANIZATION, JOB_TITLE
Medical
MEDICAL_LICENSE, HEALTH_ID
Custom
User-defined patterns
Voir la liste complète des types d'entités dans la documentation des préréglages. Presets documentation.
Langues prises en charge
L'API prend en charge 27 langues pour la reconnaissance des PII :
| Code | Langue | Moteur |
|---|---|---|
| en | English | spaCy |
| de | German | spaCy |
| es | Spanish | spaCy |
| fr | French | spaCy |
| it | Italian | spaCy |
| pt | Portuguese | spaCy |
| nl | Dutch | spaCy |
| pl | Polish | spaCy |
| ru | Russian | spaCy |
| ja | Japanese | spaCy |
| zh | Chinese | spaCy |
| ko | Korean | spaCy |
| ar | Arabic | Transformer |
| hi | Hindi | Transformer |
| tr | Turkish | Transformer |
Langues supplémentaires : roumain, grec, croate, slovène, macédonien, suédois, danois, norvégien, finnois, ukrainien, lituanien, catalan
Gestion des erreurs
Codes d'état HTTP standard :
| Statut | Signification | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | 400 - Mauvaise requête (paramètres invalides) |
| 401 | Unauthorized | 401 - Non autorisé (jeton invalide ou manquant) |
| 402 | Payment Required | Insufficient tokens |
| 403 | Forbidden | Access denied to resource |
| 404 | Not Found | Resource not found |
| 429 | Too Many Requests | 429 - Limite de taux atteinte (trop de requêtes) |
| 500 | Internal Error | 500 - Erreur serveur (contactez le support) |
Format de réponse d'erreur
{
"error": {
"code": "INSUFFICIENT_TOKENS",
"message": "You need 5 tokens but only have 2 remaining",
"details": {
"required": 5,
"available": 2
}
}
}Exemples complets
TypeScript/Node.js
import fetch from 'node-fetch';
const API_BASE = 'https://anonymize.today/api';
const API_TOKEN = process.env.ANONYMIZE_API_TOKEN;
async function analyzeAndAnonymize(text: string) {
// Step 1: Analyze
const analyzeResponse = await fetch(`${API_BASE}/presidio/analyze`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
text,
entities: ['PERSON', 'EMAIL_ADDRESS', 'PHONE_NUMBER'],
language: 'en',
}),
});
const { results } = await analyzeResponse.json();
if (results.length === 0) {
return { text, anonymized: false };
}
// Step 2: Anonymize
const anonymizeResponse = await fetch(`${API_BASE}/presidio/anonymize`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
text,
analyzer_results: results,
anonymizers: {
DEFAULT: { type: 'replace', new_value: '[REDACTED]' },
},
}),
});
return anonymizeResponse.json();
}
// Usage
const result = await analyzeAndAnonymize('Contact John Doe at john@example.com');
console.log(result.text); // "Contact [REDACTED] at [REDACTED]"
Python
import os
import requests
API_BASE = "https://anonymize.today/api"
API_TOKEN = os.environ["ANONYMIZE_API_TOKEN"]
def analyze_and_anonymize(text: str) -> dict:
headers = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Step 1: Analyze
analyze_response = requests.post(
f"{API_BASE}/presidio/analyze",
headers=headers,
json={
"text": text,
"entities": ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER"],
"language": "en"
}
)
results = analyze_response.json()["results"]
if not results:
return {"text": text, "anonymized": False}
# Step 2: Anonymize
anonymize_response = requests.post(
f"{API_BASE}/presidio/anonymize",
headers=headers,
json={
"text": text,
"analyzer_results": results,
"anonymizers": {
"DEFAULT": {"type": "replace", "new_value": "[REDACTED]"}
}
}
)
return anonymize_response.json()
# Usage
result = analyze_and_anonymize("Contact John Doe at john@example.com")
print(result["text"]) # "Contact [REDACTED] at [REDACTED]"
Related Documentation
Dernière mise à jour : Mars 2026