Obtener el historial de un documento

GET
/api/v1/document/{frmxId}/history/json

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

documentEventTypeSignificado
DOCUMENT_CREATEDSe creó el documento
SIGNATURE_INVITATIONSe envió una invitación para firma
NON_SIGNER_RECIPENT_FLOW_STARTEDSe notificó a un destinatario no firmante
FLOW_STARTEDSe inició el proceso de firma
FLOW_EXPIREDEl proceso de firma llegó a su fecha de expiración
DOCUMENT_SIGNEDSe firmó el documento
DOCUMENT_STAMPEDSe selló el documento
DOCUMENT_COMPLETEDSe completó el documento
REJECTED_DOCUMENTUn firmante rechazó el documento
DOCUMENT_BLOCKED_FOR_SIGNATURESe bloqueó el documento para firma
DOCUMENT_UNBLOCKED_FOR_SIGNATURESe desbloqueó el documento para firma
DOCUMENT_FLATTENEDSe aplanaron los campos de formulario del documento
DOCUMENT_TRANSFERREDSe transfirió el documento a otro usuario
IDENTITY_VERIFICATION_PASSEDUn firmante pasó la verificación de identidad
IDENTITY_VERIFICATION_FAILEDUn firmante no pasó la verificación de identidad
EMAIL_DELIVEREDSe entregó un correo
EMAIL_OPENEDEl destinatario abrió el correo
EMAIL_CLICKEDEl destinatario hizo clic en el correo
EMAIL_FAILEDFalló una entrega de correo
EMAIL_COMPLAINEDEl destinatario reportó el correo como spam
WHATSAPP_SENTSe envió un mensaje de WhatsApp
WHATSAPP_DELIVEREDSe entregó un mensaje de WhatsApp
WHATSAPP_READSe 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.

EventoLlaves
DOCUMENT_CREATEDcreatedBy
SIGNATURE_INVITATION y los demás eventos de invitaciónsentTo
FLOW_STARTEDordered, remindEvery, lastSignatureCount, expirationDate, lockOnExpiration
FLOW_EXPIREDexpirationDate, lockOnExpiration
DOCUMENT_SIGNEDsigner, ipAddress, y boxData / boxContactData cuando el sticker los trae
REJECTED_DOCUMENTrejector, rejectReason
DOCUMENT_UNBLOCKED_FOR_SIGNATUREcomments
DOCUMENT_TRANSFERREDoriginalOwnerUserId, newOwnerUserId
IDENTITY_VERIFICATION_PASSED / _FAILEDsignerData, 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.

Authorization<token>

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óncadenaFirmada
GETLa URI completa incluyendo el query string, exactamente como se envía
POST con JSONEl cuerpo JSON, re-serializado compacto (sin espacios ni salto de línea final)
POST multipartEl SHA-256 en Base64 del archivo, que además se manda en el header Content-SHA256

Dos detalles que conviene resolverlos desde el principio:

  1. En GET, la URI se firma tal como se envía, así que el orden y el encoding de los parámetros importan.
  2. 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

frmxId*string

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  }]