Skip to main content

Webhooks

Webhooks allow your application to automatically react to events in Lumin, eliminating the need for continuous API polling. Lumin pushes real-time notifications to your system when key events occur, such as a signature request being approved or a document being ready for download.

When a webhook event is triggered, Lumin sends an HTTP POST request with a JSON payload to your specified webhook endpoint. Your receiving application can then use this information to run business logic, trigger workflows, or store records.

Types of webhooks in Lumin

Lumin currently supports Account-level webhooks

  • Configured once at the Workspace level (Workspace Owner sets it under API Key → Account callback).
  • Covers all users and events in the Workspace, independent of which API key or user initiated them.
  • Events (e.g., signature_request_created, signature_request_viewed) are always validated using the Primary API key.
  • Use case: Internal tools, single-tenant systems, full Workspace monitoring.

How the event flow works

Most webhook integrations follow this general pattern:

  1. User action triggers an event: Something happens in Lumin — e.g., a user sends a signature request.
  2. Lumin sends a notification: Lumin POSTS a JSON payload to your webhook endpoint describing the event.
  3. Your server acknowledges: Your endpoint returns an HTTP 200 OK to confirm receipt.
  4. Your logic runs: Your system decides how to respond — e.g., send an internal notification, update CRM data, or archive documents.
  5. Additional API calls (if needed): Your server can call Lumin APIs to fetch more details or take follow-up actions.

Example: Signature request workflow

Let's walk through a signature request scenario:

  1. A user creates and sends a signature request in Lumin Sign.
  2. All required signers complete the signing process.
  3. Lumin sends a signature_request_approved webhook event to your endpoint.
  4. Your server responds with 200 OK to confirm receipt.
  5. Your app then calls GET /signature_request/{id}/file to download the Certificate of Completion and the signed PDF, storing them securely in your system.

With webhooks, your app can do things beyond just receiving events:

  • Automate document workflows as soon as events occur.
  • Keep external systems (like Salesforce, HubSpot, or internal CRMs) up to date.
  • Notify team members or customers in real-time.
  • Archive and track compliance documents immediately after completion.

Event types and Retry rules

Supported event types

Lumin supports the following webhook events across both webhook types:

Event NameDescriptionAttached API Object
signature_request_createdThe signature request is created successfullySignature Request
signature_request_viewedA signer opens the documentSignature Request
signature_request_approvedThe document has been signed by all signersSignature Request
signature_request_declinedA signer declines the document. This will turn the status of the signature_request to REJECTEDSignature Request
signature_request_signedThe document has been signed by a signerSignature Request
signature_request_downloadableThe signed document and/or certificate of completion is ready for downloadSignature Request
signature_request_invalidAn error occurred while processing the signature request data on our back-end i.e. invalid text tagsSignature Request Error
signature_request_canceledThe signature request is canceledSignature Request Error
signature_request_cancel_failedThe signature request cancelation failedSignature Request Error

Event payload structure

All webhook events follow this consistent structure:

{
"event": {
"event_time": 1758812586180,
"event_type": "signature_request_downloadable",
"event_metadata": {
"workspace_id": "68d417dcdeaecfae84872de8"
}
},
"signature_request": {
"signature_request_id": "68d558daa153cb3c30718518",
"title": "Test webhook",
"created_at": 1758812378277,
"updated_at": 1758812574883,
"expires_at": 1827510980694,
"status": "APPROVED",
"signers": [
{
"name": "Thu Le",
"email": "[email protected]",
"status": "APPROVED",
"is_approved": true
}
]
},
"details_url": "https://sign.luminpdf.com/auth?mode=view-contract&token=..."
}

Retry rules and failure handling

Our webhook delivery system implements robust retry mechanisms to ensure reliable event delivery:

Retry schedule

Retry AttemptDelay After Previous Attempt
First5 minutes
Second15 minutes
Third45 minutes
Fourth2 hours 15 minutes
Fifth6 hours 45 minutes
Sixth20 hours 15 minutes

Failure conditions

  • Timeout: Requests timeout after 30 seconds
  • HTTP Errors: Any non-200 response status
  • Connection Failures: Network connectivity issues

Best practices for webhook handling

  • Respond quickly: Keep response times under 30 seconds
  • Return HTTP 200: Acknowledge receipt with success status
  • Implement idempotency: Handle duplicate events gracefully
  • Log all events: Maintain audit trails for debugging
  • Verify signatures: Always validate webhook authenticity

Event subscription rules

By default, Account webhook URLs subscribe to all supported events automatically - there's no opt-out mechanism.

Next steps