Skip to main content

20% off your first year with code See plans

Developers · Public API 1.9.0

Integrate Anonimatum into your systems

REST API with a stable contract under /api/public/**, downloadable OpenAPI reference and an MCP connector for AI assistants. The same engine as the App, in the European Union.

Quick start

Three steps: create the API key, check it and anonymize your first document.

  1. Create an API key in the App: Profile → API keys → «Generate API key». Copy it right away: it is not shown again. If you do not see the section, your plan does not include API access or your group administrator manages it.
  2. Store it as an environment variable and check your group's plan with GET /api/public/plan.
  3. Send the document to POST /api/public/ai/anonymize with the AI options you need. The response is the anonymized document in its original format.
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

Parameters of multipart endpoints are sent as form fields (-F). Usage is deducted from the plan of the key's group.

Authentication

X-API-Key
Header for machine-to-machine integrations. Each key belongs to a user and a group: it uses their permissions, plan and quota.
Authorization: Bearer
User session JWT, the same the App uses. Useful if you embed Anonimatum in an application with Politeia sign-in.
Isolation
A resource from another group returns 404, never 403: the API does not reveal whether it exists.
Revocation
Revoke a key in Profile → API keys; it stops working immediately. Never commit keys to code or repositories.

Limits

Technical limits in version 1.9.0 (per IP address or per request):

300 / minRequests to /api/public/** per IP.
60 / minAnonymizations (anonymize-patterns, -zones, -complete, -whitelist) per IP.
250 MBMaximum file size per request.
20 MB · 100,000 rows · 200 columns · 50 sheetsSpreadsheets by column (/api/public/sheets/**).

Each operation also deducts pages or documents from the group's plan. Check usage with GET /api/public/usage/current and /usage/remaining, or validate beforehand with POST /usage/validate-operation.

Errors

Errors use the standard format { errorCode, message, status }. The most common ones:

400 INVALID_REQUESTMissing or malformed parameter, empty file or unsupported type.
401 UNAUTHORIZEDMissing API key or JWT, or the key has been revoked.
403 PLAN_EXPIREDThe group's plan has expired. Every quota-consuming operation is rejected; downloading results already produced and de-anonymizing remain available. Do not retry.
403 INSUFFICIENT_PERMISSIONS / FORBIDDENThe key is not allowed to run that operation or the user has no active plan.
404 NOT_FOUNDThe resource does not exist or belongs to another group.
409 CONFLICTConflict with the current state (e.g. duplicate name).
413 SHEET_LIMIT_EXCEEDEDThe spreadsheet exceeds the allowed size, rows, columns or sheets.
415 SHEET_FORMAT_UNSUPPORTEDThe file sent to /sheets/** is not a spreadsheet (xlsx, xls, ods, csv).
429Monthly or yearly plan quota exhausted (errorCode FORBIDDEN with the limit in the message) or per-minute request limit (body { error, status }).
500 INTERNAL_ERRORUnexpected error. If it persists, write to us with the time and 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
}

Branch on errorCode, not on the message text, which may change or be translated.

OpenAPI reference

Generated from the 1.9.0 backend (springdoc group «public-api»), only /api/public/** routes; no internal or admin endpoints.

85 operations across 71 routes · Download OpenAPI 3.1 (JSON). Import it into Postman, Insomnia, Bruno or your OpenAPI client generator. Endpoint descriptions come from the API source and are in Spanish.

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

Parameters

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

Body multipart/form-data

file*body · fileArchivo PDF a anonimizar

Responses

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

Parameters

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

Body multipart/form-data

file*body · fileArchivo PDF a anonimizar

Responses

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

Parameters

patternsquery · string
redactionZonesquery · string
highQualityquery · boolean

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

redactionZones*query · string
highQualityquery · boolean

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Body multipart/form-data

file*body · file

Responses

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

Responses

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

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer

Responses

  • 200 OK

Formatos (API pública)

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

Cabeceras, cuerpo y adjuntos. Sin cupo.

Body multipart/form-data

file*body · file

Responses

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

Body multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Responses

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

Cupo de herramientas PDF.

Parameters

dpiquery · integer
colorModequery · string

Body multipart/form-data

file*body · file

Responses

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

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

Body multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Responses

  • 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

Parameters

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

Responses

  • 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

Body application/json · PatternRequestDTO

Responses

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

Parameters

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

Responses

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

Parameters

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

Body application/json · PatternRequestDTO

Responses

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

Parameters

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

Responses

  • 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

Responses

  • 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

Body application/json · WordSetRequestDTO

Responses

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

Parameters

id*path · integer🆔 ID único del wordset

Responses

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

Modificación de Wordset:

Permite actualizar un wordset existente incluyendo su lista de palabras.

Parameters

id*path · integer🆔 ID del wordset a actualizar

Body application/json · WordSetRequestDTO

Responses

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

Parameters

id*path · integer🆔 ID del wordset a eliminar

Responses

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

Parameters

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

Responses

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

Gestión de Palabras Individual:

Agrega una nueva palabra a un wordset existente.

Parameters

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

Responses

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

Gestión de Palabras Individual:

Elimina una palabra específica de un wordset.

Parameters

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

Responses

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

Parameters

hasHeaderquery · boolean
sampleRowsquery · integer
useAiquery · boolean

Body multipart/form-data

file*body · file

Responses

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

Sin cupo.

Body multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Responses

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

Body multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

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

Responses

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

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

  • 200 OK

Lotes (API pública)

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

Responses

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

Parameters

config*query · string
configsquery · string
signatureHintsquery · string

Body multipart/form-data

files*body · file[]

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

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

Responses

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

Parameters

X-Map-Passwordheader · string

Responses

  • 200 OK

Patrones de figura (API pública)

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

Responses

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

Body application/json · CreateFigurePatternDTO

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer

Body application/json · CreateFigurePatternDTO

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer

Responses

  • 200 OK

PDF tools (API pública)

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

levelquery · string

Body multipart/form-data

file*body · file

Responses

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

files*query · file[]

Responses

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

Parameters

files*query · file[]

Responses

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

Parameters

metadataquery · string
removeAllquery · boolean

Body multipart/form-data

file*body · file

Responses

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

formatquery · string
dpiquery · integer
pagesquery · string

Body multipart/form-data

file*body · file

Responses

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

Parameters

pagesquery · integer[]

Body multipart/form-data

file*body · file

Responses

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

Parameters

pages*query · string

Body multipart/form-data

file*body · file

Responses

  • 200 OK

Plan y uso

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

Responses

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

Responses

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

Responses

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

Responses

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

Responses

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

Responses

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

Parameters

operationType*query · string

Responses

  • 200 OK

Pseudoanonimización (API pública)

POST/api/public/pseudo/anonymizePseudoanonimizar documento

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Responses

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

Parameters

projectIdquery · string

Responses

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

Parameters

contextId*path · string

Responses

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

Parameters

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

Body multipart/form-data

file*body · file
mapbody · file

Responses

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

Parameters

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

Responses

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

Parameters

contextId*path · string
value*query · string

Responses

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

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Parameters

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

Body multipart/form-data

file*body · file

Responses

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

Responses

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

Parameters

id*path · string

Responses

  • 200 OK

Webhooks (API pública)

GET/api/public/webhooksWebhooks de esta API key

Responses

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

Body application/json · WebhookRequest

Responses

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

Parameters

id*path · integer

Body application/json · WebhookRequest

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer
limitquery · integer

Responses

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

Parameters

id*path · integer

Responses

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

Parameters

id*path · integer

Responses

  • 200 OK

Webhooks

A webhook notifies your system with a signed JSON POST when a queue batch or a publication finishes. The notification never carries file names, titles, text or email addresses: only identifiers, statuses and, for batches, a download link used with your API key.

Events

batch.completedA queue job finishes successfully: jobId, pages and download.url (GET with X-API-Key).
batch.failedA queue job fails: jobId and errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION or PROCESSING), never the message.
publication.completedA publication to a case management system or portal succeeds: publicationId, destination, HTTP status and SHA-256.
publication.failedA publication fails, with the same fields.
webhook.testOnly when you press «Send test» or call /{id}/test; it cannot be subscribed to.

Register with your API key

POST /api/public/webhooks returns the secret (whsec_…) only once; store it as an environment variable. A webhook created with an API key only receives that key's user events; the group administrator can create group-wide webhooks from the App panel. Also: GET, PUT and DELETE /{id}, POST /{id}/rotate-secret, POST /{id}/test and GET /{id}/deliveries. Up to 10 per group; the URL must be 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"]}'

Verify the signature

Each notification carries the X-Anonimatum-Signature: t=<unix>,v1=<hex> header, where v1 is HMAC-SHA256 keyed with the full secret (including the whsec_ prefix) over «t.body». X-Anonimatum-Event, X-Anonimatum-Event-Id and X-Anonimatum-Delivery are also sent.

  1. Read the raw body, without parsing or reformatting the JSON.
  2. Split t and v1 from the header and reject the notification if t is more than 300 seconds away from your clock.
  3. Compute HMAC-SHA256(secret, t + "." + body) as hex and compare it with v1 in constant time.
  4. Deduplicate by X-Anonimatum-Event-Id: a retry carries the same id.
  5. Answer 2xx within 5 seconds and process afterwards.

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

Any non-2xx response (redirects are not followed) or one slower than 5 seconds counts as a failure. After the first attempt, retries happen at 1 min, 5 min, 30 min, 2 h and 6 h (6 attempts in total); the delivery log shows the status, HTTP code and next attempt.

If you would rather not expose an endpoint, poll batch status with GET /api/public/batch-jobs and download finished jobs with GET /api/public/batch-jobs/{id}/output.

MCP connector for AI assistants

Anonimatum exposes the same API as an MCP (Model Context Protocol) server. The assistant acts as your user and group after you authorize it in the App.

MCP server URL

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

Claude
In claude.ai → Settings → Connectors, add a custom connector with the MCP URL and authorize access on Anonimatum's consent screen.
ChatGPT
In chatgpt.com → Settings → Connectors, add the MCP URL and complete the OAuth authorization. Custom connector availability depends on your ChatGPT plan.
Grok
In grok.com → Connectors, add the MCP URL and authorize access.
Cursor, Claude Code and other MCP clients
If the client supports OAuth with a local redirect, the URL is enough. Otherwise use the manual grant in the App (Profile → Connectors): it gives you a token and a ready-to-paste mcp.json.

Tools it exposes

  • listar_operaciones — Lists the operations available to your user (same catalogue as the reference, without admin or internal endpoints).
  • describir_operacion — Method, path, parameters and how to send files for an operation.
  • ejecutar_operacion — Runs an operation; binary responses include a single-use download link.
  • iniciar_subida_fichero — Returns a single-use upload URL, recommended for large documents (up to 250 MB).
  • subir_fichero — Uploads a small file as Base64 in a single call.
  • iniciar_subida_por_partes / subir_parte_fichero — Chunked upload for clients that cannot POST directly.

Irreversible operations (delete, de-anonymize) require the user's explicit confirmation in that turn. With an expired plan the assistant receives PLAN_EXPIRED and must relay the message without retrying. You can revoke each connection in Profile → Connectors.

Sample mcp.json (manual grant)

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

SDK

Access on request

Official SDKs for Python (sync and asyncio) and TypeScript/JavaScript (Node 18+) built on this same reference. The repository is private: ask Politeia for access through the contact form. You can also generate a client from the OpenAPI file.

SDK repository (private)

Need help with your integration?

Tell us about your case (document management system, volume, formats) and we will help you design the flow.