Webhook payload v1
Full JSON shape, every field, what the signature header looks like.
The full JSON body sent to webhook and Zapier destinations on every lead.created
event. Same payload shape across every integration — only the destination-side mapping differs.
Headers
| Header | Example |
|---|---|
Content-Type | application/json |
X-Innkept-Event | lead.created |
X-Innkept-Signature | sha256=2b9c…f43a |
User-Agent | Innkept/1.0 |
Body
{
"event": "lead.created",
"version": "v1",
"lead": {
"uuid": "01j8h6kqh4yg3xr8rwm6t6xfqe",
"name": "Sarah Patel",
"email": "sarah@example.com",
"phone": "+447700900123",
"event_type": "wedding",
"event_date": "2026-09-12",
"guest_count": 80,
"gdpr_consent": true,
"source_url": "https://theoldbarn.co.uk/book",
"utm": {
"source": "google",
"medium": "cpc",
"campaign": "summer_weddings_2026"
}
},
"quote": {
"uuid": "01j8h6kqh5gqp8m8t9wnf8c2y0",
"proposal_url": "https://quote.innkept.com/p/9f3aXjh2z6kQpTu1mVeR…",
"subtotal_pence": 920000,
"rules_pence": 138000,
"vat_pence": 211600,
"total_pence": 1269600,
"currency": "GBP",
"items": [
{
"name": "Exclusive venue hire",
"quantity": 1,
"unit_pence": 350000,
"total_pence": 350000
},
{
"name": "Wedding feast 2026 — main course",
"quantity": 80,
"unit_pence": 4500,
"total_pence": 360000
}
]
},
"viewing": {
"starts_at": "2026-06-04T14:00:00+01:00",
"ends_at": "2026-06-04T15:00:00+01:00"
},
"location": {
"id": 12,
"name": "The Old Barn"
},
"company": {
"id": 7,
"name": "The Old Barn"
}
}
Field reference
Top level
| Field | Type | Notes |
|---|---|---|
event | string | Currently always lead.created. More events coming. |
version | string | Schema version. We'll bump this if we ever break the shape. |
lead
| Field | Type | Notes |
|---|---|---|
uuid | string (ULID) | 26 chars. Use as your idempotency key. |
name | string | Full name as entered. |
email | string | Validated email. |
phone | string · null | Optional. International format if provided. |
event_type | string | One of: wedding, corporate, private_dining, birthday, other. |
event_date | string (ISO date) | YYYY-MM-DD. |
guest_count | integer | 1–5,000. |
gdpr_consent | boolean | Always true for widget submissions. |
source_url | string · null | The page the configurator was on. |
utm | object · null | Captured silently from URL params. |
quote
| Field | Type | Notes |
|---|---|---|
uuid | string (ULID) | — |
proposal_url | string | Magic link your guest can open. |
subtotal_pence | integer | Pre-VAT, pre-rules. |
rules_pence | integer | Positive surcharge or negative discount. |
vat_pence | integer | Total VAT across all items. |
total_pence | integer | subtotal + rules + vat. |
currency | string | Always GBP today. |
items | array | One entry per quote item. |
viewing
Optional — present only if the guest booked a viewing in step 7.
| Field | Type | Notes |
|---|---|---|
starts_at | string (ISO 8601) | Includes timezone offset. |
ends_at | string (ISO 8601) | Defaults to one hour after start. |
Versioning
Today: v1. We won't break v1. If we change the schema, we'll
introduce v2 and let you opt in per integration. Existing webhooks keep
receiving v1 until you switch them.
Something missing or wrong? Tell us.
Updated regularly. UK English. No AI slop.