Eventos de webhook
Referência de todos os tipos de evento de webhook e seus payloads.
Estrutura do payload
Todos os eventos de webhook têm a mesma estrutura:
{
"event": "DOCUMENT_COMPLETED",
"payload": {
// Dados do documento ou modelo, com os destinatários
},
"createdAt": "2024-04-22T11:52:18.277Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}Campos de primeiro nível
| Campo | Tipo | Descrição |
|---|---|---|
event | string | Identificador do evento (ex.: DOCUMENT_CREATED) |
payload | object | Objeto documento, com metadados e destinatários |
createdAt | datetime | Quando o evento foi criado |
webhookEndpoint | string | A URL que recebe este webhook |
Campos do payload
| Campo | Tipo | Descrição |
|---|---|---|
id | number | ID numérico legado (v1) do documento ou modelo |
envelopeId | string | Identificador canônico da v2 (envelope_ + 16 caracteres) |
externalId | string? | Identificador externo da integração |
userId | number | ID do usuário dono |
authOptions | object? | Opções de autenticação do documento |
formValues | object? | Valores de formulário do PDF associados ao documento |
title | string | Título do documento ou modelo |
status | string | Status atual: DRAFT, PENDING, COMPLETED, REJECTED, CANCELLED |
visibility | string | Visibilidade do documento |
createdAt | datetime | Data/hora de criação do documento |
updatedAt | datetime | Data/hora da última alteração |
completedAt | datetime? | Data/hora da conclusão (quando todos assinaram) |
deletedAt | datetime? | Data/hora da exclusão |
teamId | number? | ID da equipe, se o documento pertencer a uma equipe |
templateId | number? | ID do modelo, se criado a partir de um modelo |
source | string | Origem: DOCUMENT, TEMPLATE ou TEMPLATE_DIRECT_LINK |
documentMeta | object? | Metadados do documento, podem ser nulos (assunto, mensagem, opções de assinatura) |
recipients | array | Lista de destinatários |
Recipient | array | Lista de destinatários (legado, igual a recipients) |
Campos de metadados do documento
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do registro de metadados |
subject | string? | Assunto do e-mail |
message | string? | Corpo do e-mail |
timezone | string | Fuso horário das datas |
dateFormat | string | Formato de data |
redirectUrl | string? | URL de redirecionamento após assinar |
signingOrder | string | PARALLEL or SEQUENTIAL |
allowDictateNextSigner | boolean | Se o signatário pode escolher o próximo |
typedSignatureEnabled | boolean | Se a assinatura digitada é permitida |
uploadSignatureEnabled | boolean | Se a assinatura por imagem é permitida |
drawSignatureEnabled | boolean | Se a assinatura desenhada é permitida |
language | string | Código do idioma do documento |
distributionMethod | string | Forma de distribuição do documento |
emailSettings | object? | Configurações de e-mail deste documento |
Campos do destinatário
| Campo | Tipo | Descrição |
|---|---|---|
id | number | ID do destinatário |
envelopeId | string | ID canônico do envelope |
documentId | number? | ID legado do documento; nulo em modelos |
templateId | number? | ID legado do modelo; nulo em documentos |
email | string | E-mail do destinatário |
name | string | Nome do destinatário |
token | string | Token único de assinatura |
documentDeletedAt | datetime? | Quando o destinatário ocultou o documento |
expiresAt | datetime? | Quando o link de assinatura expira |
expirationNotifiedAt | datetime? | Quando o aviso de expiração foi enviado |
signedAt | datetime? | Quando o destinatário assinou |
authOptions | object? | Opções de autenticação do destinatário |
role | string | Papel: SIGNER, VIEWER, APPROVER, ASSISTANT, CC |
signingOrder | number? | Posição na ordem de assinatura |
readStatus | string | NOT_OPENED or OPENED |
signingStatus | string | NOT_SIGNED, SIGNED, or REJECTED |
sendStatus | string | NOT_SENT or SENT |
rejectionReason | string? | Motivo, se o destinatário recusou |
Use recipient.envelopeId como vínculo confiável com o envelope. Os campos legados documentId e templateId dependem do tipo do envelope, então um deles sempre vem nulo.
Eventos do ciclo de vida do documento
Estes eventos acompanham o documento ao longo do ciclo de vida.
document.created
Disparado quando um novo documento é criado.
Nome do evento: DOCUMENT_CREATED
{
"event": "DOCUMENT_CREATED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"externalId": null,
"userId": 1,
"authOptions": null,
"formValues": null,
"visibility": "EVERYONE",
"title": "contrato.pdf",
"status": "DRAFT",
"createdAt": "2024-04-22T11:44:43.341Z",
"updatedAt": "2024-04-22T11:44:43.341Z",
"completedAt": null,
"deletedAt": null,
"teamId": null,
"templateId": null,
"source": "DOCUMENT",
"documentMeta": {
"id": "doc_meta_123",
"subject": "Please sign this document",
"message": "Hello, please review and sign this document.",
"timezone": "Etc/UTC",
"dateFormat": "yyyy-MM-dd hh:mm a",
"redirectUrl": null,
"signingOrder": "PARALLEL",
"allowDictateNextSigner": false,
"typedSignatureEnabled": true,
"uploadSignatureEnabled": true,
"drawSignatureEnabled": true,
"language": "en",
"distributionMethod": "EMAIL",
"emailSettings": null
},
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": null,
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "NOT_SENT"
}
],
"Recipient": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": null,
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "NOT_SENT"
}
]
},
"createdAt": "2024-04-22T11:44:44.779Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.sent
Disparado quando um documento é enviado aos destinatários para assinatura.
Nome do evento: DOCUMENT_SENT
O status do documento muda para PENDING e os destinatários passam a ter sendStatus: "SENT".
{
"event": "DOCUMENT_SENT",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"externalId": null,
"userId": 1,
"authOptions": null,
"formValues": null,
"visibility": "EVERYONE",
"title": "contrato.pdf",
"status": "PENDING",
"createdAt": "2024-04-22T11:44:43.341Z",
"updatedAt": "2024-04-22T11:48:07.569Z",
"completedAt": null,
"deletedAt": null,
"teamId": null,
"templateId": null,
"source": "DOCUMENT",
"documentMeta": {
"id": "doc_meta_123",
"subject": "Please sign this document",
"message": "Hello, please review and sign this document.",
"timezone": "Etc/UTC",
"dateFormat": "yyyy-MM-dd hh:mm a",
"redirectUrl": null,
"signingOrder": "PARALLEL",
"allowDictateNextSigner": false,
"typedSignatureEnabled": true,
"uploadSignatureEnabled": true,
"drawSignatureEnabled": true,
"language": "en",
"distributionMethod": "EMAIL",
"emailSettings": null
},
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": null,
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
],
"Recipient": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": null,
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:48:07.945Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.opened
Disparado quando um destinatário abre o documento pela primeira vez.
Nome do evento: DOCUMENT_OPENED
O readStatus do destinatário muda para OPENED.
{
"event": "DOCUMENT_OPENED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "PENDING",
"title": "contrato.pdf",
"source": "DOCUMENT",
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"readStatus": "OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:50:26.174Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.signed
Disparado quando um destinatário assina o documento. Dispara a cada assinatura, e não só quando o documento é concluído.
Nome do evento: DOCUMENT_SIGNED
O signingStatus do destinatário muda para SIGNED e signedAt é preenchido.
{
"event": "DOCUMENT_SIGNED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "COMPLETED",
"title": "contrato.pdf",
"source": "DOCUMENT",
"completedAt": "2024-04-22T11:52:05.707Z",
"recipients": [
{
"id": 51,
"envelopeId": "envelope_abcdefhiklmnorst",
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"signedAt": "2024-04-22T11:52:05.688Z",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:52:18.577Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.recipient.completed
Disparado quando um destinatário conclui a ação exigida (assinar, aprovar ou visualizar). Útil para acompanhar o progresso de cada destinatário em documentos com vários destinatários.
Nome do evento: DOCUMENT_RECIPIENT_COMPLETED
{
"event": "DOCUMENT_RECIPIENT_COMPLETED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "PENDING",
"title": "contrato.pdf",
"source": "DOCUMENT",
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"signedAt": "2024-04-22T11:52:05.688Z",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:52:06.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.completed
Disparado quando todos os destinatários concluem as ações exigidas.
Nome do evento: DOCUMENT_COMPLETED
O status do documento muda para COMPLETED e completedAt é preenchido.
{
"event": "DOCUMENT_COMPLETED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"externalId": null,
"userId": 1,
"authOptions": null,
"formValues": null,
"visibility": "EVERYONE",
"title": "contrato.pdf",
"status": "COMPLETED",
"createdAt": "2024-04-22T11:44:43.341Z",
"updatedAt": "2024-04-22T11:52:05.708Z",
"completedAt": "2024-04-22T11:52:05.707Z",
"deletedAt": null,
"teamId": null,
"templateId": null,
"source": "DOCUMENT",
"documentMeta": {
"id": "doc_meta_123",
"subject": "Please sign this document",
"message": "Hello, please review and sign this document.",
"timezone": "Etc/UTC",
"dateFormat": "yyyy-MM-dd hh:mm a",
"redirectUrl": null,
"signingOrder": "PARALLEL",
"allowDictateNextSigner": false,
"typedSignatureEnabled": true,
"uploadSignatureEnabled": true,
"drawSignatureEnabled": true,
"language": "en",
"distributionMethod": "EMAIL",
"emailSettings": null
},
"recipients": [
{
"id": 50,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "revisor@exemplo.com",
"name": "Maria Souza",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": "2024-04-22T11:51:10.055Z",
"authOptions": {
"accessAuth": null,
"actionAuth": null
},
"signingOrder": 1,
"rejectionReason": null,
"role": "VIEWER",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
},
{
"id": 51,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "HkrptwS42ZBXdRKj1TyUo",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": "2024-04-22T11:52:05.688Z",
"authOptions": {
"accessAuth": null,
"actionAuth": null
},
"signingOrder": 2,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
}
],
"Recipient": [
{
"id": 50,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "revisor@exemplo.com",
"name": "Maria Souza",
"token": "vbT8hi3jKQmrFP_LN1WcS",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": "2024-04-22T11:51:10.055Z",
"authOptions": {
"accessAuth": null,
"actionAuth": null
},
"signingOrder": 1,
"rejectionReason": null,
"role": "VIEWER",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
},
{
"id": 51,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "HkrptwS42ZBXdRKj1TyUo",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": "2024-04-22T11:52:05.688Z",
"authOptions": {
"accessAuth": null,
"actionAuth": null
},
"signingOrder": 2,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "OPENED",
"signingStatus": "SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:52:18.277Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.rejected
Disparado quando um destinatário recusa o documento.
Nome do evento: DOCUMENT_REJECTED
O signingStatus do destinatário muda para REJECTED e rejectionReason traz o motivo.
{
"event": "DOCUMENT_REJECTED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "PENDING",
"title": "contrato.pdf",
"source": "DOCUMENT",
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"signedAt": "2024-04-22T11:48:07.569Z",
"rejectionReason": "I do not agree with the terms",
"readStatus": "OPENED",
"signingStatus": "REJECTED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:48:07.945Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.cancelled
Disparado quando um documento pendente é cancelado com POST /envelope/cancel, ou quando o dono ou um membro da equipe exclui um documento. Excluir um rascunho ou documento pendente o apaga de vez; excluir um documento concluído faz uma exclusão lógica.
Este evento não é disparado quando um destinatário oculta o documento da própria caixa de entrada.
Nome do evento: DOCUMENT_CANCELLED
{
"event": "DOCUMENT_CANCELLED",
"payload": {
"id": 7,
"envelopeId": "envelope_abcdefhiklmnorst",
"externalId": null,
"userId": 3,
"authOptions": null,
"formValues": null,
"visibility": "EVERYONE",
"title": "contrato.pdf",
"status": "PENDING",
"createdAt": "2025-01-27T11:02:14.393Z",
"updatedAt": "2025-01-27T11:03:16.387Z",
"completedAt": null,
"deletedAt": null,
"teamId": null,
"templateId": null,
"source": "DOCUMENT",
"documentMeta": {
"id": "cm6exvn96006ji02rqvzjvwoy",
"subject": "",
"message": "",
"timezone": "Etc/UTC",
"dateFormat": "yyyy-MM-dd hh:mm a",
"redirectUrl": "",
"signingOrder": "PARALLEL",
"allowDictateNextSigner": false,
"typedSignatureEnabled": true,
"uploadSignatureEnabled": true,
"drawSignatureEnabled": true,
"language": "en",
"distributionMethod": "EMAIL",
"emailSettings": null
},
"recipients": [
{
"id": 7,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 7,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "XkKx1HCs6Znm2UBJA2j6o",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": { "accessAuth": null, "actionAuth": null },
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
],
"Recipient": [
{
"id": 7,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 7,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"token": "XkKx1HCs6Znm2UBJA2j6o",
"documentDeletedAt": null,
"expiresAt": null,
"expirationNotifiedAt": null,
"signedAt": null,
"authOptions": { "accessAuth": null, "actionAuth": null },
"signingOrder": 1,
"rejectionReason": null,
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2025-01-27T11:03:27.730Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}recipient.expired
Disparado quando o prazo de assinatura de um destinatário vence, em um documento pendente, antes que ele assine ou recuse.
Nome do evento: RECIPIENT_EXPIRED
O expiresAt do destinatário traz o prazo de assinatura, e expirationNotifiedAt é preenchido quando a expiração é processada.
{
"event": "RECIPIENT_EXPIRED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "PENDING",
"title": "contrato.pdf",
"source": "DOCUMENT",
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"documentId": 10,
"templateId": null,
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"expiresAt": "2024-04-22T11:51:00.000Z",
"expirationNotifiedAt": "2024-04-22T11:52:00.000Z",
"readStatus": "OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-22T11:52:00.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}document.reminder.sent
Disparado quando um lembrete é enviado a um destinatário que ainda não concluiu a ação.
Nome do evento: DOCUMENT_REMINDER_SENT
{
"event": "DOCUMENT_REMINDER_SENT",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"status": "PENDING",
"title": "contrato.pdf",
"source": "DOCUMENT",
"recipients": [
{
"id": 52,
"envelopeId": "envelope_abcdefhiklmnorst",
"email": "signatario@exemplo.com",
"name": "João Silva",
"role": "SIGNER",
"readStatus": "NOT_OPENED",
"signingStatus": "NOT_SIGNED",
"sendStatus": "SENT"
}
]
},
"createdAt": "2024-04-23T09:00:00.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}Eventos de modelo
Os eventos de modelo acompanham as mudanças nos modelos de documento reutilizáveis. O payload tem a mesma estrutura do payload de documento. Em TEMPLATE_CREATED, TEMPLATE_UPDATED e TEMPLATE_DELETED, o ID numérico legado do próprio modelo vem em id e templateId é null. Só o TEMPLATE_USED, cujo payload descreve o novo envelope de documento criado a partir do modelo, traz o ID legado do modelo de origem em templateId, com source igual a TEMPLATE.
template.created
Disparado quando um novo modelo é criado.
Nome do evento: TEMPLATE_CREATED
{
"event": "TEMPLATE_CREATED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"title": "Meu modelo",
"status": "DRAFT",
"templateId": null,
"source": "TEMPLATE",
"recipients": []
},
"createdAt": "2024-04-22T11:44:44.779Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}template.updated
Disparado quando as configurações, os destinatários ou os campos de um modelo são alterados.
Nome do evento: TEMPLATE_UPDATED
{
"event": "TEMPLATE_UPDATED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"title": "Meu modelo atualizado",
"status": "DRAFT",
"templateId": null,
"source": "TEMPLATE",
"recipients": []
},
"createdAt": "2024-04-22T12:00:00.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}template.deleted
Disparado quando um modelo é excluído.
Nome do evento: TEMPLATE_DELETED
{
"event": "TEMPLATE_DELETED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"title": "Modelo excluído",
"status": "DRAFT",
"templateId": null,
"source": "TEMPLATE",
"recipients": []
},
"createdAt": "2024-04-22T13:00:00.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}template.used
Disparado quando um documento é criado a partir de um modelo. Dispara junto com document.created e permite acompanhar especificamente o uso dos modelos.
Nome do evento: TEMPLATE_USED
{
"event": "TEMPLATE_USED",
"payload": {
"id": 10,
"envelopeId": "envelope_abcdefhiklmnorst",
"title": "Documento a partir do modelo",
"status": "DRAFT",
"templateId": 10,
"source": "TEMPLATE",
"recipients": []
},
"createdAt": "2024-04-22T14:00:00.000Z",
"webhookEndpoint": "https://your-endpoint.com/webhook"
}Resumo dos eventos
Eventos de documento
| Evento | Quando dispara | Principais mudanças |
|---|---|---|
DOCUMENT_CREATED | Documento enviado ou criado a partir de modelo | status: "DRAFT" |
DOCUMENT_SENT | Documento enviado aos destinatários | status: "PENDING", destinatários com sendStatus: "SENT" |
DOCUMENT_OPENED | Destinatário abre o documento pela primeira vez | Destinatário com readStatus: "OPENED" |
DOCUMENT_SIGNED | Destinatário assina o documento | Destinatário com signingStatus: "SIGNED", signedAt preenchido |
DOCUMENT_RECIPIENT_COMPLETED | Destinatário conclui a ação | Destinatário com signingStatus: "SIGNED", signedAt preenchido |
DOCUMENT_COMPLETED | Todos os destinatários concluem | status: "COMPLETED", completedAt preenchido |
DOCUMENT_REJECTED | Destinatário recusa o documento | Destinatário com signingStatus: "REJECTED", rejectionReason preenchido |
DOCUMENT_CANCELLED | Documento pendente cancelado, ou documento excluído | status: "CANCELLED" após o cancelamento; a exclusão pode apagar o documento ou fazer exclusão lógica |
RECIPIENT_EXPIRED | Prazo de assinatura do destinatário vence | expiresAt vencido, expirationNotifiedAt preenchido |
DOCUMENT_REMINDER_SENT | Lembrete enviado ao destinatário | Nenhuma mudança de status |
Eventos de modelo
| Evento | Quando dispara | Principais mudanças |
|---|---|---|
TEMPLATE_CREATED | Novo modelo criado | source: "TEMPLATE" |
TEMPLATE_UPDATED | Configurações ou campos alterados | source: "TEMPLATE" |
TEMPLATE_DELETED | Modelo excluído | source: "TEMPLATE" |
TEMPLATE_USED | Documento criado a partir do modelo | source: "TEMPLATE" |
Tratando os eventos
Ao processar os eventos de webhook:
Verifique o segredo: confira se o cabeçalho X-Documenso-Secret é igual ao segredo configurado
Confira o tipo de evento: use o campo event para decidir a ação
Processe de forma idempotente: os webhooks podem ser reenviados, então trate eventos duplicados
Responda rápido: retorne um status 2xx em até 10 segundos
app.post('/webhook', (req, res) => {
const secret = req.headers['x-documenso-secret'];
if (secret !== process.env.WEBHOOK_SECRET) {
return res.status(401).send('Unauthorized');
}
const { event, payload } = req.body;
switch (event) {
case 'DOCUMENT_COMPLETED':
console.log(`Documento ${payload.id} concluído`);
break;
case 'DOCUMENT_RECIPIENT_COMPLETED':
const signer = payload.recipients.find((r) => r.signingStatus === 'SIGNED');
console.log(`${signer?.name} concluiu a ação no documento ${payload.id}`);
break;
case 'DOCUMENT_SIGNED':
console.log(`Assinatura incluída no documento ${payload.id}`);
break;
case 'DOCUMENT_REJECTED':
const rejecter = payload.recipients.find((r) => r.signingStatus === 'REJECTED');
console.log(`${rejecter?.name} recusou: ${rejecter?.rejectionReason}`);
break;
case 'TEMPLATE_USED':
console.log(`Modelo ${payload.templateId} usado para criar o documento ${payload.id}`);
break;
}
res.status(200).send('OK');
});Veja também
- Configuração de webhooks - Configure os endpoints de webhook
- Verificação de webhooks - Verifique a autenticidade dos webhooks

