Saltar para o conteúdo principal

−20% no primeiro ano com o código Ver planos

Programadores · API pública 1.9.0

Integre o Anonimatum nos seus sistemas

API REST com contrato estável em /api/public/**, referência OpenAPI descarregável e conector MCP para assistentes de IA. O mesmo motor da App, na União Europeia.

Início rápido

Três passos: crie a chave de API, verifique-a e anonimize o seu primeiro documento.

  1. Crie uma chave de API na App: Perfil → Chaves de API → «Gerar chave de API». Copie-a de imediato: não volta a ser mostrada. Se não vir a secção, o seu plano não inclui acesso à API ou é o administrador do seu grupo que o gere.
  2. Guarde-a como variável de ambiente e verifique o plano do seu grupo com GET /api/public/plan.
  3. Envie o documento para POST /api/public/ai/anonymize com as opções de IA de que necessita. A resposta é o documento anonimizado no seu formato original.
export ANONIMATUM_API_KEY="tu_api_key"

# 1. Comprueba la clave: plan y cupo del grupo
curl -H "X-API-Key: $ANONIMATUM_API_KEY" \
  https://api.anonimatum.com/api/public/plan

# 2. Opciones de IA disponibles (rgpd, fechas, direcciones, qr…)
curl -H "X-API-Key: $ANONIMATUM_API_KEY" \
  https://api.anonimatum.com/api/public/ai/options

# 3. Primer anonimizado: PDF, Word, Excel o PowerPoint
curl -X POST https://api.anonimatum.com/api/public/ai/anonymize \
  -H "X-API-Key: $ANONIMATUM_API_KEY" \
  -F "file=@resolucion.pdf" \
  -F "aiOptions=rgpd,direcciones,qr" \
  -F "backgroundColor=black" \
  -F "textContent=none" \
  --output resolucion-anonimizada.pdf

Os parâmetros dos endpoints multipart são enviados como campos de formulário (-F). O consumo é descontado do plano do grupo a que a chave pertence.

Autenticação

X-API-Key
Cabeçalho para integrações máquina a máquina. Cada chave pertence a um utilizador e a um grupo: utiliza as respetivas permissões, plano e quota.
Authorization: Bearer
JWT da sessão do utilizador, o mesmo que a App utiliza. Útil se integrar o Anonimatum numa aplicação com início de sessão Politeia.
Isolamento
Um recurso de outro grupo devolve 404, nunca 403: a API não revela se existe.
Revogação
Revogue uma chave em Perfil → Chaves de API; deixa de funcionar de imediato. Nunca inclua chaves no código nem em repositórios.

Limites

Limites técnicos na versão 1.9.0 (por endereço IP ou por pedido):

300 / minPedidos a /api/public/** por IP.
60 / minAnonimizações (anonymize-patterns, -zones, -complete, -whitelist) por IP.
250 MBTamanho máximo de ficheiro por pedido.
20 MB · 100 000 linhas · 200 colunas · 50 folhasFolhas de cálculo por coluna (/api/public/sheets/**).

Cada operação desconta também páginas ou documentos do plano do grupo. Consulte o consumo com GET /api/public/usage/current e /usage/remaining, ou valide previamente com POST /usage/validate-operation.

Erros

Os erros utilizam o formato padrão { errorCode, message, status }. Os mais comuns:

400 INVALID_REQUESTParâmetro em falta ou mal formado, ficheiro vazio ou tipo não suportado.
401 UNAUTHORIZEDChave de API ou JWT em falta, ou a chave foi revogada.
403 PLAN_EXPIREDO plano do grupo expirou. Todas as operações que consomem quota são rejeitadas; continuam disponíveis a transferência dos resultados já produzidos e a desanonimização. Não repita o pedido.
403 INSUFFICIENT_PERMISSIONS / FORBIDDENA chave não tem permissão para executar essa operação ou o utilizador não tem um plano ativo.
404 NOT_FOUNDO recurso não existe ou pertence a outro grupo.
409 CONFLICTConflito com o estado atual (p. ex., nome duplicado).
413 SHEET_LIMIT_EXCEEDEDA folha de cálculo excede o tamanho, as linhas, as colunas ou as folhas permitidos.
415 SHEET_FORMAT_UNSUPPORTEDO ficheiro enviado para /sheets/** não é uma folha de cálculo (xlsx, xls, ods, csv).
429Quota mensal ou anual do plano esgotada (errorCode FORBIDDEN com o limite na mensagem) ou limite de pedidos por minuto (body { error, status }).
500 INTERNAL_ERRORErro inesperado. Se persistir, contacte-nos indicando a hora e o 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
}

Trate os casos com base em errorCode e não no texto da mensagem, que pode mudar ou ser traduzido.

Referência OpenAPI

Gerada a partir do backend 1.9.0 (grupo springdoc «public-api»), apenas rotas /api/public/**; sem endpoints internos nem de administração.

85 operações em 71 rotas · Descarregar OpenAPI 3.1 (JSON). Importe-a para o Postman, Insomnia, Bruno ou para o seu gerador de clientes OpenAPI. As descrições dos endpoints provêm do código-fonte da API e estão em espanhol.

Anonimización de Documentos

POST/api/public/documents/anonymize-by-idsAnonimizar PDF con Patrones y Wordsets por ID

Funcionalidad Principal:

Anonimiza documentos PDF utilizando patrones regex y wordsets existentes en la base de datos,

identificados por sus IDs, junto con palabras sueltas opcionales.

Ventajas de este Endpoint:

  • Reutiliza patrones y wordsets existentes
  • Mejor rendimiento al evitar recrear patrones
  • Gestión centralizada de patrones
  • Control de acceso basado en permisos de usuario

Casos de Uso:

  • Anonimización de contratos y documentos legales
  • Protección de datos médicos en informes
  • Ocultación de información comercial confidencial
  • Preparación de documentos para auditorías
  • Procesamiento automatizado con patrones predefinidos

Proceso de Anonimización:

  • El PDF se analiza página por página
  • Se cargan los patrones regex desde la base de datos usando los IDs
  • Se cargan las palabras de los wordsets usando los IDs
  • Se combinan con las palabras sueltas proporcionadas
  • Se aplican todos los patrones y palabras para detectar información sensible
  • Las coincidencias se marcan para anonimización
  • Se genera un PDF con las zonas sensibles ocultadas

Parâmetros

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

Corpo multipart/form-data

file*body · fileArchivo PDF a anonimizar

Respostas

  • 200 PDF anonimizado exitosamenteapplication/pdf
  • 400 Solicitud inválida - Verificar IDs de patrones/wordsetsapplication/json
  • 401 Token JWT o API Key inválidaapplication/json
  • 403 Sin permisos para acceder a los patrones/wordsets especificadosapplication/json
  • 404 Patrones o wordsets no encontradosapplication/json
POST/api/public/documents/anonymize-patternsAnonimizar PDF con Patrones Regex Directos

Funcionalidad Principal:

Anonimiza documentos PDF utilizando patrones regex personalizados para detectar y ocultar información sensible.

Casos de Uso:

  • Anonimización de contratos y documentos legales
  • Protección de datos médicos en informes
  • Ocultación de información comercial confidencial
  • Preparación de documentos para auditorías

Proceso de Anonimización:

  • El PDF se analiza página por página
  • Se aplican los patrones regex especificados
  • Las coincidencias se marcan para anonimización
  • Se genera un PDF con las zonas sensibles ocultadas

Patrones Regex Comunes:

  • DNI español: \d{8}[A-Z]
  • Email: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
  • Teléfono: \+?[0-9]{9,15}
  • Tarjeta crédito: \d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}

Parâmetros

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

Corpo multipart/form-data

file*body · fileArchivo PDF a anonimizar

Respostas

  • 200 PDF anonimizado exitosamenteapplication/pdf
  • 400 Solicitud inválidaapplication/json
  • 401 Token JWT o API Key inválidaapplication/json

Documentos clásicos (API pública)

POST/api/public/documents/anonymizeAnonimizar (compatibilidad)

Parâmetros

patternsquery · string
redactionZonesquery · string
highQualityquery · boolean

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

zones*query · string
highQualityquery · boolean
backgroundColorquery · string
textContentquery · string
censorHeightPadPxquery · integer
aiOptionsquery · string
customWordsquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
pageOrientationsquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
excludePatternsquery · string
excludeWordSetIdsquery · integer[]
excludeWordSetMatchModequery · string

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

redactionZones*query · string
highQualityquery · boolean

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

Corpo multipart/form-data

file*body · file

Respostas

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

Respostas

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

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

Parâmetros

id*path · integer

Respostas

  • 200 OK
GET/api/public/cases/{id}/downloadDescargar el expediente anonimizado en un ZIP

Documentos terminados e índice CSV/PDF sin datos personales; mapas pseudo solo como LEEME. 204 si no hay documentos terminados.

Parâmetros

id*path · integer

Respostas

  • 200 OK

Formatos (API pública)

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

Cabeceras, cuerpo y adjuntos. Sin cupo.

Corpo multipart/form-data

file*body · file

Respostas

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

Corpo multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Respostas

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

Cupo de herramientas PDF.

Parâmetros

dpiquery · integer
colorModequery · string

Corpo multipart/form-data

file*body · file

Respostas

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

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

Corpo multipart/form-data

file*body · file
optionsbody · FormatOptionsForm

Respostas

  • 200 OK

Gestión de Patrones

GET/api/public/patternsObtener Todos los Patrones

Biblioteca Completa de Patrones:

Lista paginada de todos los patrones regex disponibles para el usuario.

Información Incluida:

  • 🆔 ID único del patrón
  • Nombre y descripción
  • Expresión regex
  • Estadísticas de uso
  • Estado activo/inactivo
  • Fecha de creación y modificación

Parâmetros

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

Respostas

  • 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

Corpo application/json · PatternRequestDTO

Respostas

  • 200 OK
GET/api/public/patterns/{id}Obtener Patrón por ID

Detalles Completos del Patrón:

Obtiene toda la información de un patrón específico incluyendo metadatos y estadísticas.

Parâmetros

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

Respostas

  • 200 OK
PUT/api/public/patterns/{id}Actualizar Patrón Existente

Modificación de Patrón:

Permite actualizar un patrón existente modificando cualquiera de sus propiedades.

Parâmetros

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

Corpo application/json · PatternRequestDTO

Respostas

  • 200 OK
DELETE/api/public/patterns/{id}Eliminar Patrón

Eliminación de Patrón:

Elimina permanentemente un patrón de la biblioteca del usuario.

Advertencia:Esta acción no se puede deshacer.

Parâmetros

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

Respostas

  • 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

Respostas

  • 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

Corpo application/json · WordSetRequestDTO

Respostas

  • 200 OK
GET/api/public/wordsets/{id}Obtener Wordset por ID

Detalles Completos del Wordset:

Obtiene toda la información de un wordset incluyendo la lista completa de palabras.

Parâmetros

id*path · integer🆔 ID único del wordset

Respostas

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

Modificación de Wordset:

Permite actualizar un wordset existente incluyendo su lista de palabras.

Parâmetros

id*path · integer🆔 ID del wordset a actualizar

Corpo application/json · WordSetRequestDTO

Respostas

  • 200 OK
DELETE/api/public/wordsets/{id}Eliminar Wordset

Eliminación de Wordset:

Elimina permanentemente un wordset y todas sus palabras asociadas.

Advertencia:Esta acción no se puede deshacer.

Parâmetros

id*path · integer🆔 ID del wordset a eliminar

Respostas

  • 200 OK
GET/api/public/wordsets/{id}/wordsObtener Palabras de Wordset

Lista de Palabras:

Obtiene todas las palabras de un wordset específico con paginación.

Parâmetros

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

Respostas

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

Gestión de Palabras Individual:

Agrega una nueva palabra a un wordset existente.

Parâmetros

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

Respostas

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

Gestión de Palabras Individual:

Elimina una palabra específica de un wordset.

Parâmetros

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

Respostas

  • 200 OK

Hojas de cálculo por columnas (API pública)

POST/api/public/sheets/analyzeAnalizar las columnas de una hoja de cálculo (xlsx, xls, ods, csv)

Cabecera, muestra y tipo sugerido por columna. Sin cupo.

Parâmetros

hasHeaderquery · boolean
sampleRowsquery · integer
useAiquery · boolean

Corpo multipart/form-data

file*body · file

Respostas

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

Sin cupo.

Corpo multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Respostas

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

Corpo multipart/form-data

file*body · file
optionsbody · SheetOptionsForm

Respostas

  • 200 OK

Inteligencia Artificial

POST/api/public/ai/anonymizeAnonimizar documento con IA

Mismos parámetros que /ai/anonymize. Valida y registra uso de IA del grupo.

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

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

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

Respostas

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

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

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OK

Lotes (API pública)

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

Respostas

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

Parâmetros

config*query · string
configsquery · string
signatureHintsquery · string

Corpo multipart/form-data

files*body · file[]

Respostas

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

Parâmetros

id*path · integer

Respostas

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

Parâmetros

id*path · integer

Respostas

  • 200 OK
GET/api/public/batch-jobs/{id}/output-bundleDescargar bundle ZIP de un trabajo pseudo

El mapa nunca va en claro: con la cabecera X-Map-Password se incluye cifrado (<documento>_pseudo-map.enc, mismo formato que /pseudo/export?format=enc); sin ella, solo LEEME-mapa.txt.

Parâmetros

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

Respostas

  • 200 OK
GET/api/public/batch-jobs/download-completedDescargar ZIP de trabajos completados

X-Map-Password (opcional) cifra los mapas pseudo incluidos. Un trabajo cuyo mapa no está en la bóveda y llega sin contraseña se conserva en la cola para no perder el mapa.

Parâmetros

X-Map-Passwordheader · string

Respostas

  • 200 OK

Patrones de figura (API pública)

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

Respostas

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

Corpo application/json · CreateFigurePatternDTO

Respostas

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

Parâmetros

id*path · integer

Respostas

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

Parâmetros

id*path · integer

Corpo application/json · CreateFigurePatternDTO

Respostas

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

Parâmetros

id*path · integer

Respostas

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

Parâmetros

id*path · integer

Respostas

  • 200 OK

PDF tools (API pública)

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

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OKapplication/json
POST/api/public/pdf-tools/compressComprimir un PDF

Recomprime las imágenes embebidas a JPEG y reduce su resolución efectiva sin tocar el texto vectorial. level: low (calidad 0.85, máx. 200 ppp), medium (0.7, 150 ppp, por defecto) o high (0.5, 100 ppp). Si el resultado no es más pequeño se devuelve el original. Cabeceras X-Original-Size y X-Compressed-Size en bytes.

Parâmetros

levelquery · string

Corpo multipart/form-data

file*body · file

Respostas

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

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

files*query · file[]

Respostas

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

Parâmetros

files*query · file[]

Respostas

  • 200 OK
POST/api/public/pdf-tools/metadataEditar los metadatos de un PDF

metadata: JSON con los campos de /metadata/read; un campo null o vacío se borra. custom null conserva los personalizados y un objeto los sustituye (un valor null o vacío no se escribe). removeAll=true borra antes Info, XMP y personalizados. El XMP se elimina siempre para que no contradiga los valores nuevos.

Parâmetros

metadataquery · string
removeAllquery · boolean

Corpo multipart/form-data

file*body · file

Respostas

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

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OKapplication/json
POST/api/public/pdf-tools/page-numbersNumerar las páginas de un PDF

position: bottom-center (por defecto), bottom-right, bottom-left, top-center, top-right o top-left, sobre la página tal como se ve (respeta el giro). format: plantilla con {n} (número de página + startNumber - 1) y {total} (páginas del documento), p. ej. "Página {n} de {total}"; por defecto {n}. startNumber: número que corresponde a la página 1 (1). fontSize: 6–48 (11). margin: distancia al borde en puntos (24). pages: páginas a numerar ("2-10"); vacía = todas.

Parâmetros

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

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OK
POST/api/public/pdf-tools/pdf-to-imagesConvertir páginas de un PDF a imágenes

format: jpg (por defecto) o png. dpi: 72–300 (por defecto 150). pages: expresión opcional ("1-3,5"); vacía = todas. Una sola página devuelve la imagen (pagina-N.jpg); varias, un ZIP paginas-imagenes.zip con pagina-001.jpg, pagina-002.jpg...

Parâmetros

formatquery · string
dpiquery · integer
pagesquery · string

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

pagesquery · integer[]

Corpo multipart/form-data

file*body · file

Respostas

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

Parâmetros

pages*query · string

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OK

Plan y uso

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

Respostas

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

Respostas

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

Respostas

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

Respostas

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

Respostas

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

Respostas

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

Parâmetros

operationType*query · string

Respostas

  • 200 OK

Pseudoanonimización (API pública)

POST/api/public/pseudo/anonymizePseudoanonimizar documento

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

Parâmetros

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
exclusionWordsquery · string
excludeOfficeOccurrencesquery · string
highQualityquery · boolean
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · string

Corpo multipart/form-data

file*body · file

Respostas

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

Respostas

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

Parâmetros

projectIdquery · string

Respostas

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

Parâmetros

contextId*path · string

Respostas

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

Parâmetros

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

Corpo multipart/form-data

file*body · file
mapbody · file

Respostas

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

Parâmetros

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

Respostas

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

Parâmetros

contextId*path · string
value*query · string

Respostas

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

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

Parâmetros

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · string

Corpo multipart/form-data

file*body · file

Respostas

  • 200 OK
POST/api/public/pseudo/preview-documentPrevisualizar una página pseudoanonimizada (application/pdf)

Mismos parámetros que /anonymize más page (1-based). Sin bóveda ni cuota. Solo PDF/imagen.

Parâmetros

profileIdquery · string
pseudoMethodquery · string
seedquery · string
projectIdquery · string
patternsquery · string
wordSetIdsquery · string
wordSetMatchModequery · string
aiOptionsquery · string
customWordsquery · string
excludePatternsquery · string
excludeWordSetIdsquery · string
excludeWordSetMatchModequery · string
highQualityquery · boolean
selectedOriginalsquery · string
replacementOverridesquery · string
redactionZonesquery · string
ocrPreprocessquery · boolean
autoOcrquery · boolean
outputModequery · string
methodsByTypequery · string
languagequery · string
pagequery · integer

Corpo multipart/form-data

file*body · file

Respostas

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

Respostas

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

Parâmetros

id*path · string

Respostas

  • 200 OK

Webhooks (API pública)

GET/api/public/webhooksWebhooks de esta API key

Respostas

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

Corpo application/json · WebhookRequest

Respostas

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

Parâmetros

id*path · integer

Corpo application/json · WebhookRequest

Respostas

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

Parâmetros

id*path · integer

Respostas

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

Parâmetros

id*path · integer
limitquery · integer

Respostas

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

Parâmetros

id*path · integer

Respostas

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

Parâmetros

id*path · integer

Respostas

  • 200 OK

Webhooks

Um webhook notifica o seu sistema com um POST JSON assinado quando termina um lote em fila ou uma publicação. A notificação nunca inclui nomes de ficheiros, títulos, texto ou endereços de email: apenas identificadores, estados e, no caso dos lotes, uma ligação de transferência a utilizar com a sua chave de API.

Eventos

batch.completedUm trabalho em fila termina com êxito: jobId, pages e download.url (GET com X-API-Key).
batch.failedUm trabalho em fila falha: jobId e errorCategory (PLAN_EXPIRED, QUOTA, PERMISSION ou PROCESSING), nunca a mensagem.
publication.completedUma publicação num sistema de gestão de processos ou num portal é bem-sucedida: publicationId, destino, estado HTTP e SHA-256.
publication.failedUma publicação falha, com os mesmos campos.
webhook.testApenas quando prime «Enviar teste» ou chama /{id}/test; não é possível subscrevê-lo.

Registe-o com a sua chave de API

POST /api/public/webhooks devolve o segredo (whsec_…) uma única vez; guarde-o como variável de ambiente. Um webhook criado com uma chave de API só recebe os eventos do utilizador dessa chave; o administrador do grupo pode criar webhooks para todo o grupo a partir do painel da App. Também: GET, PUT e DELETE /{id}, POST /{id}/rotate-secret, POST /{id}/test e GET /{id}/deliveries. Até 10 por grupo; o URL tem de ser https.

curl -X POST https://api.anonimatum.com/api/public/webhooks \
  -H "X-API-Key: $ANONIMATUM_API_KEY" -H "Content-Type: application/json" \
  -d '{"url":"https://erp.ejemplo.es/anonimatum/webhook","events":["batch.completed","batch.failed"]}'

Verifique a assinatura

Cada notificação inclui o cabeçalho X-Anonimatum-Signature: t=<unix>,v1=<hex>, em que v1 é um HMAC-SHA256 calculado com o segredo completo (incluindo o prefixo whsec_) sobre «t.body». São também enviados X-Anonimatum-Event, X-Anonimatum-Event-Id e X-Anonimatum-Delivery.

  1. Leia o corpo em bruto, sem analisar nem reformatar o JSON.
  2. Separe t e v1 do cabeçalho e rejeite a notificação se t diferir mais de 300 segundos do seu relógio.
  3. Calcule HMAC-SHA256(secret, t + "." + body) em hexadecimal e compare-o com v1 em tempo constante.
  4. Elimine duplicados através de X-Anonimatum-Event-Id: uma nova tentativa tem o mesmo id.
  5. Responda 2xx em menos de 5 segundos e processe depois.

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

Qualquer resposta que não seja 2xx (os redirecionamentos não são seguidos) ou que demore mais de 5 segundos conta como falha. Após a primeira tentativa, as novas tentativas ocorrem a 1 min, 5 min, 30 min, 2 h e 6 h (6 tentativas no total); o registo de entregas mostra o estado, o código HTTP e a tentativa seguinte.

Se preferir não expor um endpoint, consulte periodicamente o estado dos lotes com GET /api/public/batch-jobs e descarregue os trabalhos concluídos com GET /api/public/batch-jobs/{id}/output.

Conector MCP para assistentes de IA

O Anonimatum expõe a mesma API como servidor MCP (Model Context Protocol). O assistente atua como o seu utilizador e o seu grupo depois de o autorizar na App.

URL do servidor MCP

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

Claude
Em claude.ai → Definições → Conectores, adicione um conector personalizado com o URL MCP e autorize o acesso no ecrã de consentimento do Anonimatum.
ChatGPT
Em chatgpt.com → Definições → Conectores, adicione o URL MCP e conclua a autorização OAuth. A disponibilidade de conectores personalizados depende do seu plano do ChatGPT.
Grok
Em grok.com → Conectores, adicione o URL MCP e autorize o acesso.
Cursor, Claude Code e outros clientes MCP
Se o cliente suportar OAuth com redirecionamento local, basta o URL. Caso contrário, utilize a autorização manual na App (Perfil → Conectores): obtém um token e um mcp.json pronto a colar.

Ferramentas disponibilizadas

  • listar_operaciones — Lista as operações disponíveis para o seu utilizador (o mesmo catálogo da referência, sem endpoints de administração nem internos).
  • describir_operacion — Método, caminho, parâmetros e forma de enviar ficheiros para uma operação.
  • ejecutar_operacion — Executa uma operação; as respostas binárias incluem uma ligação de transferência de utilização única.
  • iniciar_subida_fichero — Devolve um URL de carregamento de utilização única, recomendado para documentos grandes (até 250 MB).
  • subir_fichero — Carrega um ficheiro pequeno em Base64 numa única chamada.
  • iniciar_subida_por_partes / subir_parte_fichero — Carregamento por partes para clientes que não conseguem fazer um POST direto.

As operações irreversíveis (eliminar, desanonimizar) exigem a confirmação explícita do utilizador nesse turno. Com um plano expirado, o assistente recebe PLAN_EXPIRED e deve transmitir a mensagem sem repetir o pedido. Pode revogar cada ligação em Perfil → Conectores.

Exemplo de mcp.json (autorização manual)

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

SDK

Acesso mediante pedido

SDK oficiais para Python (síncrono e asyncio) e TypeScript/JavaScript (Node 18+) criados a partir desta mesma referência. O repositório é privado: peça acesso à Politeia através do formulário de contacto. Também pode gerar um cliente a partir do ficheiro OpenAPI.

Repositório do SDK (privado)

Precisa de ajuda com a sua integração?

Conte-nos o seu caso (sistema de gestão documental, volume, formatos) e ajudamo-lo a desenhar o fluxo.