Webhooks
Endpoints that are notified as soon as certain events happen in Bookingmood. See our documentation for how webhooks work
The webhook object
Attributes
iduuidUnique identifier
created_atread-onlytimestamp with time zoneCreation timestamp
updated_atread-onlytimestamp with time zoneLast modification timestamp
descriptiontextDescription of the webhook
endpointtextURL notifications are sent to
eventsArray<WebhookEvent>Events the webhook is subscribed to. See the complete list
signing_secrettextSecret used to sign notifications, so their validity can be verified
sourcetextWhere the webhook was registered: in the admin, through the API, or by an external tool such as Zapier
Related resources
Embed related resources in the response with the select parameter, for example select=*,organizations(*). Resources related through more than one column need the column as a hint, like table!column(*).
webhook_notifications(*)arrayThe webhook notifications referencing this webhook through webhook_notifications.webhook_id.
{
"id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:26:27.347Z",
"updated_at": "2026-10-30T22:26:27.347Z",
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"signing_secret": "md5((random())::text)",
"source": ""
}curl -X GET "https://api.bookingmood.com/v1/webhooks?limit=10&select=*,organizations(*),webhook_notifications(*)" \
-H "Authorization: Bearer YOUR_API_KEY"List webhooks
Filters
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this webhook is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events the webhook is subscribed to. See the complete list
signing_secretFilter<text>Secret used to sign notifications, so their validity can be verified
sourceFilter<text>Where the webhook was registered: in the admin, through the API, or by an external tool such as Zapier
Responses
200A list of webhooks with the selected columns
206Partial Content
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
code, message, details and hint. See the introduction for more on errors.GET /webhookscurl -X GET "https://api.bookingmood.com/v1/webhooks?select=*&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:26:27.347Z",
"updated_at": "2026-10-30T22:26:27.347Z",
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"signing_secret": "md5((random())::text)",
"source": ""
}
]Create webhooks
Body
Partial<Webhook> | Array<Partial<Webhook>>Read-only attributes are set by the database and can't be written.
Responses
201The newly created webhooks with the selected columns
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
code, message, details and hint. See the introduction for more on errors.POST /webhookscurl -X POST "https://api.bookingmood.com/v1/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"organization_id": "00000000-0000-0000-0000-000000000000",
"signing_secret": "md5((random())::text)",
"source": ""
}'[
{
"id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:26:27.347Z",
"updated_at": "2026-10-30T22:26:27.347Z",
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"signing_secret": "md5((random())::text)",
"source": ""
}
]Delete webhooks
Filters
Without filters, this request deletes all webhooks you have access to. Always filter on at least one column, e.g. id=eq.{id}.
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this webhook is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events the webhook is subscribed to. See the complete list
signing_secretFilter<text>Secret used to sign notifications, so their validity can be verified
sourceFilter<text>Where the webhook was registered: in the admin, through the API, or by an external tool such as Zapier
Responses
200The deleted webhooks with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
code, message, details and hint. See the introduction for more on errors.DELETE /webhookscurl -X DELETE "https://api.bookingmood.com/v1/webhooks?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:26:27.347Z",
"updated_at": "2026-10-30T22:26:27.347Z",
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"signing_secret": "md5((random())::text)",
"source": ""
}
]Update webhooks
Filters
Without filters, this request updates all webhooks you have access to. Always filter on at least one column, e.g. id=eq.{id}.
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this webhook is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
descriptionFilter<text>Description of the webhook
endpointFilter<text>URL notifications are sent to
eventsFilter<Array<WebhookEvent>>Events the webhook is subscribed to. See the complete list
signing_secretFilter<text>Secret used to sign notifications, so their validity can be verified
sourceFilter<text>Where the webhook was registered: in the admin, through the API, or by an external tool such as Zapier
Body
Partial<Webhook>Read-only attributes are set by the database and can't be written.
Responses
200The updated webhooks with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
code, message, details and hint. See the introduction for more on errors.PATCH /webhookscurl -X PATCH "https://api.bookingmood.com/v1/webhooks?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "A short description."
}'[
{
"id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:26:27.347Z",
"updated_at": "2026-10-30T22:26:27.347Z",
"description": "A short description.",
"endpoint": "",
"events": [
"bookings.created"
],
"signing_secret": "md5((random())::text)",
"source": ""
}
]