// In your HTTP handler
const event = webhook.verify({
body: await req.text(),
headers: req.headers,
});
{
"type": "guest.updated",
"data": {
"user_email": "jane@example.com",
"event_tickets": [
{
"checked_in_at": "2024-06-01T12:00:00Z"
}
]
}
}
Inbound
Verify incoming event
Validate a signed Luma webhook with webhook.verify(), checking the HMAC signature header and returning a typed, unwrapped event payload.
// In your HTTP handler
const event = webhook.verify({
body: await req.text(),
headers: req.headers,
});
{
"type": "guest.updated",
"data": {
"user_email": "jane@example.com",
"event_tickets": [
{
"checked_in_at": "2024-06-01T12:00:00Z"
}
]
}
}
SDK
webhook.verify(params: VerifyWebhookParams): UnwrappedWebhookEvent
Verifies the webhook signature and parses the event payload.
// In your HTTP handler
const event = webhook.verify({
body: await req.text(),
headers: req.headers,
});
{
"type": "guest.updated",
"data": {
"user_email": "jane@example.com",
"event_tickets": [
{
"checked_in_at": "2024-06-01T12:00:00Z"
}
]
}
}
Parameters
string | Uint8Array
required
Raw request body — do not re-serialize JSON.
Headers | Record<string, string>
required
Request headers including webhook signature headers.
Handle an event
if (event.type === "guest.updated") {
const checkedIn = event.data.event_tickets.some((t) => t.checked_in_at !== null);
if (checkedIn) {
// e.g. send welcome email to event.data.user_email
}
}
Luma has no dedicated check-in webhook. Check-in arrives as
guest.updated with event_tickets[].checked_in_at set. See the Guest Updated webhook docs.Test it
- Register an endpoint with
luma.webhooks.create()and save the secret. - Trigger an event on a test calendar (for example, register a guest).
- In your handler, call
webhook.verify()and logevent.type.
WebhookSignatureError — see Error handling.