Webhooks

Real-time event delivery to your systems

Subscribe to domain events and receive HMAC-signed payloads at your endpoint. Automatic retries, full delivery logs, and a built-in circuit breaker keep your integration reliable.

Reliable, secure, observable

Everything you need to build robust integrations on top of document lifecycle events.

HMAC-SHA256 signatures

Every payload is signed with your unique secret. Verify the X-DocAccessible-Signature header to ensure authenticity.

Automatic retries

Failed deliveries retry 3 times with exponential backoff: 10 seconds, 60 seconds, then 5 minutes.

Full delivery log

Every delivery attempt is logged with status code, response body, and timestamps. Debug integration issues without guessing.

Automatic circuit breaker

After 10 consecutive delivery failures, the subscription auto-disables to protect your endpoint and our event pipeline.

Event type filtering

Subscribe to exactly the events you need. Choose from 16 domain event types across documents, requests, tickets, and billing.

Test delivery

Send a test.ping event to your endpoint before going live. Verify your signature validation and response handling.

How it works

From event to delivery in seconds

01

Event emitted

A domain event fires when a document, request, ticket, or billing action occurs in your workspace.

02

Payload signed

The event payload is JSON-encoded and signed with your HMAC-SHA256 secret. The signature goes into the X-DocAccessible-Signature header.

03

Delivered + logged

The signed payload is POSTed to your endpoint with a 10-second timeout. The response status and body are logged for debugging.

Payload Format

Clean JSON payloads

Every webhook delivery sends a consistent JSON payload with the event type, workspace context, timestamp, and event-specific data.

  • Consistent structure across all 16 event types
  • Workspace ID for multi-tenant routing
  • ISO 8601 timestamps for reliable ordering
  • Type-specific data payload with all relevant IDs

Example payload

{
  "event_type": "request.delivered",
  "workspace_id": "ws_abc123",
  "timestamp": "2026-03-10T14:30:00Z",
  "data": {
    "request_id": "req_xyz789",
    "status": "delivered",
    "document_count": 3
  }
}

Start receiving events

Create a webhook subscription from the Integrations dashboard. Test delivery, then subscribe to the events your systems need.