Sviluppatori · API pubblica 1.9.0
Integra Anonimatum nei tuoi sistemi
API REST con contratto stabile sotto /api/public/**, riferimento OpenAPI scaricabile e connettore MCP per gli assistenti IA. Lo stesso motore dell'App, nell'Unione europea.
Guida rapida
Tre passaggi: crea la chiave API, verificala e anonimizza il tuo primo documento.
- Crea una chiave API nell'App: Profilo → Chiavi API → «Genera chiave API». Copiala subito: non verrà più mostrata. Se non vedi la sezione, il tuo piano non include l'accesso all'API oppure lo gestisce l'amministratore del tuo gruppo.
- Salvala come variabile d'ambiente e verifica il piano del tuo gruppo con GET /api/public/plan.
- Invia il documento a POST /api/public/ai/anonymize con le opzioni di IA che ti servono. La risposta è il documento anonimizzato nel suo formato originale.
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.pdfI parametri degli endpoint multipart si inviano come campi del modulo (-F). Il consumo viene scalato dal piano del gruppo a cui appartiene la chiave.
Autenticazione
- X-API-Key
- Header per le integrazioni machine-to-machine. Ogni chiave appartiene a un utente e a un gruppo: ne usa i permessi, il piano e la quota.
- Authorization: Bearer
- JWT della sessione utente, lo stesso che usa l'App. Utile se integri Anonimatum in un'applicazione con accesso tramite Politeia.
- Isolamento
- Una risorsa di un altro gruppo restituisce 404, mai 403: l'API non rivela se esiste.
- Revoca
- Revoca una chiave da Profilo → Chiavi API; smette di funzionare immediatamente. Non inserire mai le chiavi nel codice o nei repository.
Limiti
Limiti tecnici nella versione 1.9.0 (per indirizzo IP o per richiesta):
| 300 / min | Richieste a /api/public/** per IP. |
|---|---|
| 60 / min | Anonimizzazioni (anonymize-patterns, -zones, -complete, -whitelist) per IP. |
| 250 MB | Dimensione massima del file per richiesta. |
| 20 MB · 100.000 righe · 200 colonne · 50 fogli | Fogli di calcolo per colonna (/api/public/sheets/**). |
Ogni operazione scala inoltre pagine o documenti dal piano del gruppo. Controlla il consumo con GET /api/public/usage/current e /usage/remaining, oppure verifica in anticipo con POST /usage/validate-operation.
Errori
Gli errori usano il formato standard { errorCode, message, status }. I più comuni:
| 400 INVALID_REQUEST | Parametro mancante o non valido, file vuoto o tipo non supportato. |
|---|---|
| 401 UNAUTHORIZED | Chiave API o JWT mancante, oppure la chiave è stata revocata. |
| 403 PLAN_EXPIRED | Il piano del gruppo è scaduto. Ogni operazione che consuma quota viene rifiutata; restano disponibili il download dei risultati già prodotti e la deanonimizzazione. Non riprovare. |
| 403 INSUFFICIENT_PERMISSIONS / FORBIDDEN | La chiave non è autorizzata a eseguire quell'operazione oppure l'utente non ha un piano attivo. |
| 404 NOT_FOUND | La risorsa non esiste o appartiene a un altro gruppo. |
| 409 CONFLICT | Conflitto con lo stato attuale (ad es. nome duplicato). |
| 413 SHEET_LIMIT_EXCEEDED | Il foglio di calcolo supera la dimensione, le righe, le colonne o i fogli consentiti. |
| 415 SHEET_FORMAT_UNSUPPORTED | Il file inviato a /sheets/** non è un foglio di calcolo (xlsx, xls, ods, csv). |
| 429 | Quota mensile o annuale del piano esaurita (errorCode FORBIDDEN con il limite nel messaggio) oppure limite di richieste al minuto (body { error, status }). |
| 500 INTERNAL_ERROR | Errore imprevisto. Se persiste, scrivici indicando l'ora e 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
}Gestisci i casi in base a errorCode, non al testo del messaggio, che può cambiare o essere tradotto.
Riferimento OpenAPI
Generato dal backend 1.9.0 (gruppo springdoc «public-api»), solo rotte /api/public/**; nessun endpoint interno o di amministrazione.
85 operazioni su 71 rotte · Scarica OpenAPI 3.1 (JSON). Importalo in Postman, Insomnia, Bruno o nel tuo generatore di client OpenAPI. Le descrizioni degli endpoint provengono dal sorgente dell'API e sono in spagnolo.
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
Parametri
| patternIds | query · string | IDs de patrones regex existentes en formato JSON |
| wordSetIds | query · string | IDs de wordsets existentes en formato JSON |
| additionalWords | query · string | Palabras sueltas adicionales en formato JSON |
| backgroundColor | query · string | Color de fondo para anonimización |
| textContent | query · string | Contenido de texto para zonas anonimizadas |
| highQuality | query · boolean | Procesamiento de alta calidad |
Body multipart/form-data
| file* | body · file | Archivo PDF a anonimizar |
Risposte
- 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}
Parametri
| patterns | query · string | Patrones regex en formato JSON |
| wordSetIds | query · string | IDs de wordsets a aplicar |
| backgroundColor | query · string | Color de fondo para anonimización |
| textContent | query · string | Contenido de texto para zonas anonimizadas |
| highQuality | query · boolean | Procesamiento de alta calidad |
Body multipart/form-data
| file* | body · file | Archivo PDF a anonimizar |
Risposte
- 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)
Parametri
| patterns | query · string | |
| redactionZones | query · string | |
| highQuality | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-completeAnonimización completa (patrones + zonas)
Parametri
| patterns | query · string | |
| redactionZones* | query · string | |
| wordSetIds | query · integer[] | |
| wordSetMatchMode | query · string | |
| highQuality | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-complete-inverseAnonimización completa inversa
Parametri
| patterns | query · string | |
| redactionZones* | query · string | |
| wordSetIds | query · integer[] | |
| wordSetMatchMode | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string | |
| highQuality | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-specific-zonesAnonimizar zonas específicas (IA / coordenadas)
Parametri
| zones* | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer | |
| aiOptions | query · string | |
| customWords | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| pageOrientations | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-whitelistAnonimización por lista blanca
Parametri
| redactionZones* | query · string | |
| whitelistPatterns | query · string | |
| whitelistWordSetIds | query · integer[] | |
| whitelistWordSetMatchMode | query · string | |
| detectPattern | query · string | |
| backgroundColor | query · string | |
| textContent | query · string | |
| highQuality | query · boolean | |
| censorHeightPadPx | query · integer | |
| whitelistSuppressions | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/anonymize-zonesAnonimizar solo zonas
Parametri
| redactionZones* | query · string | |
| highQuality | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/pdf
POST/api/public/documents/previewPreview de anonimización
Parametri
| patterns | query · string | |
| redactionZones | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · integer[] | |
| excludeWordSetMatchMode | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/json
POST/api/public/documents/preview-inversePreview inversa (lista blanca)
Parametri
| redactionZones | query · string | |
| whitelistPatterns | query · string | |
| whitelistWordSetIds | query · integer[] | |
| whitelistWordSetMatchMode | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OKapplication/json
POST/api/public/documents/result/searchableResultado buscable (OCR sobre PDF anonimizado)
Body multipart/form-data
| file* | body · file |
Risposte
- 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.
Risposte
- 200 OK
GET/api/public/cases/{id}Estado de un expediente y de cada documento
UPLOADED, QUEUED, PROCESSING, DONE o FAILED por documento.
Parametri
| id* | path · integer |
Risposte
- 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.
Parametri
| id* | path · integer |
Risposte
- 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 |
Risposte
- 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 | |
| options | body · FormatOptionsForm |
Risposte
- 200 OK
POST/api/public/formats/tiff/from-pdfPDF anonimizado → TIFF multipágina
Cupo de herramientas PDF.
Parametri
| dpi | query · integer | |
| colorMode | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 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 | |
| options | body · FormatOptionsForm |
Risposte
- 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
Parametri
| page | query · integer | Número de página (empezando en 1) |
| size | query · integer | Elementos por página |
Risposte
- 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
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID único del patrón |
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID del patrón a actualizar |
Body application/json · PatternRequestDTO
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID del patrón a eliminar |
Risposte
- 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
Risposte
- 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
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID único del wordset |
Risposte
- 200 OK
PUT/api/public/wordsets/{id}Actualizar Wordset
Modificación de Wordset:
Permite actualizar un wordset existente incluyendo su lista de palabras.
Parametri
| id* | path · integer | 🆔 ID del wordset a actualizar |
Body application/json · WordSetRequestDTO
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID del wordset a eliminar |
Risposte
- 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.
Parametri
| id* | path · integer | 🆔 ID del wordset |
| page | query · integer | Número de página |
| size | query · integer | Elementos por página |
| search | query · string | Búsqueda por subcadena (opcional) |
Risposte
- 200 OK
POST/api/public/wordsets/{id}/wordsAgregar Palabra a Wordset
Gestión de Palabras Individual:
Agrega una nueva palabra a un wordset existente.
Parametri
| id* | path · integer | 🆔 ID del wordset |
| word* | query · string | Palabra a agregar |
Risposte
- 200 OK
DELETE/api/public/wordsets/{id}/wordsEliminar Palabra de Wordset
Gestión de Palabras Individual:
Elimina una palabra específica de un wordset.
Parametri
| id* | path · integer | 🆔 ID del wordset |
| word* | query · string | Palabra a eliminar |
Risposte
- 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.
Parametri
| hasHeader | query · boolean | |
| sampleRows | query · integer | |
| useAi | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
POST/api/public/sheets/previewVista previa del tratamiento por columnas
Sin cupo.
Body multipart/form-data
| file* | body · file | |
| options | body · SheetOptionsForm |
Risposte
- 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 | |
| options | body · SheetOptionsForm |
Risposte
- 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.
Parametri
| aiOptions* | query · string | |
| zones | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
GET/api/public/ai/optionsOpciones de anonimización con IA
Lista las opciones disponibles del motor de IA (mismas que /ai/options).
Risposte
- 200 OK
POST/api/public/ai/previewPreview de anonimización con IA
Mismos parámetros que /ai/preview. Requiere X-API-Key o JWT.
Parametri
| aiOptions* | query · string | |
| highQuality | query · boolean | |
| backgroundColor | query · string | |
| textContent | query · string | |
| censorHeightPadPx | query · integer | |
| customWords | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| ocrPreprocess | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
Lotes (API pública)
GET/api/public/batch-jobsListar trabajos del usuario
Risposte
- 200 OK
POST/api/public/batch-jobsEncolar lote de documentos
Parametri
| config* | query · string | |
| configs | query · string | |
| signatureHints | query · string |
Body multipart/form-data
| files* | body · file[] |
Risposte
- 200 OK
DELETE/api/public/batch-jobs/{id}Eliminar trabajo
Parametri
| id* | path · integer |
Risposte
- 200 OK
GET/api/public/batch-jobs/{id}/outputDescargar PDF de un trabajo
Parametri
| id* | path · integer |
Risposte
- 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.
Parametri
| id* | path · integer | |
| X-Map-Password | header · string |
Risposte
- 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.
Parametri
| X-Map-Password | header · string |
Risposte
- 200 OK
Patrones de figura (API pública)
GET/api/public/figure-patternsListar patrones de figura del usuario
Risposte
- 200 OK
POST/api/public/figure-patternsCrear patrón de figura
Body application/json · CreateFigurePatternDTO
Risposte
- 200 OK
GET/api/public/figure-patterns/{id}Obtener patrón de figura por ID
Parametri
| id* | path · integer |
Risposte
- 200 OK
PUT/api/public/figure-patterns/{id}Actualizar patrón de figura
Parametri
| id* | path · integer |
Body application/json · CreateFigurePatternDTO
Risposte
- 200 OK
DELETE/api/public/figure-patterns/{id}Eliminar patrón de figura
Parametri
| id* | path · integer |
Risposte
- 200 OK
GET/api/public/figure-patterns/{id}/zonesZonas del patrón como RedactionZoneDTO
Parametri
| id* | path · integer |
Risposte
- 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 |
Risposte
- 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.
Parametri
| level | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
POST/api/public/pdf-tools/convert-to-pdfConvertir documento/imagen a PDF
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
POST/api/public/pdf-tools/images-to-pdfImágenes a PDF
Parametri
| files* | query · file[] |
Risposte
- 200 OK
POST/api/public/pdf-tools/mergeFusionar PDFs
Parametri
| files* | query · file[] |
Risposte
- 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.
Parametri
| metadata | query · string | |
| removeAll | query · boolean |
Body multipart/form-data
| file* | body · file |
Risposte
- 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 |
Risposte
- 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.
Parametri
| position | query · string | |
| format | query · string | |
| startNumber | query · integer | |
| fontSize | query · integer | |
| margin | query · number | |
| pages | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 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...
Parametri
| format | query · string | |
| dpi | query · integer | |
| pages | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
POST/api/public/pdf-tools/pdf-to-searchable-pdfPDF a PDF buscable (OCR)
Parametri
| pages | query · integer[] |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
POST/api/public/pdf-tools/splitExtraer páginas de un PDF
Parametri
| pages* | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
Plan y uso
GET/api/public/dashboardDashboard del plan/uso del grupo
Risposte
- 200 OK
GET/api/public/permissionsPermisos del grupo de la API key
Risposte
- 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.
Risposte
- 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.
Risposte
- 200 OK
GET/api/public/usage/historyHistorial de uso del grupo
Risposte
- 200 OK
GET/api/public/usage/remainingUso restante del mes
Risposte
- 200 OK
POST/api/public/usage/validate-operationValidar si una operación está permitida
Parametri
| operationType* | query · string |
Risposte
- 200 OK
Pseudoanonimización (API pública)
POST/api/public/pseudo/anonymizePseudoanonimizar documento
outputMode: RASTER_TEXT (defecto) o VECTOR. Devuelve verification, vaultStored y contextId.
Parametri
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| exclusionWords | query · string | |
| excludeOfficeOccurrences | query · string | |
| highQuality | query · boolean | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
GET/api/public/pseudo/config/defaultsDefaults de configuración
Risposte
- 200 OK
GET/api/public/pseudo/contextsContextos de la bóveda visibles para el usuario
Parametri
| projectId | query · string |
Risposte
- 200 OK
DELETE/api/public/pseudo/contexts/{contextId}Borrar un contexto de la bóveda
Parametri
| contextId* | path · string |
Risposte
- 200 OK
POST/api/public/pseudo/deanonymizeDesanonimizar con mapa o con contextId de la bóveda
Parametri
| X-Map-Password | header · string | |
| password | query · string | |
| highQuality | query · boolean | |
| contextId | query · string |
Body multipart/form-data
| file* | body · file | |
| map | body · file |
Risposte
- 200 OK
GET/api/public/pseudo/export/{contextId}Exportar mapa de contexto
Parametri
| contextId* | path · string | |
| format | query · string | |
| X-Map-Password | header · string | |
| password | query · string |
Risposte
- 200 OK
GET/api/public/pseudo/lookup/{contextId}Lookup valor original desde pseudo
Parametri
| contextId* | path · string | |
| value* | query · string |
Risposte
- 200 OK
POST/api/public/pseudo/previewPreview de pseudoanonimización
methodsByType: JSON {"<EntityType>":"<modo>"}; language: es|en|ca|gl|eu|ro.
Parametri
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string |
Body multipart/form-data
| file* | body · file |
Risposte
- 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.
Parametri
| profileId | query · string | |
| pseudoMethod | query · string | |
| seed | query · string | |
| projectId | query · string | |
| patterns | query · string | |
| wordSetIds | query · string | |
| wordSetMatchMode | query · string | |
| aiOptions | query · string | |
| customWords | query · string | |
| excludePatterns | query · string | |
| excludeWordSetIds | query · string | |
| excludeWordSetMatchMode | query · string | |
| highQuality | query · boolean | |
| selectedOriginals | query · string | |
| replacementOverrides | query · string | |
| redactionZones | query · string | |
| ocrPreprocess | query · boolean | |
| autoOcr | query · boolean | |
| outputMode | query · string | |
| methodsByType | query · string | |
| language | query · string | |
| page | query · integer |
Body multipart/form-data
| file* | body · file |
Risposte
- 200 OK
GET/api/public/pseudo/profilesListar perfiles de pseudoanonimización
Risposte
- 200 OK
GET/api/public/pseudo/profiles/{id}Detalle de perfil
Parametri
| id* | path · string |
Risposte
- 200 OK
Webhooks (API pública)
GET/api/public/webhooksWebhooks de esta API key
Risposte
- 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
Risposte
- 200 OK
PUT/api/public/webhooks/{id}Cambiar webhook
Parametri
| id* | path · integer |
Body application/json · WebhookRequest
Risposte
- 200 OK
DELETE/api/public/webhooks/{id}Borrar webhook
Parametri
| id* | path · integer |
Risposte
- 200 OK
GET/api/public/webhooks/{id}/deliveriesRegistro de entregas
Parametri
| id* | path · integer | |
| limit | query · integer |
Risposte
- 200 OK
POST/api/public/webhooks/{id}/rotate-secretNuevo secreto de firma
Parametri
| id* | path · integer |
Risposte
- 200 OK
POST/api/public/webhooks/{id}/testEnviar prueba
Parametri
| id* | path · integer |
Risposte
- 200 OK
Webhook
Un webhook avvisa il tuo sistema con un POST JSON firmato quando termina un batch in coda o una pubblicazione. La notifica non contiene mai nomi di file, titoli, testo o indirizzi email: solo identificativi, stati e, per i batch, un link di download da usare con la tua chiave API.
Eventi
| batch.completed | Un job in coda termina correttamente: jobId, pages e download.url (GET con X-API-Key). |
|---|---|
| batch.failed | Un job in coda non va a buon fine: jobId ed errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION o PROCESSING), mai il messaggio. |
| publication.completed | Una pubblicazione su un sistema di gestione dei fascicoli o su un portale va a buon fine: publicationId, destinazione, stato HTTP e SHA-256. |
| publication.failed | Una pubblicazione non va a buon fine, con gli stessi campi. |
| webhook.test | Solo quando premi «Invia test» o chiami /{id}/test; non è possibile sottoscriverlo. |
Registralo con la tua chiave API
POST /api/public/webhooks restituisce il secret (whsec_…) una sola volta; salvalo come variabile d'ambiente. Un webhook creato con una chiave API riceve solo gli eventi dell'utente di quella chiave; l'amministratore del gruppo può creare webhook per tutto il gruppo dal pannello dell'App. Inoltre: GET, PUT e DELETE /{id}, POST /{id}/rotate-secret, POST /{id}/test e GET /{id}/deliveries. Fino a 10 per gruppo; l'URL deve essere 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"]}'Verifica la firma
Ogni notifica contiene l'header X-Anonimatum-Signature: t=<unix>,v1=<hex>, dove v1 è un HMAC-SHA256 calcolato con il secret completo (compreso il prefisso whsec_) su «t.body». Vengono inviati anche X-Anonimatum-Event, X-Anonimatum-Event-Id e X-Anonimatum-Delivery.
- Leggi il body grezzo, senza analizzare né riformattare il JSON.
- Separa t e v1 dall'header e rifiuta la notifica se t si discosta di oltre 300 secondi dal tuo orologio.
- Calcola HMAC-SHA256(secret, t + "." + body) in esadecimale e confrontalo con v1 in tempo costante.
- Elimina i duplicati tramite X-Anonimatum-Event-Id: un nuovo tentativo ha lo stesso id.
- Rispondi 2xx entro 5 secondi ed elabora in seguito.
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 "", 204Qualsiasi risposta non 2xx (i reindirizzamenti non vengono seguiti) o più lenta di 5 secondi conta come errore. Dopo il primo tentativo, i nuovi tentativi avvengono a 1 min, 5 min, 30 min, 2 h e 6 h (6 tentativi in totale); il registro delle consegne mostra lo stato, il codice HTTP e il tentativo successivo.
Se preferisci non esporre un endpoint, interroga lo stato dei batch con GET /api/public/batch-jobs e scarica i job completati con GET /api/public/batch-jobs/{id}/output.
Connettore MCP per assistenti IA
Anonimatum espone la stessa API come server MCP (Model Context Protocol). L'assistente agisce come il tuo utente e il tuo gruppo dopo che lo hai autorizzato nell'App.
URL del server MCP
https://gateway.politeiasoft.com/anonimatum/mcp
- Claude
- Su claude.ai → Impostazioni → Connettori, aggiungi un connettore personalizzato con l'URL MCP e autorizza l'accesso nella schermata di consenso di Anonimatum.
- ChatGPT
- Su chatgpt.com → Impostazioni → Connettori, aggiungi l'URL MCP e completa l'autorizzazione OAuth. La disponibilità dei connettori personalizzati dipende dal tuo piano ChatGPT.
- Grok
- Su grok.com → Connettori, aggiungi l'URL MCP e autorizza l'accesso.
- Cursor, Claude Code e altri client MCP
- Se il client supporta OAuth con reindirizzamento locale, basta l'URL. Altrimenti usa l'autorizzazione manuale nell'App (Profilo → Connettori): ti fornisce un token e un mcp.json pronto da incollare.
Strumenti esposti
listar_operaciones— Elenca le operazioni disponibili per il tuo utente (lo stesso catalogo del riferimento, senza endpoint di amministrazione o interni).describir_operacion— Metodo, percorso, parametri e modalità di invio dei file per un'operazione.ejecutar_operacion— Esegue un'operazione; le risposte binarie includono un link di download monouso.iniciar_subida_fichero— Restituisce un URL di caricamento monouso, consigliato per documenti di grandi dimensioni (fino a 250 MB).subir_fichero— Carica un file di piccole dimensioni in Base64 con una sola chiamata.iniciar_subida_por_partes / subir_parte_fichero— Caricamento a blocchi per i client che non possono eseguire un POST diretto.
Le operazioni irreversibili (eliminare, deanonimizzare) richiedono la conferma esplicita dell'utente in quel turno. Con un piano scaduto l'assistente riceve PLAN_EXPIRED e deve riportare il messaggio senza riprovare. Puoi revocare ogni connessione da Profilo → Connettori.
Esempio di mcp.json (autorizzazione manuale)
{
"mcpServers": {
"anonimatum": {
"url": "https://gateway.politeiasoft.com/anonimatum/mcp",
"headers": { "Authorization": "Bearer <token de la concesión manual>" }
}
}
}SDK
Accesso su richiesta
SDK ufficiali per Python (sincrono e asyncio) e TypeScript/JavaScript (Node 18+) basati su questo stesso riferimento. Il repository è privato: chiedi l'accesso a Politeia tramite il modulo di contatto. Puoi anche generare un client a partire dal file OpenAPI.
Ti serve aiuto con l'integrazione?
Raccontaci il tuo caso (sistema di gestione documentale, volumi, formati) e ti aiuteremo a progettare il flusso.
