Saltar al contenido principal

Desarrolladores · API pública 1.9.0

Integra Anonimatum en tus sistemas

API REST con contrato estable en /api/public/**, referencia OpenAPI descargable y conector MCP para asistentes de IA. El mismo motor de la App, en la Unión Europea.

Inicio rápido

Tres pasos: crear la API key, comprobarla y anonimizar el primer documento.

  1. Crea una API key en la App: Perfil → API keys → «Generar API key». Copia la clave en ese momento: no se vuelve a mostrar. Si no ves la sección, tu plan no incluye acceso por API o la gestiona el administrador del grupo.
  2. Guárdala como variable de entorno y comprueba el plan del grupo con GET /api/public/plan.
  3. Envía el documento a POST /api/public/ai/anonymize con las opciones de IA que quieras. La respuesta es el documento anonimizado en su formato original.
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

Los parámetros de los endpoints multipart se envían como campos del formulario (-F). La cuota se descuenta del plan del grupo de la clave.

Autenticación

X-API-Key
Cabecera para integraciones máquina a máquina. Cada clave pertenece a un usuario y a un grupo: usa sus permisos, su plan y su cupo.
Authorization: Bearer
JWT de sesión de usuario, el mismo que usa la App. Útil si integras Anonimatum en una aplicación con inicio de sesión de Politeia.
Aislamiento
Un recurso de otro grupo responde 404, nunca 403: la API no revela si existe.
Revocación
Revoca una clave en Perfil → API keys; deja de funcionar de inmediato. No incluyas claves en el código ni en repositorios.

Límites

Límites técnicos vigentes en la versión 1.9.0 (por dirección IP o por petición):

300 / minPeticiones a /api/public/** por IP.
60 / minAnonimizaciones (anonymize-patterns, -zones, -complete, -whitelist) por IP.
250 MBTamaño máximo de fichero por petición.
20 MB · 100 000 filas · 200 columnas · 50 hojasHojas de cálculo por columnas (/api/public/sheets/**).

Además, cada operación descuenta páginas o documentos del plan del grupo. Consulta el uso con GET /api/public/usage/current y /usage/remaining, o valida antes con POST /usage/validate-operation.

Errores

Los errores siguen el formato estándar { errorCode, message, status }. Los más habituales:

400 INVALID_REQUESTParámetro ausente o con formato incorrecto, fichero vacío o tipo no admitido.
401 UNAUTHORIZEDFalta la API key o el JWT, o la clave está revocada.
403 PLAN_EXPIREDEl plan del grupo ha expirado. Toda operación que consume cupo se rechaza; descargar resultados ya generados y desanonimizar siguen disponibles. No reintentes.
403 INSUFFICIENT_PERMISSIONS / FORBIDDENLa clave no tiene permiso para esa operación o el usuario no tiene plan activo.
404 NOT_FOUNDEl recurso no existe o pertenece a otro grupo.
409 CONFLICTConflicto con el estado actual (p. ej. nombre duplicado).
413 SHEET_LIMIT_EXCEEDEDLa hoja supera el tamaño, las filas, las columnas o las hojas permitidas.
415 SHEET_FORMAT_UNSUPPORTEDEl fichero enviado a /sheets/** no es una hoja de cálculo (xlsx, xls, ods, csv).
429Cupo mensual o anual del plan agotado (errorCode FORBIDDEN y mensaje con el límite) o límite de peticiones por minuto (cuerpo { error, status }).
500 INTERNAL_ERRORError inesperado. Si se repite, escríbenos con la hora y el 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
}

Decide por errorCode, no por el texto de message, que puede cambiar o traducirse.

Referencia OpenAPI

Generada desde el Back de la versión 1.9.0 (grupo springdoc «public-api»), solo con las rutas /api/public/**; no incluye endpoints internos ni de administración.

85 operaciones en 71 rutas · Descargar OpenAPI 3.1 (JSON). Impórtalo en Postman, Insomnia, Bruno o tu generador de clientes OpenAPI.

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

Parámetros

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

Cuerpo multipart/form-data

file*body · fileArchivo PDF a anonimizar

Respuestas

  • 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}

Parámetros

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

Cuerpo multipart/form-data

file*body · fileArchivo PDF a anonimizar

Respuestas

  • 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)

Parámetros

patternsquery · string
redactionZonesquery · string
highQualityquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/pdf
POST/api/public/documents/anonymize-completeAnonimización completa (patrones + zonas)

Parámetros

patternsquery · string
redactionZones*query · string
wordSetIdsquery · integer[]
wordSetMatchModequery · string
highQualityquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/pdf
POST/api/public/documents/anonymize-complete-inverseAnonimización completa inversa

Parámetros

patternsquery · string
redactionZones*query · string
wordSetIdsquery · integer[]
wordSetMatchModequery · string
excludePatternsquery · string
excludeWordSetIdsquery · integer[]
excludeWordSetMatchModequery · string
highQualityquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/pdf
POST/api/public/documents/anonymize-specific-zonesAnonimizar zonas específicas (IA / coordenadas)

Parámetros

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

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/pdf
POST/api/public/documents/anonymize-whitelistAnonimización por lista blanca

Parámetros

redactionZones*query · string
whitelistPatternsquery · string
whitelistWordSetIdsquery · integer[]
whitelistWordSetMatchModequery · string
detectPatternquery · string
backgroundColorquery · string
textContentquery · string
highQualityquery · boolean
censorHeightPadPxquery · integer
whitelistSuppressionsquery · string

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/pdf
POST/api/public/documents/anonymize-zonesAnonimizar solo zonas

Parámetros

redactionZones*query · string
highQualityquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

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

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

redactionZonesquery · string
whitelistPatternsquery · string
whitelistWordSetIdsquery · integer[]
whitelistWordSetMatchModequery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OKapplication/json
POST/api/public/documents/result/searchableResultado buscable (OCR sobre PDF anonimizado)

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Respuestas

  • 200 OK
GET/api/public/cases/{id}Estado de un expediente y de cada documento

UPLOADED, QUEUED, PROCESSING, DONE o FAILED por documento.

Parámetros

id*path · integer

Respuestas

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

Parámetros

id*path · integer

Respuestas

  • 200 OK

Formatos (API pública)

POST/api/public/formats/email/analyzeAnalizar un correo (.eml/.msg)

Cabeceras, cuerpo y adjuntos. Sin cupo.

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Cuerpo multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Respuestas

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

Cupo de herramientas PDF.

Parámetros

dpiquery · integer
colorModequery · string

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/formats/word/editableWord editable (.docx/.odt)

Documento con los datos sustituidos en el propio texto, verificado contra fugas.

Cuerpo multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Respuestas

  • 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

Parámetros

pagequery · integerNúmero de página (empezando en 1)
sizequery · integerElementos por página

Respuestas

  • 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

Cuerpo application/json · PatternRequestDTO

Respuestas

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

Parámetros

id*path · integer🆔 ID único del patrón

Respuestas

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

Parámetros

id*path · integer🆔 ID del patrón a actualizar

Cuerpo application/json · PatternRequestDTO

Respuestas

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

Parámetros

id*path · integer🆔 ID del patrón a eliminar

Respuestas

  • 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

Respuestas

  • 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

Cuerpo application/json · WordSetRequestDTO

Respuestas

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

Parámetros

id*path · integer🆔 ID único del wordset

Respuestas

  • 200 OK
PUT/api/public/wordsets/{id}Actualizar Wordset

Modificación de Wordset:

Permite actualizar un wordset existente incluyendo su lista de palabras.

Parámetros

id*path · integer🆔 ID del wordset a actualizar

Cuerpo application/json · WordSetRequestDTO

Respuestas

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

Parámetros

id*path · integer🆔 ID del wordset a eliminar

Respuestas

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

Parámetros

id*path · integer🆔 ID del wordset
pagequery · integerNúmero de página
sizequery · integerElementos por página
searchquery · stringBúsqueda por subcadena (opcional)

Respuestas

  • 200 OK
POST/api/public/wordsets/{id}/wordsAgregar Palabra a Wordset

Gestión de Palabras Individual:

Agrega una nueva palabra a un wordset existente.

Parámetros

id*path · integer🆔 ID del wordset
word*query · stringPalabra a agregar

Respuestas

  • 200 OK
DELETE/api/public/wordsets/{id}/wordsEliminar Palabra de Wordset

Gestión de Palabras Individual:

Elimina una palabra específica de un wordset.

Parámetros

id*path · integer🆔 ID del wordset
word*query · stringPalabra a eliminar

Respuestas

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

Parámetros

hasHeaderquery · boolean
sampleRowsquery · integer
useAiquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/sheets/previewVista previa del tratamiento por columnas

Sin cupo.

Cuerpo multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Respuestas

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

Cuerpo multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Respuestas

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

Parámetros

aiOptions*query · string
zonesquery · string
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
GET/api/public/ai/optionsOpciones de anonimización con IA

Lista las opciones disponibles del motor de IA (mismas que /ai/options).

Respuestas

  • 200 OK
POST/api/public/ai/previewPreview de anonimización con IA

Mismos parámetros que /ai/preview. Requiere X-API-Key o JWT.

Parámetros

aiOptions*query · string
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer
customWordsquery · string
patternsquery · string
wordSetIdsquery · string
ocrPreprocessquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK

Lotes (API pública)

GET/api/public/batch-jobsListar trabajos del usuario

Respuestas

  • 200 OK
POST/api/public/batch-jobsEncolar lote de documentos

Parámetros

config*query · string
configsquery · string
signatureHintsquery · string

Cuerpo multipart/form-data

files*body · file[]

Respuestas

  • 200 OK
DELETE/api/public/batch-jobs/{id}Eliminar trabajo

Parámetros

id*path · integer

Respuestas

  • 200 OK
GET/api/public/batch-jobs/{id}/outputDescargar PDF de un trabajo

Parámetros

id*path · integer

Respuestas

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

Parámetros

id*path · integer
X-Map-Passwordheader · string

Respuestas

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

Parámetros

X-Map-Passwordheader · string

Respuestas

  • 200 OK

Patrones de figura (API pública)

GET/api/public/figure-patternsListar patrones de figura del usuario

Respuestas

  • 200 OK
POST/api/public/figure-patternsCrear patrón de figura

Cuerpo application/json · CreateFigurePatternDTO

Respuestas

  • 200 OK
GET/api/public/figure-patterns/{id}Obtener patrón de figura por ID

Parámetros

id*path · integer

Respuestas

  • 200 OK
PUT/api/public/figure-patterns/{id}Actualizar patrón de figura

Parámetros

id*path · integer

Cuerpo application/json · CreateFigurePatternDTO

Respuestas

  • 200 OK
DELETE/api/public/figure-patterns/{id}Eliminar patrón de figura

Parámetros

id*path · integer

Respuestas

  • 200 OK
GET/api/public/figure-patterns/{id}/zonesZonas del patrón como RedactionZoneDTO

Parámetros

id*path · integer

Respuestas

  • 200 OK

PDF tools (API pública)

POST/api/public/pdf-tools/analyze-text-layerAnalizar capa de texto del PDF

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

levelquery · string

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/pdf-tools/convert-to-pdfConvertir documento/imagen a PDF

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/pdf-tools/images-to-pdfImágenes a PDF

Parámetros

files*query · file[]

Respuestas

  • 200 OK
POST/api/public/pdf-tools/mergeFusionar PDFs

Parámetros

files*query · file[]

Respuestas

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

Parámetros

metadataquery · string
removeAllquery · boolean

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

positionquery · string
formatquery · string
startNumberquery · integer
fontSizequery · integer
marginquery · number
pagesquery · string

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

formatquery · string
dpiquery · integer
pagesquery · string

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/pdf-tools/pdf-to-searchable-pdfPDF a PDF buscable (OCR)

Parámetros

pagesquery · integer[]

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
POST/api/public/pdf-tools/splitExtraer páginas de un PDF

Parámetros

pages*query · string

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK

Plan y uso

GET/api/public/dashboardDashboard del plan/uso del grupo

Respuestas

  • 200 OK
GET/api/public/permissionsPermisos del grupo de la API key

Respuestas

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

Respuestas

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

Respuestas

  • 200 OK
GET/api/public/usage/historyHistorial de uso del grupo

Respuestas

  • 200 OK
GET/api/public/usage/remainingUso restante del mes

Respuestas

  • 200 OK
POST/api/public/usage/validate-operationValidar si una operación está permitida

Parámetros

operationType*query · string

Respuestas

  • 200 OK

Pseudoanonimización (API pública)

POST/api/public/pseudo/anonymizePseudoanonimizar documento

outputMode: RASTER_TEXT (defecto) o VECTOR. Devuelve verification, vaultStored y contextId.

Parámetros

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

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
GET/api/public/pseudo/config/defaultsDefaults de configuración

Respuestas

  • 200 OK
GET/api/public/pseudo/contextsContextos de la bóveda visibles para el usuario

Parámetros

projectIdquery · string

Respuestas

  • 200 OK
DELETE/api/public/pseudo/contexts/{contextId}Borrar un contexto de la bóveda

Parámetros

contextId*path · string

Respuestas

  • 200 OK
POST/api/public/pseudo/deanonymizeDesanonimizar con mapa o con contextId de la bóveda

Parámetros

X-Map-Passwordheader · string
passwordquery · string
highQualityquery · boolean
contextIdquery · string

Cuerpo multipart/form-data

file*body · file
mapbody · file

Respuestas

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

Parámetros

contextId*path · string
formatquery · string
X-Map-Passwordheader · string
passwordquery · string

Respuestas

  • 200 OK
GET/api/public/pseudo/lookup/{contextId}Lookup valor original desde pseudo

Parámetros

contextId*path · string
value*query · string

Respuestas

  • 200 OK
POST/api/public/pseudo/previewPreview de pseudoanonimización

methodsByType: JSON {"<EntityType>":"<modo>"}; language: es|en|ca|gl|eu|ro.

Parámetros

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

Cuerpo multipart/form-data

file*body · file

Respuestas

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

Parámetros

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

Cuerpo multipart/form-data

file*body · file

Respuestas

  • 200 OK
GET/api/public/pseudo/profilesListar perfiles de pseudoanonimización

Respuestas

  • 200 OK
GET/api/public/pseudo/profiles/{id}Detalle de perfil

Parámetros

id*path · string

Respuestas

  • 200 OK

Webhooks (API pública)

GET/api/public/webhooksWebhooks de esta API key

Respuestas

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

Cuerpo application/json · WebhookRequest

Respuestas

  • 200 OK
PUT/api/public/webhooks/{id}Cambiar webhook

Parámetros

id*path · integer

Cuerpo application/json · WebhookRequest

Respuestas

  • 200 OK
DELETE/api/public/webhooks/{id}Borrar webhook

Parámetros

id*path · integer

Respuestas

  • 200 OK
GET/api/public/webhooks/{id}/deliveriesRegistro de entregas

Parámetros

id*path · integer
limitquery · integer

Respuestas

  • 200 OK
POST/api/public/webhooks/{id}/rotate-secretNuevo secreto de firma

Parámetros

id*path · integer

Respuestas

  • 200 OK
POST/api/public/webhooks/{id}/testEnviar prueba

Parámetros

id*path · integer

Respuestas

  • 200 OK

Webhooks

Un webhook avisa a tu sistema con un POST JSON firmado cuando termina un lote de la cola o una publicación. El aviso nunca lleva nombres de fichero, títulos, textos ni correos: solo identificadores, estados y, en los lotes, un enlace de descarga que se usa con tu API key.

Eventos

batch.completedUn trabajo de la cola termina bien: jobId, páginas y download.url (GET con X-API-Key).
batch.failedUn trabajo de la cola falla: jobId y errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION o PROCESSING), nunca el mensaje.
publication.completedUna publicación en un gestor de expedientes o portal termina bien: publicationId, destino, estado HTTP y SHA-256.
publication.failedUna publicación falla, con los mismos campos.
webhook.testSolo al pulsar «Enviar prueba» o llamar a /{id}/test; no se puede suscribir.

Alta con tu API key

POST /api/public/webhooks devuelve el secreto (whsec_…) una sola vez; guárdalo como variable de entorno. Un webhook creado con una API key solo recibe los eventos del usuario de esa clave; el administrador del grupo puede crear webhooks para todo el grupo desde el panel de la App. También: GET, PUT y DELETE /{id}, POST /{id}/rotate-secret, POST /{id}/test y GET /{id}/deliveries. Máximo 10 por grupo; la URL debe ser 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"]}'

Verificar la firma

Cada aviso lleva la cabecera X-Anonimatum-Signature: t=<unix>,v1=<hex>, donde v1 es HMAC-SHA256 con el secreto completo (incluido el prefijo whsec_) sobre «t.cuerpo». También llegan X-Anonimatum-Event, X-Anonimatum-Event-Id y X-Anonimatum-Delivery.

  1. Lee el cuerpo crudo, sin parsear ni reformatear el JSON.
  2. Separa t y v1 de la cabecera y rechaza el aviso si t se aleja más de 300 segundos de tu reloj.
  3. Calcula HMAC-SHA256(secreto, t + "." + cuerpo) en hexadecimal y compáralo con v1 en tiempo constante.
  4. Deduplica por X-Anonimatum-Event-Id: un reintento trae el mismo id.
  5. Responde 2xx en menos de 5 segundos y procesa después.

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

Cualquier respuesta que no sea 2xx (las redirecciones no se siguen) o que tarde más de 5 segundos cuenta como fallo. Tras el primer intento se reintenta a 1 min, 5 min, 30 min, 2 h y 6 h (6 intentos en total); el registro de entregas muestra el estado, el código HTTP y el siguiente intento.

Si prefieres no exponer un endpoint, consulta el estado de los lotes con GET /api/public/batch-jobs y descarga los terminados con GET /api/public/batch-jobs/{id}/output.

Conector MCP para asistentes de IA

Anonimatum expone la misma API como servidor MCP (Model Context Protocol). El asistente actúa con tu usuario y tu grupo, tras autorizarlo en la App.

URL del servidor MCP

https://gateway.politeiasoft.com/anonimatum/mcp

Claude
En claude.ai → Configuración → Conectores, añade un conector personalizado con la URL MCP y autoriza el acceso en la pantalla de consentimiento de Anonimatum.
ChatGPT
En chatgpt.com → Configuración → Conectores, añade la URL MCP y completa la autorización OAuth. La disponibilidad de conectores personalizados depende de tu plan de ChatGPT.
Grok
En grok.com → Conectores, añade la URL MCP y autoriza el acceso.
Cursor, Claude Code y otros clientes MCP
Si el cliente admite OAuth con redirección local, basta con la URL. Si no, usa la concesión manual en la App (Perfil → Conectores): te da un token y un mcp.json listo para pegar.

Herramientas que expone

  • listar_operaciones — Lista las operaciones disponibles para tu usuario (mismo catálogo que la referencia, sin administración ni endpoints internos).
  • describir_operacion — Método, ruta, parámetros y cómo enviar ficheros a una operación.
  • ejecutar_operacion — Ejecuta una operación; las respuestas binarias incluyen un enlace de descarga de un solo uso.
  • iniciar_subida_fichero — Devuelve una URL de subida de un solo uso, recomendada para documentos grandes (hasta 250 MB).
  • subir_fichero — Sube un fichero pequeño en Base64 en una sola llamada.
  • iniciar_subida_por_partes / subir_parte_fichero — Subida por partes para clientes que no pueden hacer un POST directo.

Las operaciones irreversibles (borrar, desanonimizar) exigen confirmación explícita del usuario en ese turno. Con el plan expirado, el asistente recibe PLAN_EXPIRED y debe transmitir el mensaje sin reintentar. Puedes revocar cada conexión en Perfil → Conectores.

Ejemplo de mcp.json (concesión manual)

{
  "mcpServers": {
    "anonimatum": {
      "url": "https://gateway.politeiasoft.com/anonimatum/mcp",
      "headers": { "Authorization": "Bearer <token de la concesión manual>" }
    }
  }
}

SDK

Acceso bajo petición

SDK oficiales para Python (síncrono y asyncio) y TypeScript/JavaScript (Node 18+) sobre esta misma referencia. El repositorio es privado: pide acceso a Politeia desde el formulario de contacto. También puedes generar un cliente a partir del OpenAPI.

Repositorio de los SDK (privado)

¿Necesitas ayuda con la integración?

Cuéntanos tu caso (gestor documental, volumen, formatos) y te ayudamos a diseñar el flujo.