Create Webhook Subscription
Register a webhook callback URL to receive real-time notifications for selected Zeeg events such as bookings, cancellations, and reschedules.
curl --request POST \
--url https://api.zeeg.me/v2/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"callbackUrl": "https://example.com/webhooks/zeeg",
"events": [
"invitee.scheduled",
"invitee.cancelled"
],
"scope": "user"
}
'{
"success": true,
"resource": {
"uuid": "9a39bf60-a6c3-45e7-80cd-2cd36e520861",
"name": null,
"description": null,
"callbackUrl": "https://example.com/webhooks/zeeg",
"scope": "user",
"creator": {
"firstName": "Lena",
"lastName": "Meier",
"slug": "lena-meier"
},
"events": [
"invitee.scheduled",
"invitee.cancelled"
],
"organization": null,
"apiVersion": null,
"createdAt": "2026-07-09 14:30:00",
"updatedAt": "2026-07-09 14:30:00"
},
"testResult": {
"delivered": true,
"statusCode": 200,
"error": null
}
}Authorizations
Body
The URL that Zeeg will send webhook payloads to. Must be a valid HTTPS URL.
List of event types to subscribe to. routing_form.submitted and
ai_agent.call_completed deliver to organization-scoped webhooks only;
subscribing a user-scoped webhook to either is rejected with a 422.
invitee.scheduled, invitee.cancelled, invitee.withdrawn, invitee.no_show, routing_form.submitted, ai_agent.call_completed The scope of the webhook subscription. Use user for personal webhooks or organization for organization-wide webhooks.
user, organization Optional verification token. When set, Zeeg includes it in a Token header on every webhook delivery (including the test endpoint). Use it to verify that incoming requests originate from Zeeg.
Must be at least 8 characters and contain only printable, non-whitespace ASCII characters. Leading and trailing whitespace are trimmed automatically.
8 - 1000^[\x21-\x7E]+$Response
Created
The created webhook.
Hide child attributes
Hide child attributes
user, organization The organization's UUID.
Local datetime in 'YYYY-MM-DD HH:MM:SS' format, in the authenticated user's timezone (not ISO 8601).
Local datetime in 'YYYY-MM-DD HH:MM:SS' format, in the authenticated user's timezone (not ISO 8601).
Result of the synthetic test event sent to the callbackUrl. null only when the test was skipped (rare).
Hide child attributes
Hide child attributes
Whether the callback URL responded with a 2xx status. Always true on a 201 response.
HTTP status code returned by the callback URL, or null if the request never reached it.
Reason the delivery did not complete. connection_failed and request_failed mean the request never reached the callback URL, and statusCode is null. redirect_not_followed means the callback URL answered with a 3xx that Zeeg does not follow; statusCode holds it, and the fix is to store the final address.
connection_failed, request_failed, redirect_not_followed curl --request POST \
--url https://api.zeeg.me/v2/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"callbackUrl": "https://example.com/webhooks/zeeg",
"events": [
"invitee.scheduled",
"invitee.cancelled"
],
"scope": "user"
}
'{
"success": true,
"resource": {
"uuid": "9a39bf60-a6c3-45e7-80cd-2cd36e520861",
"name": null,
"description": null,
"callbackUrl": "https://example.com/webhooks/zeeg",
"scope": "user",
"creator": {
"firstName": "Lena",
"lastName": "Meier",
"slug": "lena-meier"
},
"events": [
"invitee.scheduled",
"invitee.cancelled"
],
"organization": null,
"apiVersion": null,
"createdAt": "2026-07-09 14:30:00",
"updatedAt": "2026-07-09 14:30:00"
},
"testResult": {
"delivered": true,
"statusCode": 200,
"error": null
}
}