Webhooks Eventos en tiempo real
Reciba notificaciones en tiempo real para todos los eventos. Documentos procesados, OCR completado, clasificación realizada.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Confianza de empresas líderes en todo el mundo
OEM PARTNERSHIP
Sole official DMS partner for QNAP and ASUSTOR.
Dedicated landing pages, direct integration, data stays on your NAS.
QNAP
Sole official DMS partner for QNAP NAS — documents stay on your device, AI runs through PaperOffice.
MoreASUSTOR
Listed by ASUSTOR as “the DMS for ASUSTOR NAS” — sole official partner.
More22 tipos de eventos, agrupados por entidad
Suscríbase a eventos individuales o use el comodín * para todo.
Documentos
14-
documento.subidoNuevo documento subido a un espacio de trabajo -
documento.creadoAlias para document.uploaded (compatibilidad) -
documento.procesadoPipeline OCR/<a href="/es/ai-idp-procesamiento-inteligente-documentos/">AI-IDP</a> finalizado con éxito -
documento.editadoMetadatos, etiquetas o contenido actualizados -
documento.eliminadoDocumento movido a la papelera -
documento.restauradoDocumento recuperado de la papelera -
documento.movidoDocumento movido entre espacios de trabajo -
documento.version_creadaNueva versión añadida a un documento existente -
documento.ciclo_de_vida_cambiadoEstado de retención/archivo cambiado -
documento.comentario_añadidoComentario publicado en un documento -
documento.nota_añadidaNota interna adjunta -
documento.etiqueta_añadidaEtiqueta asignada a un documento -
documento.retención_legal_aplicadaRetención legal activada (inmutable) -
documento.retención_legal_liberadaRetención legal liberada
Trabajos
3-
trabajo.completadoTrabajo asíncrono finalizado con éxito -
trabajo.fallidoTrabajo asíncrono fallido terminalmente -
trabajo.progresoActualización de progreso durante trabajos de larga duración
Workspaces
2-
espacio_de_trabajo.compartidoWorkspace compartido con un usuario o equipo -
espacio_de_trabajo.no_compartidoAcceso a Workspace revocado
Tareas
3-
tarea.creadaNueva tarea creada -
tarea.completadaTarea marcada como completada -
tarea.vencidaTarea superó su fecha de vencimiento
Webhooks en acción
Vea cómo funciona Webhooks de PaperOffice en la práctica — en vídeo.
Cada entrega sigue el mismo esquema
Cuerpo JSON predecible, cinco encabezados HTTP firmados, marcas de tiempo UTC ISO-8601.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6c9f1d4e7b2a5c8f1",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": {
"pofid": "doc_01HZY8K3M7P2Q9R5T1V6W4X2Y8",
"workspace_id": 17,
"filename": "invoice-2026-04-17.pdf",
"mime_type": "application/pdf",
"size_bytes": 284521,
"processing_result": {
"ocr_done": true,
"classification": "invoice",
"confidence": 0.98
}
}
} Content-Type application/json Siempre JSON, codificado en UTF-8 User-Agent PaperOffice-Webhook/1.0 Identificador fijo para listas permitidas de firewall X-PaperOffice-Event documento.procesado Tipo de evento que se está entregando X-PaperOffice-Event-ID a3b7f9c1… ID único de 128 bits. Use para idempotencia. X-PaperOffice-Subscription-ID 42 ID de la suscripción que recibe el evento X-PaperOffice-Signature sha256=… HMAC-SHA256 del cuerpo crudo, codificado en hexadecimal Verifique cada entrega con HMAC-SHA256
Calcule HMAC-SHA256 sobre el cuerpo crudo de la solicitud usando su secreto compartido, luego compare contra X-PaperOffice-Signature usando una comparación de tiempo constante (hash_equals, crypto.timingSafeEqual).
import crypto from 'crypto';
const app = express();
const WEBHOOK_SECRET = process.env.PAPEROFFICE_WEBHOOK_SECRET;
app.post('/webhooks/paperoffice', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.header('X-PaperOffice-Signature'); // "sha256=..."
const eventId = req.header('X-PaperOffice-Event-ID');
const eventType = req.header('X-PaperOffice-Event');
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('invalid signature');
}
const event = JSON.parse(req.body.toString());
// eventId als Idempotency-Key speichern -> gleiche ID nicht zweimal verarbeiten
console.log(eventType, event.data);
res.status(200).send('ok');
}); Tres estrategias de reintento, hasta 10 intentos
Elija una política por suscripción. Cada intento se registra con código de estado, cuerpo de respuesta y temporización.
exponential Exponencial (predeterminado)
El retroceso se duplica después de cada intento: 30s, 60s, 120s, 240s, 480s…
linear Lineal
Crecimiento fijo: 30s, 60s, 90s, 120s, 150s…
none Ninguno
Disparar y olvidar. Sin reintentos incluso en errores 5xx. Útil para ganchos de prueba.
9 endpoints bajo /latest/webhooks/
CRUD completo para suscripciones, registros de entrega, suscripciones de trabajos únicos y un endpoint de prueba; todo con OAuth2 Bearer y listo para MCP.
/webhooks/subscribe Crear una nueva suscripción (ilimitada por cuenta) po_webhooks_subscribe /webhooks/list Listar todas las suscripciones de la cuenta po_webhooks_list /webhooks/update Actualizar una suscripción existente po_webhooks_update /webhooks/delete Eliminación suave de una suscripción (el registro de entrega se conserva) po_webhooks_delete /webhooks/deliveries Recuperar el registro de entrega con filtros (tipo_de_evento, solo_exito) po_webhooks_deliveries /webhooks/test Enviar un evento test.ping para verificar la entrega po_webhooks_test /webhooks/subscribe-job Webhook único para un job_id específico po_webhooks_subscribe_job /webhooks/job-subscriptions Listar suscripciones limitadas a trabajos po_webhooks_job_subscriptions /webhooks/info Eventos disponibles, endpoints, políticas de reintento, información de firma po_webhooks_info Endurecido por diseño
HMAC-SHA256
Cada carga útil está firmada con su secreto. La comparación de tiempo constante es obligatoria.
Protección SSRF
IPs privadas/internas, localhost y endpoints de metadatos en la nube bloqueados en la suscripción y el despacho.
Seguro contra rebind de DNS
IP revalidada en el momento del despacho, fijada mediante CURLOPT_RESOLVE.
HTTPS fuertemente preferido
Se aceptan http y https. Se recomienda HTTPS para producción.
Idempotencia de Event-ID
Cada entrega lleva un X-PaperOffice-Event-ID único. Deduplique en su lado.
Registro de auditoría completo
Todos los intentos registrados: código de estado, cuerpo de respuesta, tiempo, mensaje de error.
Suscripciones ilimitadas, comportamiento de entrega totalmente configurable
Disponible en todos los planes. Pago por uso: 1 crédito por entrega exitosa (HTTP 2xx). Los reintentos, eventos de prueba y entregas fallidas son gratuitos.
¿Recibir eventos?
Configure sus webhooks.