Skip to the guide

Webhooks

Have LeadVault post to your system the moment a lead arrives, moves stage or books an appointment.

A webhook posts JSON to your system within seconds of a change. Account admins: Team, Webhooks.

Add one

  1. Under Add a webhook, type the https address to post to. A Zapier Catch Hook address works.
  2. Pick what to send: new leads, stage changes, appointments booked, appointments cancelled.
  3. Press Add webhook, and copy its secret (whsec_...), shown once.
  4. Press Send test to post a ping.

What arrives

{
  "id": 81234,
  "event": "lead.stage_changed",
  "created_at": "2026-10-29T15:04:05Z",
  "account": "Acme Mortgage",
  "lead": { "id": 612345, "type": "mortgage", "first_name": "Ana" },
  "stage_change": { "from": { "id": 11, "name": "New" }, "to": { "id": 12, "name": "Contacted" } }
}

The events are lead.created, lead.stage_changed, appointment.booked and appointment.cancelled.

Answer quickly

Answer with any 2xx within 10 seconds. Otherwise LeadVault tries again after 1 minute, 5 minutes, 30 minutes, 2 hours, 8 hours and 24 hours. After 20 posts in a row fail, the webhook is turned off, and the page says why. Recent posts shows the last 50 with their results.

Check it came from LeadVault

Each post has a LeadVault-Signature header: t=<time>,v1=<hex>, where v1 is the HMAC-SHA256 of the time, a dot and the raw body, keyed with the secret. The API reference has the code to check it.

Didn't answer it? Ask us.