DocsMCP Integration

Webhooks

Send Zenaris events to your own systems with HTTP webhooks.

Webhooks

Webhooks let Zenaris push events to a URL you control, so you can sync data into your own systems, notify a Slack channel, or trigger an automation in Zapier / n8n.

Setting Up a Webhook

  • Go to Settings > Webhooks
  • Click New Webhook
  • Paste your endpoint URL (must be HTTPS)
  • Pick which events to subscribe to
  • Save — Zenaris sends a webhook.test event so you can confirm the connection

Available Events

EventWhen it fires
invoice.createdA new invoice is saved
invoice.sentAn invoice is emailed to a client
invoice.paidAn invoice is marked paid
invoice.overdueAn invoice passes its due date
quote.acceptedA client accepts a quote
task.completedA task moves to Done
client.createdA new client is saved

Payload Shape

{
  "event": "invoice.paid",
  "occurredAt": "2026-05-24T10:32:15Z",
  "data": {
    "id": "65f...",
    "number": "INV-0042",
    "client": { "id": "65d...", "name": "Acme Co" },
    "total": 1250.00,
    "currency": "USD"
  }
}

Verifying Webhooks

Every request includes an X-Zenaris-Signature header — an HMAC-SHA256 of the raw body using your webhook secret. Reject any request that fails verification.

import crypto from "crypto";

function verify(rawBody, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Retries

Zenaris retries failed deliveries with exponential backoff (1m, 5m, 30m, 2h, 6h, 24h). After 6 failed attempts the webhook is paused and you'll see a banner in Settings > Webhooks.

Best Practices

  • Respond with 2xx within 10 seconds — long-running work should be queued
  • Treat events as at-least-once — dedupe on the event id
  • Keep an audit log of received events for replay
Webhooks - Documentation