Events
The five event types you can subscribe to, and what each payload carries.
Every delivery has the same outer shape. type tells you what happened,
createdAt is when it happened, and data carries the document and, where it
makes sense, the recipient it happened to.
| Event | Fires |
|---|---|
document.sent | Once per send, when the document goes out to its recipients. |
document.viewed | The first time a recipient opens it. Never again. |
document.signed | Once per signer, as each one finishes. |
document.completed | When the last signer is done and the document is fully executed. |
document.declined | A recipient declined. meta.reason carries their reason when they gave one. |
A single-signer document that gets signed produces both document.signed and
document.completed. Pick document.completed if you only want to hear about
a deal once.
This page is generated from the same catalogue the API is built from, so the samples below are the real payload shape rather than something hand-copied.
Payloads
document.sent
The document was sent to its recipients. Fires once per send.
{ "id": "b3c1e07a-5f2d-4c88-a1e9-2f60d4b93c17", "type": "document.sent", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "document": { "id": "0f8d3a12-6c4e-4b7a-9f21-3d5e8c1a7b40", "title": "Quote – roof replacement, Villa Ekhagen", "url": "https://www.signello.se/p/8kQ2mXvR", "sentAt": "2026-09-03T08:14:22.000Z", "expiresAt": "2026-09-17T08:14:22.000Z", "value": { "amount": 184500, "currency": "SEK" }, "status": "sent", "signedAt": null }, "recipient": null }}document.viewed
A recipient opened the document for the first time. Never fires again.
{ "id": "b3c1e07a-5f2d-4c88-a1e9-2f60d4b93c17", "type": "document.viewed", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "document": { "id": "0f8d3a12-6c4e-4b7a-9f21-3d5e8c1a7b40", "title": "Quote – roof replacement, Villa Ekhagen", "url": "https://www.signello.se/p/8kQ2mXvR", "sentAt": "2026-09-03T08:14:22.000Z", "expiresAt": "2026-09-17T08:14:22.000Z", "value": { "amount": 184500, "currency": "SEK" }, "status": "viewed", "signedAt": null }, "recipient": { "email": "anna.lindqvist@example.se", "fullName": "Anna Lindqvist", "role": "signer", "signedAt": null } }}document.signed
One signer completed their signature. Fires once per signer.
{ "id": "b3c1e07a-5f2d-4c88-a1e9-2f60d4b93c17", "type": "document.signed", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "document": { "id": "0f8d3a12-6c4e-4b7a-9f21-3d5e8c1a7b40", "title": "Quote – roof replacement, Villa Ekhagen", "url": "https://www.signello.se/p/8kQ2mXvR", "sentAt": "2026-09-03T08:14:22.000Z", "expiresAt": "2026-09-17T08:14:22.000Z", "value": { "amount": 184500, "currency": "SEK" }, "status": "viewed", "signedAt": null }, "recipient": { "email": "anna.lindqvist@example.se", "fullName": "Anna Lindqvist", "role": "signer", "signedAt": "2026-09-03T09:02:41.000Z" } }}document.completed
Every signer is done and the document is fully executed.
{ "id": "b3c1e07a-5f2d-4c88-a1e9-2f60d4b93c17", "type": "document.completed", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "document": { "id": "0f8d3a12-6c4e-4b7a-9f21-3d5e8c1a7b40", "title": "Quote – roof replacement, Villa Ekhagen", "url": "https://www.signello.se/p/8kQ2mXvR", "sentAt": "2026-09-03T08:14:22.000Z", "expiresAt": "2026-09-17T08:14:22.000Z", "value": { "amount": 184500, "currency": "SEK" }, "status": "signed", "signedAt": "2026-09-03T09:02:41.000Z" }, "recipient": { "email": "anna.lindqvist@example.se", "fullName": "Anna Lindqvist", "role": "signer", "signedAt": "2026-09-03T09:02:41.000Z" } }}document.declined
A recipient declined. `meta.reason` carries their reason when given.
{ "id": "b3c1e07a-5f2d-4c88-a1e9-2f60d4b93c17", "type": "document.declined", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "document": { "id": "0f8d3a12-6c4e-4b7a-9f21-3d5e8c1a7b40", "title": "Quote – roof replacement, Villa Ekhagen", "url": "https://www.signello.se/p/8kQ2mXvR", "sentAt": "2026-09-03T08:14:22.000Z", "expiresAt": "2026-09-17T08:14:22.000Z", "value": { "amount": 184500, "currency": "SEK" }, "status": "declined", "signedAt": null }, "recipient": { "email": "anna.lindqvist@example.se", "fullName": "Anna Lindqvist", "role": "signer", "signedAt": null }, "meta": { "reason": "We have gone with another supplier." } }}Test deliveries
The Test button in settings sends a ping. It cannot be subscribed to and
it never arrives on its own.
{ "id": "5a9f2c31-8e04-4d6b-b7c2-1a8e3f5d9042", "type": "ping", "createdAt": "2026-09-03T08:14:22.000Z", "data": { "message": "Signello webhook test" }}Reserved
document.expired— Accepted by the API and stored, but never emitted — nothing marks a document expired yet.
Treat an unknown type as something to ignore, not something to fail on. New
event types are added without warning, and a handler that throws on one it has
never seen will start collecting retries the day that happens.
What is deliberately not here
Signello tracks more than this internally: page views, scroll depth, downloads, reminders sent. None of it is delivered as a webhook, because an integration should not be woken up by someone scrolling.
Payloads also never carry a personal identity number, signature data or an OCSP response. Those are signing evidence and they stay in the sealed document. Recipients appear as name, email, role and whether they have signed, nothing more.