- Downloading signed documents as soon as all parties complete signing
- Keeping external systems like CRMs or ERPs in sync with signing status
- Notifying your team when a document is declined or cancelled
- Triggering internal workflows after a signature request is approved
How webhooks work
When an event occurs in Lumin, the following sequence happens:1
Event is triggered
A user or API action causes an event — for example, all signers complete a
document.
2
Lumin sends a notification
Lumin POSTs a JSON payload to your registered webhook URL describing the
event.
3
Your server acknowledges
Your endpoint returns HTTP
200 OK to confirm receipt. No response body is
required.4
Your logic runs
Your application processes the event — for example, calls
GET /v1/signature_request/{id}/file to download the signed PDF.Example workflow
A user sends a signature request in Lumin Sign. Once all signers complete it:- Lumin sends a
signature_request_approvedevent to your endpoint. - Your server returns
200 OK. - Your app calls
GET https://api.luminpdf.com/v1/signature_request/{id}/fileto download the Certificate of Completion and signed PDF.
Types of webhooks
Lumin supports two webhook types, scoped differently:- Account webhooks — Configure once and receive all supported events workspace-wide.
- App webhooks — Scoped to the permissions your OAuth app has been granted.
Supported event types
Event payload structure
All webhook events share the same JSON structure:Retry schedule
If your endpoint does not return200 OK, Lumin retries delivery up to six times:
Failure conditions
A delivery attempt is considered failed when:- Timeout — your endpoint does not respond within 30 seconds
- Non-200 response — your endpoint returns any HTTP status other than
200 - Connection failure — Lumin cannot connect to your endpoint
Best practices
- Implement idempotency — Lumin may deliver the same event more than once due to retries. Use
signature_request_idandevent_typetogether as a unique key to detect and ignore duplicates. - Verify signatures — Every request includes an
X-Signatureheader. Always validate it before processing the payload. See Account webhooks and App webhooks for verification details. - Log all events — Store raw payloads for debugging and audit purposes.
- Use HTTPS — Lumin only delivers webhooks to HTTPS endpoints.