Aller au contenu principal

−20 % la première année avec le code Voir les offres

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.

  1. 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.
  2. Enregistrez-la comme variable d'environnement et vérifiez l'offre de votre groupe avec GET /api/public/plan.
  3. 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.pdf

Les 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 / minRequêtes vers /api/public/** par IP.
60 / minAnonymisations (anonymize-patterns, -zones, -complete, -whitelist) par IP.
250 MBTaille maximale de fichier par requête.
20 MB · 100 000 lignes · 200 colonnes · 50 feuillesFeuilles 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_REQUESTParamètre manquant ou mal formé, fichier vide ou type non pris en charge.
401 UNAUTHORIZEDClé API ou JWT absent, ou clé révoquée.
403 PLAN_EXPIREDL'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 / FORBIDDENLa clé n'est pas autorisée à exécuter cette opération ou l'utilisateur n'a pas d'offre active.
404 NOT_FOUNDLa ressource n'existe pas ou appartient à un autre groupe.
409 CONFLICTConflit avec l'état actuel (p. ex. nom en double).
413 SHEET_LIMIT_EXCEEDEDLa feuille de calcul dépasse la taille, le nombre de lignes, de colonnes ou de feuilles autorisé.
415 SHEET_FORMAT_UNSUPPORTEDLe fichier envoyé à /sheets/** n'est pas une feuille de calcul (xlsx, xls, ods, csv).
429Quota 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_ERRORErreur 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

patternIdsquery · stringIDs de patrones regex existentes en formato JSON
wordSetIdsquery · stringIDs de wordsets existentes en formato JSON
additionalWordsquery · stringPalabras sueltas adicionales en formato JSON
backgroundColorquery · stringColor de fondo para anonimización
textContentquery · stringContenido de texto para zonas anonimizadas
highQualityquery · booleanProcesamiento de alta calidad

Corps multipart/form-data

file*body · fileArchivo 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

patternsquery · stringPatrones regex en formato JSON
wordSetIdsquery · stringIDs de wordsets a aplicar
backgroundColorquery · stringColor de fondo para anonimización
textContentquery · stringContenido de texto para zonas anonimizadas
highQualityquery · booleanProcesamiento de alta calidad

Corps multipart/form-data

file*body · fileArchivo 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

patternsquery · string
redactionZonesquery · string
highQualityquery · 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

patternsquery · string
redactionZones*query · string
wordSetIdsquery · integer[]
wordSetMatchModequery · string
highQualityquery · 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

patternsquery · string
redactionZones*query · string
wordSetIdsquery · integer[]
wordSetMatchModequery · string
excludePatternsquery · string
excludeWordSetIdsquery · integer[]
excludeWordSetMatchModequery · string
highQualityquery · 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
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer
aiOptionsquery · string
customWordsquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
pageOrientationsquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
excludePatternsquery · string
excludeWordSetIdsquery · integer[]
excludeWordSetMatchModequery · 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
whitelistPatternsquery · string
whitelistWordSetIdsquery · integer[]
whitelistWordSetMatchModequery · string
detectPatternquery · string
backgroundColorquery · string
textContentquery · string
highQualityquery · boolean
censorHeightPadPxquery · integer
whitelistSuppressionsquery · 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
highQualityquery · boolean

Corps multipart/form-data

file*body · file

Réponses

  • 200 OKapplication/pdf
POST/api/public/documents/previewPreview de anonimización

Paramètres

patternsquery · string
redactionZonesquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
excludePatternsquery · string
excludeWordSetIdsquery · integer[]
excludeWordSetMatchModequery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer

Corps multipart/form-data

file*body · file

Réponses

  • 200 OKapplication/json
POST/api/public/documents/preview-inversePreview inversa (lista blanca)

Paramètres

redactionZonesquery · string
whitelistPatternsquery · string
whitelistWordSetIdsquery · integer[]
whitelistWordSetMatchModequery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · 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
optionsbody · FormatOptionsForm

Réponses

  • 200 OK
POST/api/public/formats/tiff/from-pdfPDF anonimizado → TIFF multipágina

Cupo de herramientas PDF.

Paramètres

dpiquery · integer
colorModequery · 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
optionsbody · 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

pagequery · integerNúmero de página (empezando en 1)
sizequery · integerElementos 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
pagequery · integerNúmero de página
sizequery · integerElementos por página
searchquery · stringBú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 · stringPalabra 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 · stringPalabra 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

hasHeaderquery · boolean
sampleRowsquery · integer
useAiquery · 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
optionsbody · 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
optionsbody · 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
zonesquery · string
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · 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
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer
customWordsquery · string
patternsquery · string
wordSetIdsquery · string
ocrPreprocessquery · 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
configsquery · string
signatureHintsquery · 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-Passwordheader · 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-Passwordheader · 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

levelquery · 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

metadataquery · string
removeAllquery · 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

positionquery · string
formatquery · string
startNumberquery · integer
fontSizequery · integer
marginquery · number
pagesquery · 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

formatquery · string
dpiquery · integer
pagesquery · 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

pagesquery · 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

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
exclusionWordsquery · string
excludeOfficeOccurrencesquery · string
highQualityquery · boolean
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · 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

projectIdquery · 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-Passwordheader · string
passwordquery · string
highQualityquery · boolean
contextIdquery · string

Corps multipart/form-data

file*body · file
mapbody · file

Réponses

  • 200 OK
GET/api/public/pseudo/export/{contextId}Exportar mapa de contexto

Paramètres

contextId*path · string
formatquery · string
X-Map-Passwordheader · string
passwordquery · 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

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · 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

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
highQualityquery · boolean
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · string
pagequery · 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
limitquery · 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.completedUne tâche de la file d'attente se termine avec succès : jobId, pages et download.url (GET avec X-API-Key).
batch.failedUne tâche de la file d'attente échoue : jobId et errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION ou PROCESSING), jamais le message.
publication.completedUne publication vers un système de gestion de dossiers ou un portail réussit : publicationId, destination, statut HTTP et SHA-256.
publication.failedUne publication échoue, avec les mêmes champs.
webhook.testUniquement 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.

  1. Lisez le corps brut, sans analyser ni reformater le JSON.
  2. 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.
  3. Calculez HMAC-SHA256(secret, t + "." + body) en hexadécimal et comparez-le à v1 en temps constant.
  4. Dédupliquez par X-Anonimatum-Event-Id : une nouvelle tentative porte le même identifiant.
  5. 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 "", 204

Toute 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.

Dépôt du SDK (privé)

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.