Vai al contenuto principale

−20% il primo anno con il codice Vedi i piani

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.

  1. 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.
  2. Salvala come variabile d'ambiente e verifica il piano del tuo gruppo con GET /api/public/plan.
  3. 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.pdf

I 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 / minRichieste a /api/public/** per IP.
60 / minAnonimizzazioni (anonymize-patterns, -zones, -complete, -whitelist) per IP.
250 MBDimensione massima del file per richiesta.
20 MB · 100.000 righe · 200 colonne · 50 fogliFogli 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_REQUESTParametro mancante o non valido, file vuoto o tipo non supportato.
401 UNAUTHORIZEDChiave API o JWT mancante, oppure la chiave è stata revocata.
403 PLAN_EXPIREDIl 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 / FORBIDDENLa chiave non è autorizzata a eseguire quell'operazione oppure l'utente non ha un piano attivo.
404 NOT_FOUNDLa risorsa non esiste o appartiene a un altro gruppo.
409 CONFLICTConflitto con lo stato attuale (ad es. nome duplicato).
413 SHEET_LIMIT_EXCEEDEDIl foglio di calcolo supera la dimensione, le righe, le colonne o i fogli consentiti.
415 SHEET_FORMAT_UNSUPPORTEDIl file inviato a /sheets/** non è un foglio di calcolo (xlsx, xls, ods, csv).
429Quota mensile o annuale del piano esaurita (errorCode FORBIDDEN con il limite nel messaggio) oppure limite di richieste al minuto (body { error, status }).
500 INTERNAL_ERRORErrore 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

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

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

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

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

patternsquery · string
redactionZonesquery · string
highQualityquery · boolean

Body multipart/form-data

file*body · file

Risposte

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

Parametri

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

Body multipart/form-data

file*body · file

Risposte

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

Parametri

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

Risposte

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

Parametri

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

Risposte

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

Parametri

redactionZones*query · string
highQualityquery · boolean

Body multipart/form-data

file*body · file

Risposte

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

Parametri

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

Risposte

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

Parametri

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

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
optionsbody · FormatOptionsForm

Risposte

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

Cupo de herramientas PDF.

Parametri

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

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

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

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

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

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

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

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

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

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

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

Body multipart/form-data

file*body · file
mapbody · file

Risposte

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

Parametri

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

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

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

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

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
limitquery · 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.completedUn job in coda termina correttamente: jobId, pages e download.url (GET con X-API-Key).
batch.failedUn job in coda non va a buon fine: jobId ed errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION o PROCESSING), mai il messaggio.
publication.completedUna pubblicazione su un sistema di gestione dei fascicoli o su un portale va a buon fine: publicationId, destinazione, stato HTTP e SHA-256.
publication.failedUna pubblicazione non va a buon fine, con gli stessi campi.
webhook.testSolo 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.

  1. Leggi il body grezzo, senza analizzare né riformattare il JSON.
  2. Separa t e v1 dall'header e rifiuta la notifica se t si discosta di oltre 300 secondi dal tuo orologio.
  3. Calcola HMAC-SHA256(secret, t + "." + body) in esadecimale e confrontalo con v1 in tempo costante.
  4. Elimina i duplicati tramite X-Anonimatum-Event-Id: un nuovo tentativo ha lo stesso id.
  5. 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 "", 204

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

Repository dell'SDK (privato)

Ti serve aiuto con l'integrazione?

Raccontaci il tuo caso (sistema di gestione documentale, volumi, formati) e ti aiuteremo a progettare il flusso.