Automation webhooks
Fire a webhook to GoHighLevel / Zapier / Make / your own server when invoice events happen. Configure at /kz-admin/account, "Automation webhooks" panel.
Events
| Event | Fires when |
|---|---|
| Invoice paid | Invoice flips to paid — Stripe webhook, manual Mark Paid, or QB Payments |
| Invoice sent | Send action fires successfully |
| Invoice viewed | Customer opens the public invoice URL for the first time |
| Invoice overdue | Daily cron flips status to overdue (set the cutoff via the invoice's due date) |
Each event can fire to a different webhook URL, or you can use one URL and branch by event type using the X-Kz-Event header.
Payload shape
POST request, JSON body. Same shape across all events:
{
"event": "invoice_paid",
"fired_at": "2026-04-27T15:23:01.000Z",
"account_id": "uuid",
"invoice": {
"id": "uuid",
"invoice_number": "INV-2026-0042",
"client_name": "Sky Tower Condo Corp",
"client_email": "sky@example.com",
"client_address": "...",
"issued_at": "2026-04-15T...",
"due_at": "2026-05-15T...",
"paid_at": "2026-04-27T...",
"subtotal": 500.00,
"tax_amount": 25.00,
"total": 525.00,
"currency": "CAD",
"status": "paid",
"payment_method": "e-transfer",
"notes": "..."
},
"tenant": {
"slug": "ians-maintenance",
"display_name": "Ian's Building Maintenance"
}
}
payment_method is included on invoice_paid so your downstream automation can branch (e.g. "Stripe paid → send digital receipt; e-transfer paid → send paper copy reminder").
Headers
Content-Type: application/jsonX-Kz-Event: invoice_paid(or sent/viewed/overdue)X-Kz-Account-Id: <uuid>
Use these for routing if you point multiple events at the same URL.
Timeouts
We give your endpoint 5 seconds to respond with a 2xx status. Anything else (timeout, 4xx, 5xx) is logged but doesn't block the invoice flow. We don't retry — design your endpoint to be quick and idempotent.
GoHighLevel example
In GHL: Automation → Workflows → New → Trigger: Webhook. Copy the trigger URL. Paste it in our Invoice paid field. Save.
Now any GHL workflow downstream of that trigger fires when an invoice is paid. Common pattern: send a confirmation SMS, move contact to "active customers" pipeline, schedule follow-up.
Zapier / Make
Both let you create a "Webhook by Zapier" / "Webhook" trigger that gives you a unique URL. Same drill — paste the URL in our settings.
Your own server
Any HTTPS endpoint. Verify the request authenticity by checking X-Kz-Account-Id matches an account you expect to receive events from. (We'll add HMAC signing in a future iteration.)
Test it
There's no built-in test fire button yet. Easiest test: create a draft invoice for $1 with your own email as the client. Send it. Mark paid manually. Webhook fires.
Or: contact us — we can fire a test event from the admin side.