Développeurs · API publique 1.9.0
Intégrez Anonimatum à vos systèmes
API REST au contrat stable sous /api/public/**, référence OpenAPI téléchargeable et connecteur MCP pour les assistants IA. Le même moteur que l'App, dans l'Union européenne.
Démarrage rapide
Trois étapes : créer la clé API, la vérifier et anonymiser votre premier document.
- Créez une clé API dans l'App : Profil → Clés API → « Générer une clé API ». Copiez-la immédiatement : elle ne sera plus affichée. Si la section n'apparaît pas, votre offre n'inclut pas l'accès à l'API ou c'est l'administrateur de votre groupe qui le gère.
- Enregistrez-la comme variable d'environnement et vérifiez l'offre de votre groupe avec GET /api/public/plan.
- Envoyez le document à POST /api/public/ai/anonymize avec les options d'IA dont vous avez besoin. La réponse est le document anonymisé dans son format d'origine.
export ANONIMATUM_API_KEY="tu_api_key"
# 1. Comprueba la clave: plan y cupo del grupo
curl -H "X-API-Key: $ANONIMATUM_API_KEY" \
https://api.anonimatum.com/api/public/plan
# 2. Opciones de IA disponibles (rgpd, fechas, direcciones, qr…)
curl -H "X-API-Key: $ANONIMATUM_API_KEY" \
https://api.anonimatum.com/api/public/ai/options
# 3. Primer anonimizado: PDF, Word, Excel o PowerPoint
curl -X POST https://api.anonimatum.com/api/public/ai/anonymize \
-H "X-API-Key: $ANONIMATUM_API_KEY" \
-F "file=@resolucion.pdf" \
-F "aiOptions=rgpd,direcciones,qr" \
-F "backgroundColor=black" \
-F "textContent=none" \
--output resolucion-anonimizada.pdfLes paramètres des endpoints multipart sont envoyés comme champs de formulaire (-F). La consommation est décomptée de l'offre du groupe de la clé.
Authentification
- X-API-Key
- En-tête pour les intégrations de machine à machine. Chaque clé appartient à un utilisateur et à un groupe : elle utilise leurs permissions, leur offre et leur quota.
- Authorization: Bearer
- JWT de session utilisateur, le même que celui de l'App. Utile si vous intégrez Anonimatum dans une application avec connexion Politeia.
- Isolation
- Une ressource d'un autre groupe renvoie 404, jamais 403 : l'API ne révèle pas si elle existe.
- Révocation
- Révoquez une clé dans Profil → Clés API ; elle cesse de fonctionner immédiatement. Ne versionnez jamais de clés dans le code ou dans des dépôts.
Limites
Limites techniques de la version 1.9.0 (par adresse IP ou par requête) :
| 300 / min | Requêtes vers /api/public/** par IP. |
|---|---|
| 60 / min | Anonymisations (anonymize-patterns, -zones, -complete, -whitelist) par IP. |
| 250 MB | Taille maximale de fichier par requête. |
| 20 MB · 100 000 lignes · 200 colonnes · 50 feuilles | Feuilles de calcul par colonne (/api/public/sheets/**). |
Chaque opération décompte également des pages ou des documents de l'offre du groupe. Consultez la consommation avec GET /api/public/usage/current et /usage/remaining, ou validez au préalable avec POST /usage/validate-operation.
Erreurs
Les erreurs suivent le format standard { errorCode, message, status }. Les plus fréquentes :
| 400 INVALID_REQUEST | Paramètre manquant ou mal formé, fichier vide ou type non pris en charge. |
|---|---|
| 401 UNAUTHORIZED | Clé API ou JWT absent, ou clé révoquée. |
| 403 PLAN_EXPIRED | L'offre du groupe a expiré. Toute opération qui consomme du quota est refusée ; le téléchargement des résultats déjà produits et la désanonymisation restent disponibles. Ne réessayez pas. |
| 403 INSUFFICIENT_PERMISSIONS / FORBIDDEN | La clé n'est pas autorisée à exécuter cette opération ou l'utilisateur n'a pas d'offre active. |
| 404 NOT_FOUND | La ressource n'existe pas ou appartient à un autre groupe. |
| 409 CONFLICT | Conflit avec l'état actuel (p. ex. nom en double). |
| 413 SHEET_LIMIT_EXCEEDED | La feuille de calcul dépasse la taille, le nombre de lignes, de colonnes ou de feuilles autorisé. |
| 415 SHEET_FORMAT_UNSUPPORTED | Le fichier envoyé à /sheets/** n'est pas une feuille de calcul (xlsx, xls, ods, csv). |
| 429 | Quota mensuel ou annuel de l'offre épuisé (errorCode FORBIDDEN avec la limite dans le message) ou limite de requêtes par minute atteinte (corps { error, status }). |
| 500 INTERNAL_ERROR | Erreur inattendue. Si elle persiste, écrivez-nous en indiquant l'heure et l'endpoint. |
HTTP/1.1 403
Content-Type: application/json
{
"errorCode": "PLAN_EXPIRED",
"message": "Tu plan ha expirado. Contacta con el equipo de Politeia para renovarlo o activar un plan.",
"status": 403
}Basez votre logique sur errorCode, pas sur le texte du message, qui peut changer ou être traduit.
Référence OpenAPI
Générée à partir du backend 1.9.0 (groupe springdoc « public-api »), uniquement les routes /api/public/** ; aucun endpoint interne ni d'administration.
85 opérations sur 71 routes · Télécharger OpenAPI 3.1 (JSON). Importez-la dans Postman, Insomnia, Bruno ou votre générateur de clients OpenAPI. Les descriptions des endpoints proviennent du code source de l'API et sont en espagnol.
Anonimización de Documentos
POST/api/public/documents/anonymize-by-idsAnonimizar PDF con Patrones y Wordsets por ID
Funcionalidad Principal:
Anonimiza documentos PDF utilizando patrones regex y wordsets existentes en la base de datos,
identificados por sus IDs, junto con palabras sueltas opcionales.
Ventajas de este Endpoint:
- Reutiliza patrones y wordsets existentes
- Mejor rendimiento al evitar recrear patrones
- Gestión centralizada de patrones
- Control de acceso basado en permisos de usuario
Casos de Uso:
- Anonimización de contratos y documentos legales
- Protección de datos médicos en informes
- Ocultación de información comercial confidencial
- Preparación de documentos para auditorías
- Procesamiento automatizado con patrones predefinidos
Proceso de Anonimización:
- El PDF se analiza página por página
- Se cargan los patrones regex desde la base de datos usando los IDs
- Se cargan las palabras de los wordsets usando los IDs
- Se combinan con las palabras sueltas proporcionadas
- Se aplican todos los patrones y palabras para detectar información sensible
- Las coincidencias se marcan para anonimización
- Se genera un PDF con las zonas sensibles ocultadas
Paramètres
| patternIds | query · string | IDs de patrones regex existentes en formato JSON |
| wordSetIds | query · string | IDs de wordsets existentes en formato JSON |
| additionalWords | query · string | Palabras sueltas adicionales en formato JSON |
| backgroundColor | query · string | Color de fondo para anonimización |
| textContent | query · string | Contenido de texto para zonas anonimizadas |
| highQuality | query · boolean | Procesamiento de alta calidad |
Corps multipart/form-data
| file* | body · file | Archivo PDF a anonimizar |
Réponses
- 200 PDF anonimizado exitosamenteapplication/pdf
- 400 Solicitud inválida - Verificar IDs de patrones/wordsetsapplication/json
- 401 Token JWT o API Key inválidaapplication/json
- 403 Sin permisos para acceder a los patrones/wordsets especificadosapplication/json
- 404 Patrones o wordsets no encontradosapplication/json
POST/api/public/documents/anonymize-patternsAnonimizar PDF con Patrones Regex Directos
Funcionalidad Principal:
Anonimiza documentos PDF utilizando patrones regex personalizados para detectar y ocultar información sensible.
Casos de Uso:
- Anonimización de contratos y documentos legales
- Protección de datos médicos en informes
- Ocultación de información comercial confidencial
- Preparación de documentos para auditorías
Proceso de Anonimización:
- El PDF se analiza página por página
- Se aplican los patrones regex especificados
- Las coincidencias se marcan para anonimización
- Se genera un PDF con las zonas sensibles ocultadas
Patrones Regex Comunes:
- DNI español:
\d{8}[A-Z] - Email:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} - Teléfono:
\+?[0-9]{9,15} - Tarjeta crédito:
\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}
Paramètres
| patterns | query · string | Patrones regex en formato JSON |
| wordSetIds | query · string | IDs de wordsets a aplicar |
| backgroundColor | query · string | Color de fondo para anonimización |
| textContent | query · string | Contenido de texto para zonas anonimizadas |
| highQuality | query · boolean | Procesamiento de alta calidad |
Corps multipart/form-data
| file* | body · file | Archivo PDF a anonimizar |
Réponses
- 200 PDF anonimizado exitosamenteapplication/pdf
- 400 Solicitud inválidaapplication/json
- 401 Token JWT o API Key inválidaapplication/json
Documentos clásicos (API pública)
POST/api/public/documents/anonymizeAnonimizar (compatibilidad)
Paramètres
| patterns | query · string | |
| redactionZones | query · string | |
| highQuality | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-completeAnonimización completa (patrones + zonas)
Paramètres
| patterns | query · string | |
| redactionZones* | query · string | |
| wordSetIds | query · integer[] | |
| wordSetMatchMode | query · string | |
| highQuality | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-complete-inverseAnonimización completa inversa
Paramètres
| patterns | query · string | |
| redactionZones* | query · string | |
| wordSetIds | query · integer[] | |
| wordSetMatchMode | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string | |
| highQuality | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-specific-zonesAnonimizar zonas específicas (IA / coordenadas)
Paramètres
| zones* | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer | |
| aiOptions | query · string | |
| customWords | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| pageOrientations | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-whitelistAnonimización por lista blanca
Paramètres
| redactionZones* | query · string | |
| whitelistPatterns | query · string | |
| whitelistWordSetIds | query · integer[] | |
| whitelistWordSetMatchMode | query · string | |
| detectPattern | query · string | |
| backgroundColor | query · string | |
| textContent | query · string | |
| highQuality | query · boolean | |
| censorHeightPadPx | query · integer | |
| whitelistSuppressions | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-zonesAnonimizar solo zonas
Paramètres
| redactionZones* | query · string | |
| highQuality | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/pdf
POST/api/public/documents/previewPreview de anonimización
Paramètres
| patterns | query · string | |
| redactionZones | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/json
POST/api/public/documents/preview-inversePreview inversa (lista blanca)
Paramètres
| redactionZones | query · string | |
| whitelistPatterns | query · string | |
| whitelistWordSetIds | query · integer[] | |
| whitelistWordSetMatchMode | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/json
POST/api/public/documents/result/searchableResultado buscable (OCR sobre PDF anonimizado)
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
Expedientes (API pública)
GET/api/public/casesListar los expedientes visibles para la clave
Del usuario de la clave o compartidos con su grupo, con recuentos por estado.
Réponses
- 200 OK
GET/api/public/cases/{id}Estado de un expediente y de cada documento
UPLOADED, QUEUED, PROCESSING, DONE o FAILED por documento.
Paramètres
| id* | path · integer |
Réponses
- 200 OK
GET/api/public/cases/{id}/downloadDescargar el expediente anonimizado en un ZIP
Documentos terminados e índice CSV/PDF sin datos personales; mapas pseudo solo como LEEME. 204 si no hay documentos terminados.
Paramètres
| id* | path · integer |
Réponses
- 200 OK
Formatos (API pública)
POST/api/public/formats/email/analyzeAnalizar un correo (.eml/.msg)
Cabeceras, cuerpo y adjuntos. Sin cupo.
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/formats/email/anonymizeAnonimizar un correo (.eml/.msg) con sus adjuntos
ZIP (base64) con el correo en PDF, los adjuntos anonimizados y, con includeEml, el .eml.
Corps multipart/form-data
| file* | body · file | |
| options | body · FormatOptionsForm |
Réponses
- 200 OK
POST/api/public/formats/tiff/from-pdfPDF anonimizado → TIFF multipágina
Cupo de herramientas PDF.
Paramètres
| dpi | query · integer | |
| colorMode | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/formats/word/editableWord editable (.docx/.odt)
Documento con los datos sustituidos en el propio texto, verificado contra fugas.
Corps multipart/form-data
| file* | body · file | |
| options | body · FormatOptionsForm |
Réponses
- 200 OK
Gestión de Patrones
GET/api/public/patternsObtener Todos los Patrones
Biblioteca Completa de Patrones:
Lista paginada de todos los patrones regex disponibles para el usuario.
Información Incluida:
- 🆔 ID único del patrón
- Nombre y descripción
- Expresión regex
- Estadísticas de uso
- Estado activo/inactivo
- Fecha de creación y modificación
Paramètres
| page | query · integer | Número de página (empezando en 1) |
| size | query · integer | Elementos por página |
Réponses
- 200 OK
POST/api/public/patternsCrear Nuevo Patrón
Creación de Patrón Personalizado:
Permite crear un nuevo patrón regex personalizado para detección de información sensible.
Campos Requeridos:
- Nombre descriptivo
- Expresión regex válida
- Descripción del propósito
- Tipo/categoría del patrón
Corps application/json · PatternRequestDTO
Réponses
- 200 OK
GET/api/public/patterns/{id}Obtener Patrón por ID
Detalles Completos del Patrón:
Obtiene toda la información de un patrón específico incluyendo metadatos y estadísticas.
Paramètres
| id* | path · integer | 🆔 ID único del patrón |
Réponses
- 200 OK
PUT/api/public/patterns/{id}Actualizar Patrón Existente
Modificación de Patrón:
Permite actualizar un patrón existente modificando cualquiera de sus propiedades.
Paramètres
| id* | path · integer | 🆔 ID del patrón a actualizar |
Corps application/json · PatternRequestDTO
Réponses
- 200 OK
DELETE/api/public/patterns/{id}Eliminar Patrón
Eliminación de Patrón:
Elimina permanentemente un patrón de la biblioteca del usuario.
Advertencia:Esta acción no se puede deshacer.
Paramètres
| id* | path · integer | 🆔 ID del patrón a eliminar |
Réponses
- 200 OK
Gestión de Wordsets
GET/api/public/wordsetsObtener Todos los Wordsets
Biblioteca Completa de Wordsets:
Lista todos los diccionarios de palabras disponibles para el usuario.
Información Incluida:
- 🆔 ID único del wordset
- Nombre y descripción
- Número de palabras
- Categoría/tipo
- Estado activo
- Última actualización
Réponses
- 200 OK
POST/api/public/wordsetsCrear Nuevo Wordset
Creación de Diccionario:
Permite crear un nuevo wordset personalizado con una lista de palabras.
Campos Requeridos:
- Nombre descriptivo
- Descripción del propósito
- Lista inicial de palabras
- Categoría del wordset
Corps application/json · WordSetRequestDTO
Réponses
- 200 OK
GET/api/public/wordsets/{id}Obtener Wordset por ID
Detalles Completos del Wordset:
Obtiene toda la información de un wordset incluyendo la lista completa de palabras.
Paramètres
| id* | path · integer | 🆔 ID único del wordset |
Réponses
- 200 OK
PUT/api/public/wordsets/{id}Actualizar Wordset
Modificación de Wordset:
Permite actualizar un wordset existente incluyendo su lista de palabras.
Paramètres
| id* | path · integer | 🆔 ID del wordset a actualizar |
Corps application/json · WordSetRequestDTO
Réponses
- 200 OK
DELETE/api/public/wordsets/{id}Eliminar Wordset
Eliminación de Wordset:
Elimina permanentemente un wordset y todas sus palabras asociadas.
Advertencia:Esta acción no se puede deshacer.
Paramètres
| id* | path · integer | 🆔 ID del wordset a eliminar |
Réponses
- 200 OK
GET/api/public/wordsets/{id}/wordsObtener Palabras de Wordset
Lista de Palabras:
Obtiene todas las palabras de un wordset específico con paginación.
Paramètres
| id* | path · integer | 🆔 ID del wordset |
| page | query · integer | Número de página |
| size | query · integer | Elementos por página |
| search | query · string | Búsqueda por subcadena (opcional) |
Réponses
- 200 OK
POST/api/public/wordsets/{id}/wordsAgregar Palabra a Wordset
Gestión de Palabras Individual:
Agrega una nueva palabra a un wordset existente.
Paramètres
| id* | path · integer | 🆔 ID del wordset |
| word* | query · string | Palabra a agregar |
Réponses
- 200 OK
DELETE/api/public/wordsets/{id}/wordsEliminar Palabra de Wordset
Gestión de Palabras Individual:
Elimina una palabra específica de un wordset.
Paramètres
| id* | path · integer | 🆔 ID del wordset |
| word* | query · string | Palabra a eliminar |
Réponses
- 200 OK
Hojas de cálculo por columnas (API pública)
POST/api/public/sheets/analyzeAnalizar las columnas de una hoja de cálculo (xlsx, xls, ods, csv)
Cabecera, muestra y tipo sugerido por columna. Sin cupo.
Paramètres
| hasHeader | query · boolean | |
| sampleRows | query · integer | |
| useAi | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/sheets/previewVista previa del tratamiento por columnas
Sin cupo.
Corps multipart/form-data
| file* | body · file | |
| options | body · SheetOptionsForm |
Réponses
- 200 OK
POST/api/public/sheets/processTratar una hoja de cálculo por columnas
Mismo formato de salida; cupo: 1 página por cada 50 filas de datos.
Corps multipart/form-data
| file* | body · file | |
| options | body · SheetOptionsForm |
Réponses
- 200 OK
Inteligencia Artificial
POST/api/public/ai/anonymizeAnonimizar documento con IA
Mismos parámetros que /ai/anonymize. Valida y registra uso de IA del grupo.
Paramètres
| aiOptions* | query · string | |
| zones | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
GET/api/public/ai/optionsOpciones de anonimización con IA
Lista las opciones disponibles del motor de IA (mismas que /ai/options).
Réponses
- 200 OK
POST/api/public/ai/previewPreview de anonimización con IA
Mismos parámetros que /ai/preview. Requiere X-API-Key o JWT.
Paramètres
| aiOptions* | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer | |
| customWords | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| ocrPreprocess | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
Lotes (API pública)
GET/api/public/batch-jobsListar trabajos del usuario
Réponses
- 200 OK
POST/api/public/batch-jobsEncolar lote de documentos
Paramètres
| config* | query · string | |
| configs | query · string | |
| signatureHints | query · string |
Corps multipart/form-data
| files* | body · file[] |
Réponses
- 200 OK
DELETE/api/public/batch-jobs/{id}Eliminar trabajo
Paramètres
| id* | path · integer |
Réponses
- 200 OK
GET/api/public/batch-jobs/{id}/outputDescargar PDF de un trabajo
Paramètres
| id* | path · integer |
Réponses
- 200 OK
GET/api/public/batch-jobs/{id}/output-bundleDescargar bundle ZIP de un trabajo pseudo
El mapa nunca va en claro: con la cabecera X-Map-Password se incluye cifrado (<documento>_pseudo-map.enc, mismo formato que /pseudo/export?format=enc); sin ella, solo LEEME-mapa.txt.
Paramètres
| id* | path · integer | |
| X-Map-Password | header · string |
Réponses
- 200 OK
GET/api/public/batch-jobs/download-completedDescargar ZIP de trabajos completados
X-Map-Password (opcional) cifra los mapas pseudo incluidos. Un trabajo cuyo mapa no está en la bóveda y llega sin contraseña se conserva en la cola para no perder el mapa.
Paramètres
| X-Map-Password | header · string |
Réponses
- 200 OK
Patrones de figura (API pública)
GET/api/public/figure-patternsListar patrones de figura del usuario
Réponses
- 200 OK
POST/api/public/figure-patternsCrear patrón de figura
Corps application/json · CreateFigurePatternDTO
Réponses
- 200 OK
GET/api/public/figure-patterns/{id}Obtener patrón de figura por ID
Paramètres
| id* | path · integer |
Réponses
- 200 OK
PUT/api/public/figure-patterns/{id}Actualizar patrón de figura
Paramètres
| id* | path · integer |
Corps application/json · CreateFigurePatternDTO
Réponses
- 200 OK
DELETE/api/public/figure-patterns/{id}Eliminar patrón de figura
Paramètres
| id* | path · integer |
Réponses
- 200 OK
GET/api/public/figure-patterns/{id}/zonesZonas del patrón como RedactionZoneDTO
Paramètres
| id* | path · integer |
Réponses
- 200 OK
PDF tools (API pública)
POST/api/public/pdf-tools/analyze-text-layerAnalizar capa de texto del PDF
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/json
POST/api/public/pdf-tools/compressComprimir un PDF
Recomprime las imágenes embebidas a JPEG y reduce su resolución efectiva sin tocar el texto vectorial. level: low (calidad 0.85, máx. 200 ppp), medium (0.7, 150 ppp, por defecto) o high (0.5, 100 ppp). Si el resultado no es más pequeño se devuelve el original. Cabeceras X-Original-Size y X-Compressed-Size en bytes.
Paramètres
| level | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/convert-to-pdfConvertir documento/imagen a PDF
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/images-to-pdfImágenes a PDF
Paramètres
| files* | query · file[] |
Réponses
- 200 OK
POST/api/public/pdf-tools/mergeFusionar PDFs
Paramètres
| files* | query · file[] |
Réponses
- 200 OK
POST/api/public/pdf-tools/metadataEditar los metadatos de un PDF
metadata: JSON con los campos de /metadata/read; un campo null o vacío se borra. custom null conserva los personalizados y un objeto los sustituye (un valor null o vacío no se escribe). removeAll=true borra antes Info, XMP y personalizados. El XMP se elimina siempre para que no contradiga los valores nuevos.
Paramètres
| metadata | query · string | |
| removeAll | query · boolean |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/metadata/readLeer los metadatos de un PDF
Devuelve título, autor, asunto, palabras clave, creador, productor, fechas de creación y modificación (ISO-8601 o null) y los campos personalizados (custom). No consume cupo.
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OKapplication/json
POST/api/public/pdf-tools/page-numbersNumerar las páginas de un PDF
position: bottom-center (por defecto), bottom-right, bottom-left, top-center, top-right o top-left, sobre la página tal como se ve (respeta el giro). format: plantilla con {n} (número de página + startNumber - 1) y {total} (páginas del documento), p. ej. "Página {n} de {total}"; por defecto {n}. startNumber: número que corresponde a la página 1 (1). fontSize: 6–48 (11). margin: distancia al borde en puntos (24). pages: páginas a numerar ("2-10"); vacía = todas.
Paramètres
| position | query · string | |
| format | query · string | |
| startNumber | query · integer | |
| fontSize | query · integer | |
| margin | query · number | |
| pages | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/pdf-to-imagesConvertir páginas de un PDF a imágenes
format: jpg (por defecto) o png. dpi: 72–300 (por defecto 150). pages: expresión opcional ("1-3,5"); vacía = todas. Una sola página devuelve la imagen (pagina-N.jpg); varias, un ZIP paginas-imagenes.zip con pagina-001.jpg, pagina-002.jpg...
Paramètres
| format | query · string | |
| dpi | query · integer | |
| pages | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/pdf-to-searchable-pdfPDF a PDF buscable (OCR)
Paramètres
| pages | query · integer[] |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pdf-tools/splitExtraer páginas de un PDF
Paramètres
| pages* | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
Plan y uso
GET/api/public/dashboardDashboard del plan/uso del grupo
Réponses
- 200 OK
GET/api/public/permissionsPermisos del grupo de la API key
Réponses
- 200 OK
GET/api/public/planPlan del grupo asociado a la API key
Devuelve el plan/límites del grupo Anonimatum vinculado a la API key.
Réponses
- 200 OK
GET/api/public/usage/currentUso del mes actual del grupo
Documentos/páginas consumidos en el mes en curso para el grupo de la API key.
Réponses
- 200 OK
GET/api/public/usage/historyHistorial de uso del grupo
Réponses
- 200 OK
GET/api/public/usage/remainingUso restante del mes
Réponses
- 200 OK
POST/api/public/usage/validate-operationValidar si una operación está permitida
Paramètres
| operationType* | query · string |
Réponses
- 200 OK
Pseudoanonimización (API pública)
POST/api/public/pseudo/anonymizePseudoanonimizar documento
outputMode: RASTER_TEXT (defecto) o VECTOR. Devuelve verification, vaultStored y contextId.
Paramètres
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| exclusionWords | query · string | |
| excludeOfficeOccurrences | query · string | |
| highQuality | query · boolean | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
GET/api/public/pseudo/config/defaultsDefaults de configuración
Réponses
- 200 OK
GET/api/public/pseudo/contextsContextos de la bóveda visibles para el usuario
Paramètres
| projectId | query · string |
Réponses
- 200 OK
DELETE/api/public/pseudo/contexts/{contextId}Borrar un contexto de la bóveda
Paramètres
| contextId* | path · string |
Réponses
- 200 OK
POST/api/public/pseudo/deanonymizeDesanonimizar con mapa o con contextId de la bóveda
Paramètres
| X-Map-Password | header · string | |
| password | query · string | |
| highQuality | query · boolean | |
| contextId | query · string |
Corps multipart/form-data
| file* | body · file | |
| map | body · file |
Réponses
- 200 OK
GET/api/public/pseudo/export/{contextId}Exportar mapa de contexto
Paramètres
| contextId* | path · string | |
| format | query · string | |
| X-Map-Password | header · string | |
| password | query · string |
Réponses
- 200 OK
GET/api/public/pseudo/lookup/{contextId}Lookup valor original desde pseudo
Paramètres
| contextId* | path · string | |
| value* | query · string |
Réponses
- 200 OK
POST/api/public/pseudo/previewPreview de pseudoanonimización
methodsByType: JSON {"<EntityType>":"<modo>"}; language: es|en|ca|gl|eu|ro.
Paramètres
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
POST/api/public/pseudo/preview-documentPrevisualizar una página pseudoanonimizada (application/pdf)
Mismos parámetros que /anonymize más page (1-based). Sin bóveda ni cuota. Solo PDF/imagen.
Paramètres
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| highQuality | query · boolean | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string | |
| page | query · integer |
Corps multipart/form-data
| file* | body · file |
Réponses
- 200 OK
GET/api/public/pseudo/profilesListar perfiles de pseudoanonimización
Réponses
- 200 OK
GET/api/public/pseudo/profiles/{id}Detalle de perfil
Paramètres
| id* | path · string |
Réponses
- 200 OK
Webhooks (API pública)
GET/api/public/webhooksWebhooks de esta API key
Réponses
- 200 OK
POST/api/public/webhooksCrear webhook
Eventos: batch.completed, batch.failed, publication.completed, publication.failed. Devuelve el secreto de firma una sola vez. Firma: X-Anonimatum-Signature t=<unix>,v1=<hex HMAC-SHA256(secreto, t.cuerpo)>; rechaza marcas de más de 5 minutos.
Corps application/json · WebhookRequest
Réponses
- 200 OK
PUT/api/public/webhooks/{id}Cambiar webhook
Paramètres
| id* | path · integer |
Corps application/json · WebhookRequest
Réponses
- 200 OK
DELETE/api/public/webhooks/{id}Borrar webhook
Paramètres
| id* | path · integer |
Réponses
- 200 OK
GET/api/public/webhooks/{id}/deliveriesRegistro de entregas
Paramètres
| id* | path · integer | |
| limit | query · integer |
Réponses
- 200 OK
POST/api/public/webhooks/{id}/rotate-secretNuevo secreto de firma
Paramètres
| id* | path · integer |
Réponses
- 200 OK
POST/api/public/webhooks/{id}/testEnviar prueba
Paramètres
| id* | path · integer |
Réponses
- 200 OK
Webhooks
Un webhook notifie votre système par un POST JSON signé lorsqu'un lot de la file d'attente ou une publication se termine. La notification ne contient jamais de noms de fichiers, de titres, de texte ni d'adresses e-mail : uniquement des identifiants, des statuts et, pour les lots, un lien de téléchargement à utiliser avec votre clé API.
Événements
| batch.completed | Une tâche de la file d'attente se termine avec succès : jobId, pages et download.url (GET avec X-API-Key). |
|---|---|
| batch.failed | Une tâche de la file d'attente échoue : jobId et errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION ou PROCESSING), jamais le message. |
| publication.completed | Une publication vers un système de gestion de dossiers ou un portail réussit : publicationId, destination, statut HTTP et SHA-256. |
| publication.failed | Une publication échoue, avec les mêmes champs. |
| webhook.test | Uniquement lorsque vous cliquez sur « Envoyer un test » ou appelez /{id}/test ; il n'est pas possible de s'y abonner. |
Enregistrement avec votre clé API
POST /api/public/webhooks renvoie le secret (whsec_…) une seule fois ; enregistrez-le comme variable d'environnement. Un webhook créé avec une clé API ne reçoit que les événements de l'utilisateur de cette clé ; l'administrateur du groupe peut créer des webhooks pour tout le groupe depuis le panneau de l'App. Également disponibles : GET, PUT et DELETE /{id}, POST /{id}/rotate-secret, POST /{id}/test et GET /{id}/deliveries. Jusqu'à 10 par groupe ; l'URL doit être en https.
curl -X POST https://api.anonimatum.com/api/public/webhooks \
-H "X-API-Key: $ANONIMATUM_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://erp.ejemplo.es/anonimatum/webhook","events":["batch.completed","batch.failed"]}'Vérifier la signature
Chaque notification porte l'en-tête X-Anonimatum-Signature: t=<unix>,v1=<hex>, où v1 est un HMAC-SHA256 calculé avec le secret complet (préfixe whsec_ inclus) sur « t.body ». Les en-têtes X-Anonimatum-Event, X-Anonimatum-Event-Id et X-Anonimatum-Delivery sont également envoyés.
- Lisez le corps brut, sans analyser ni reformater le JSON.
- Séparez t et v1 de l'en-tête et rejetez la notification si t s'écarte de plus de 300 secondes de votre horloge.
- Calculez HMAC-SHA256(secret, t + "." + body) en hexadécimal et comparez-le à v1 en temps constant.
- Dédupliquez par X-Anonimatum-Event-Id : une nouvelle tentative porte le même identifiant.
- Répondez 2xx en moins de 5 secondes et traitez ensuite.
Node.js (Express)
import crypto from "node:crypto";
import express from "express";
const app = express();
const SECRET = process.env.ANONIMATUM_WEBHOOK_SECRET; // whsec_… completo
app.post("/anonimatum/webhook", express.raw({ type: "application/json" }), (req, res) => {
const parts = Object.fromEntries(
(req.get("X-Anonimatum-Signature") ?? "").split(",").map((p) => p.split("=", 2))
);
const t = Number(parts.t);
if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > 300) return res.sendStatus(400);
const expected = crypto.createHmac("sha256", SECRET).update(t + ".").update(req.body).digest("hex");
const given = Buffer.from(parts.v1 ?? "", "utf8");
const ok = given.length === expected.length && crypto.timingSafeEqual(Buffer.from(expected, "utf8"), given);
if (!ok) return res.sendStatus(401);
// Deduplica por req.get("X-Anonimatum-Event-Id") y procesa después.
res.sendStatus(204);
});Python (Flask)
import hashlib, hmac, os, time
from flask import Flask, abort, request
app = Flask(__name__)
SECRET = os.environ["ANONIMATUM_WEBHOOK_SECRET"].encode() # whsec_… completo
@app.post("/anonimatum/webhook")
def webhook():
body = request.get_data() # cuerpo crudo, sin parsear
header = request.headers.get("X-Anonimatum-Signature", "")
parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
try:
t = int(parts["t"])
except (KeyError, ValueError):
abort(400)
if abs(time.time() - t) > 300:
abort(400)
expected = hmac.new(SECRET, f"{t}.".encode() + body, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, parts.get("v1", "")):
abort(401)
# Deduplica por request.headers["X-Anonimatum-Event-Id"] y procesa después.
return "", 204Toute réponse autre que 2xx (les redirections ne sont pas suivies) ou plus lente que 5 secondes est considérée comme un échec. Après la première tentative, les nouvelles tentatives ont lieu à 1 min, 5 min, 30 min, 2 h et 6 h (6 tentatives au total) ; le journal des livraisons indique le statut, le code HTTP et la prochaine tentative.
Si vous préférez ne pas exposer d'endpoint, interrogez l'état des lots avec GET /api/public/batch-jobs et téléchargez les tâches terminées avec GET /api/public/batch-jobs/{id}/output.
Connecteur MCP pour assistants IA
Anonimatum expose la même API sous forme de serveur MCP (Model Context Protocol). L'assistant agit en tant que votre utilisateur et votre groupe après que vous l'avez autorisé dans l'App.
URL du serveur MCP
https://gateway.politeiasoft.com/anonimatum/mcp
- Claude
- Dans claude.ai → Paramètres → Connecteurs, ajoutez un connecteur personnalisé avec l'URL MCP et autorisez l'accès sur l'écran de consentement d'Anonimatum.
- ChatGPT
- Dans chatgpt.com → Paramètres → Connecteurs, ajoutez l'URL MCP et finalisez l'autorisation OAuth. La disponibilité des connecteurs personnalisés dépend de votre offre ChatGPT.
- Grok
- Dans grok.com → Connecteurs, ajoutez l'URL MCP et autorisez l'accès.
- Cursor, Claude Code et autres clients MCP
- Si le client prend en charge OAuth avec redirection locale, l'URL suffit. Sinon, utilisez l'autorisation manuelle dans l'App (Profil → Connecteurs) : vous obtenez un jeton et un mcp.json prêt à coller.
Outils exposés
listar_operaciones— Liste les opérations disponibles pour votre utilisateur (même catalogue que la référence, sans endpoints d'administration ni internes).describir_operacion— Méthode, chemin, paramètres et mode d'envoi des fichiers pour une opération.ejecutar_operacion— Exécute une opération ; les réponses binaires incluent un lien de téléchargement à usage unique.iniciar_subida_fichero— Renvoie une URL d'envoi à usage unique, recommandée pour les documents volumineux (jusqu'à 250 MB).subir_fichero— Envoie un petit fichier en Base64 en un seul appel.iniciar_subida_por_partes / subir_parte_fichero— Envoi par morceaux pour les clients qui ne peuvent pas faire de POST direct.
Les opérations irréversibles (suppression, désanonymisation) exigent la confirmation explicite de l'utilisateur dans ce même tour. Avec une offre expirée, l'assistant reçoit PLAN_EXPIRED et doit transmettre le message sans réessayer. Vous pouvez révoquer chaque connexion dans Profil → Connecteurs.
Exemple de mcp.json (autorisation manuelle)
{
"mcpServers": {
"anonimatum": {
"url": "https://gateway.politeiasoft.com/anonimatum/mcp",
"headers": { "Authorization": "Bearer <token de la concesión manual>" }
}
}
}SDK
Accès sur demande
SDK officiels pour Python (synchrone et asyncio) et TypeScript/JavaScript (Node 18+), construits sur cette même référence. Le dépôt est privé : demandez l'accès à Politeia via le formulaire de contact. Vous pouvez aussi générer un client à partir du fichier OpenAPI.
Besoin d'aide pour votre intégration ?
Présentez-nous votre cas (système de gestion documentaire, volume, formats) et nous vous aiderons à concevoir le flux.
