Obtener el historial de un documento
El historial de un documento contiene información de la generación de un documento, envío, seguimiento y firmas. Este endpoint te lo devuelve como un arreglo de eventos, del más reciente al más viejo.
Sirve para mostrar el avance en tu propia interfaz sin esperar a los webhooks. Si lo quieres
como PDF para entregárselo a alguien, usa
GET /api/v1/document/{frmxId}/history/pdf.
Los eventos
documentEventType | Significado |
|---|---|
DOCUMENT_CREATED | Se creó el documento |
SIGNATURE_INVITATION | Se envió una invitación para firma |
NON_SIGNER_RECIPENT_FLOW_STARTED | Se notificó a un destinatario no firmante |
FLOW_STARTED | Se inició el proceso de firma |
FLOW_EXPIRED | El proceso de firma llegó a su fecha de expiración |
DOCUMENT_SIGNED | Se firmó el documento |
DOCUMENT_STAMPED | Se selló el documento |
DOCUMENT_COMPLETED | Se completó el documento |
REJECTED_DOCUMENT | Un firmante rechazó el documento |
DOCUMENT_BLOCKED_FOR_SIGNATURE | Se bloqueó el documento para firma |
DOCUMENT_UNBLOCKED_FOR_SIGNATURE | Se desbloqueó el documento para firma |
DOCUMENT_FLATTENED | Se aplanaron los campos de formulario del documento |
DOCUMENT_TRANSFERRED | Se transfirió el documento a otro usuario |
IDENTITY_VERIFICATION_PASSED | Un firmante pasó la verificación de identidad |
IDENTITY_VERIFICATION_FAILED | Un firmante no pasó la verificación de identidad |
EMAIL_DELIVERED | Se entregó un correo |
EMAIL_OPENED | El destinatario abrió el correo |
EMAIL_CLICKED | El destinatario hizo clic en el correo |
EMAIL_FAILED | Falló una entrega de correo |
EMAIL_COMPLAINED | El destinatario reportó el correo como spam |
WHATSAPP_SENT | Se envió un mensaje de WhatsApp |
WHATSAPP_DELIVERED | Se entregó un mensaje de WhatsApp |
WHATSAPP_READ | Se leyó un mensaje de WhatsApp |
Compara contra estas cadenas tal como están escritas, NON_SIGNER_RECIPENT_FLOW_STARTED
incluida.
Qué trae jsonMetaData
jsonMetaData es una cadena con JSON dentro, no un objeto JSON: parséala antes de leerla.
Sus llaves dependen del evento, y viene en null para los eventos que no llevan nada extra.
| Evento | Llaves |
|---|---|
DOCUMENT_CREATED | createdBy |
SIGNATURE_INVITATION y los demás eventos de invitación | sentTo |
FLOW_STARTED | ordered, remindEvery, lastSignatureCount, expirationDate, lockOnExpiration |
FLOW_EXPIRED | expirationDate, lockOnExpiration |
DOCUMENT_SIGNED | signer, ipAddress, y boxData / boxContactData cuando el sticker los trae |
REJECTED_DOCUMENT | rejector, rejectReason |
DOCUMENT_UNBLOCKED_FOR_SIGNATURE | comments |
DOCUMENT_TRANSFERRED | originalOwnerUserId, newOwnerUserId |
IDENTITY_VERIFICATION_PASSED / _FAILED | signerData, workflowId, y firstName, lastName, curp cuando se leyó la identificación |
EMAIL_* | threadId, recipient |
El threadId de los eventos de correo es el mismo id que le pasas a los endpoints de correos
certificados, así que puedes pasar de «este correo se abrió» al mensaje mismo.
Autenticación
signmage Cada petición lleva Authorization: signmage {webId}:{firma}, donde firma es el Base64 de
HMAC-SHA256(apiKey, cadenaFirmada).
Qué va dentro de cadenaFirmada depende de la petición:
| Petición | cadenaFirmada |
|---|---|
GET | La URI completa incluyendo el query string, exactamente como se envía |
POST con JSON | El cuerpo JSON, re-serializado compacto (sin espacios ni salto de línea final) |
POST multipart | El SHA-256 en Base64 del archivo, que además se manda en el header Content-SHA256 |
Dos detalles que conviene resolverlos desde el principio:
- En
GET, la URI se firma tal como se envía, así que el orden y el encoding de los parámetros importan. - En
POST, la comparación se hace contra tu JSON re-serializado en forma compacta. Manda JSON compacto y canónico para que las firmas coincidan.
Una firma que no coincide devuelve 401 con el cuerpo vacío. Como la misma respuesta cubre un
web ID desconocido, una llave inactiva y una firma que no coincide, revisa las tres cosas al
diagnosticar.
En: header
Parámetros de ruta
El id del documento.
Cuerpo de la respuesta
application/json
curl -X GET "https://example.com/api/v1/document/string/history/json"[ { "documentEventType": "DOCUMENT_STAMPED", "jsonMetaData": null, "eventDate": 1711128805000, "createdAt": 1711128805000 }, { "documentEventType": "EMAIL_OPENED", "jsonMetaData": "{\"threadId\":\"<[email protected]>\",\"recipient\":\"[email protected]\"}", "eventDate": 1711128512000, "createdAt": 1711128512000 }, { "documentEventType": "DOCUMENT_CREATED", "jsonMetaData": "{\"createdBy\":\"[email protected]\"}", "eventDate": 1711128400000, "createdAt": 1711128400000 }]