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.testevent so you can confirm the connection
Available Events
| Event | When it fires |
|---|---|
invoice.created | A new invoice is saved |
invoice.sent | An invoice is emailed to a client |
invoice.paid | An invoice is marked paid |
invoice.overdue | An invoice passes its due date |
quote.accepted | A client accepts a quote |
task.completed | A task moves to Done |
client.created | A 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