Webhooks
Ask
List webhook event types
GET/v1/webhook-event-typesLists the versioned public webhook events and required resource read scopes.
Required scopes: webhook:read
Response 200
data | object[] |
|---|---|
data[].type | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted" | "webhook.test"Stable public webhook event type. |
data[].resourceType | stringDeveloper API resource carried by the event. |
data[].action | "created" | "updated" | "deleted" | "retired" | "restored" | "member_added" | "member_removed"Lifecycle action represented by the event. |
data[].requiredScopes | "read:all" | "write:all" | "team:read" | "team:write" | "member:read" | "member:write" | "user_group:read" | "user_group:write" | "day:read" | "day:write" | "day_note:read" | "day_note:write" | "day_file:read" | "day_file:write" | "schedule_item:read" | "schedule_item:write" | "event:read" | "event:write" | "venue:read" | "venue:write" | "guest_request:read" | "guest_request:write" | "pass_type:read" | "pass_type:write" | "ticket_type:read" | "ticket_type:write" | "set_list:read" | "set_list:write" | "set_list_item:read" | "set_list_item:write" | "lodging:read" | "lodging:write" | "rental_car:read" | "rental_car:write" | "webhook:read" | "webhook:write"[]Developer API read scopes required to subscribe. |
data[].description | stringHuman-readable description of the event. |
Create a webhook
POST/v1/webhooksCreates a user-owned endpoint. The signing secret is returned once. Selected event types also require their resource read scopes.
Required scopes: webhook:write
Request body (application/json)
namerequired | stringName shown in the developer portal. |
|---|---|
urlrequired | string:uriPublic HTTPS endpoint that receives deliveries. |
bindingsrequired | object[]Initial active team bindings. |
bindings[].teamIdrequired | string:uuidTeam whose projected changes can trigger this endpoint. |
bindings[].eventTypesrequired | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
Response 201
webhook | object |
|---|---|
webhook.id | string:uuidWebhook endpoint identifier. |
webhook.name | stringDeveloper-defined endpoint name. |
webhook.url | string:uriHTTPS delivery URL. |
webhook.status | "active" | "suspended"Current endpoint delivery status. |
webhook.bindings | object[]Team and event subscriptions. |
webhook.bindings[].teamId | string:uuidTeam whose projected changes can trigger this endpoint. |
webhook.bindings[].eventTypes | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
webhook.bindings[].status | "active" | "suspended"Current delivery status for this team binding. |
webhook.bindings[].suspendedReason | stringWhy the team binding is suspended. |
webhook.consecutiveExhaustedDeliveries | integerConsecutive deliveries that exhausted all retries. |
webhook.suspendedReason | stringWhy the endpoint is suspended. |
webhook.createdAt | string:date-timeEndpoint creation time. |
webhook.updatedAt | string:date-timeEndpoint last update time. |
secret | stringSigning secret shown only once. |
List webhooks
GET/v1/webhooksLists webhook endpoints owned by the authenticated user.
Required scopes: webhook:read
Parameters
query.limit | integerMaximum number of records to return. Defaults to 50 and is capped at 200. |
|---|---|
query.cursor | stringCursor returned by page.nextCursor from the previous list response. |
Response 200
data | object[] |
|---|---|
data[].id | string:uuidWebhook endpoint identifier. |
data[].name | stringDeveloper-defined endpoint name. |
data[].url | string:uriHTTPS delivery URL. |
data[].status | "active" | "suspended"Current endpoint delivery status. |
data[].bindings | object[]Team and event subscriptions. |
data[].bindings[].teamId | string:uuidTeam whose projected changes can trigger this endpoint. |
data[].bindings[].eventTypes | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
data[].bindings[].status | "active" | "suspended"Current delivery status for this team binding. |
data[].bindings[].suspendedReason | stringWhy the team binding is suspended. |
data[].consecutiveExhaustedDeliveries | integerConsecutive deliveries that exhausted all retries. |
data[].suspendedReason | stringWhy the endpoint is suspended. |
data[].createdAt | string:date-timeEndpoint creation time. |
data[].updatedAt | string:date-timeEndpoint last update time. |
page | object |
page.limit | integerMaximum records requested. |
page.nextCursor | string | nullOpaque cursor for the next page. |
Get a webhook
GET/v1/webhooks/{webhookId}Returns an endpoint owned by the authenticated user.
Required scopes: webhook:read
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|
Response 200
data | object |
|---|---|
data.id | string:uuidWebhook endpoint identifier. |
data.name | stringDeveloper-defined endpoint name. |
data.url | string:uriHTTPS delivery URL. |
data.status | "active" | "suspended"Current endpoint delivery status. |
data.bindings | object[]Team and event subscriptions. |
data.bindings[].teamId | string:uuidTeam whose projected changes can trigger this endpoint. |
data.bindings[].eventTypes | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
data.bindings[].status | "active" | "suspended"Current delivery status for this team binding. |
data.bindings[].suspendedReason | stringWhy the team binding is suspended. |
data.consecutiveExhaustedDeliveries | integerConsecutive deliveries that exhausted all retries. |
data.suspendedReason | stringWhy the endpoint is suspended. |
data.createdAt | string:date-timeEndpoint creation time. |
data.updatedAt | string:date-timeEndpoint last update time. |
Update a webhook
PATCH/v1/webhooks/{webhookId}Updates an endpoint owned by the authenticated user.
Required scopes: webhook:write
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|
Request body (application/json)
name | stringName shown in the developer portal. |
|---|---|
url | string:uriPublic HTTPS endpoint that receives deliveries. |
bindings | object[]Replacement team bindings. Every submitted binding is activated. |
bindings[].teamIdrequired | string:uuidTeam whose projected changes can trigger this endpoint. |
bindings[].eventTypesrequired | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
status | "active" | "suspended"Endpoint delivery status. |
Response 200
data | object |
|---|---|
data.id | string:uuidWebhook endpoint identifier. |
data.name | stringDeveloper-defined endpoint name. |
data.url | string:uriHTTPS delivery URL. |
data.status | "active" | "suspended"Current endpoint delivery status. |
data.bindings | object[]Team and event subscriptions. |
data.bindings[].teamId | string:uuidTeam whose projected changes can trigger this endpoint. |
data.bindings[].eventTypes | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
data.bindings[].status | "active" | "suspended"Current delivery status for this team binding. |
data.bindings[].suspendedReason | stringWhy the team binding is suspended. |
data.consecutiveExhaustedDeliveries | integerConsecutive deliveries that exhausted all retries. |
data.suspendedReason | stringWhy the endpoint is suspended. |
data.createdAt | string:date-timeEndpoint creation time. |
data.updatedAt | string:date-timeEndpoint last update time. |
Delete a webhook
DELETE/v1/webhooks/{webhookId}Deletes an endpoint owned by the authenticated user.
Required scopes: webhook:write
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|
Rotate a webhook secret
POST/v1/webhooks/{webhookId}/rotate-secretCreates a new signing secret while accepting the previous secret for 24 hours.
Required scopes: webhook:write
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|
Response 200
webhook | object |
|---|---|
webhook.id | string:uuidWebhook endpoint identifier. |
webhook.name | stringDeveloper-defined endpoint name. |
webhook.url | string:uriHTTPS delivery URL. |
webhook.status | "active" | "suspended"Current endpoint delivery status. |
webhook.bindings | object[]Team and event subscriptions. |
webhook.bindings[].teamId | string:uuidTeam whose projected changes can trigger this endpoint. |
webhook.bindings[].eventTypes | "day.created" | "day.updated" | "day.deleted" | "schedule_item.created" | "schedule_item.updated" | "schedule_item.deleted" | "event.created" | "event.updated" | "event.deleted" | "venue.created" | "venue.updated" | "venue.deleted" | "guest_request.created" | "guest_request.updated" | "guest_request.deleted" | "lodging.created" | "lodging.updated" | "lodging.deleted" | "rental_car.created" | "rental_car.updated" | "rental_car.deleted" | "day_file.created" | "day_file.updated" | "day_file.deleted" | "day_note.created" | "day_note.updated" | "day_note.deleted" | "travel_party.created" | "travel_party.updated" | "travel_party.deleted" | "travel_party.member_added" | "travel_party.member_removed" | "pass_type.created" | "pass_type.updated" | "pass_type.deleted" | "ticket_type.created" | "ticket_type.updated" | "ticket_type.deleted" | "set_list.created" | "set_list.updated" | "set_list.deleted" | "set_list_item.created" | "set_list_item.updated" | "set_list_item.retired" | "set_list_item.restored" | "set_list_item.deleted" | "team_member.created" | "team_member.updated" | "team_member.deleted" | "team_invitation.created" | "team_invitation.deleted"[]Explicit webhook event types enabled for the team. |
webhook.bindings[].status | "active" | "suspended"Current delivery status for this team binding. |
webhook.bindings[].suspendedReason | stringWhy the team binding is suspended. |
webhook.consecutiveExhaustedDeliveries | integerConsecutive deliveries that exhausted all retries. |
webhook.suspendedReason | stringWhy the endpoint is suspended. |
webhook.createdAt | string:date-timeEndpoint creation time. |
webhook.updatedAt | string:date-timeEndpoint last update time. |
secret | stringSigning secret shown only once. |
Send a test delivery
POST/v1/webhooks/{webhookId}/testQueues an asynchronous signed webhook.test delivery.
Required scopes: webhook:write
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|
Response 202
data | object |
|---|---|
data.id | string:uuidStable delivery identifier. |
data.webhookId | string:uuidOwning webhook endpoint identifier. |
data.teamId | string:uuidTeam associated with the delivery. |
data.eventId | string:uuidTriggering event identifier. |
data.eventType | stringPublic webhook event type. |
data.resourceId | string:uuidResource represented by the delivery. |
data.aggregateVersion | integerAggregate version that triggered this delivery. |
data.cursor | integerTriggering event global cursor. |
data.status | "pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"Current delivery status. |
data.retryable | booleanWhether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed. |
data.attemptCount | integerCompleted delivery attempts. |
data.nextAttemptAt | string:date-timeScheduled time for the next retry. |
data.lastAttemptAt | string:date-timeTime of the most recent attempt. |
data.lastResponseStatus | integerMost recent HTTP response status. |
data.lastErrorCode | stringCompact last delivery error code. |
data.suppressedReason | stringReason delivery was suppressed before sending. |
data.createdAt | string:date-timeDelivery creation time. |
data.updatedAt | string:date-timeDelivery metadata update time. |
List webhook deliveries
GET/v1/webhooks/{webhookId}/deliveriesLists recent delivery attempts without retaining payload bodies.
Required scopes: webhook:read
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|---|
query.limit | integerMaximum number of records to return. Defaults to 50 and is capped at 200. |
query.cursor | stringCursor returned by page.nextCursor from the previous list response. |
Response 200
data | object[] |
|---|---|
data[].id | string:uuidStable delivery identifier. |
data[].webhookId | string:uuidOwning webhook endpoint identifier. |
data[].teamId | string:uuidTeam associated with the delivery. |
data[].eventId | string:uuidTriggering event identifier. |
data[].eventType | stringPublic webhook event type. |
data[].resourceId | string:uuidResource represented by the delivery. |
data[].aggregateVersion | integerAggregate version that triggered this delivery. |
data[].cursor | integerTriggering event global cursor. |
data[].status | "pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"Current delivery status. |
data[].retryable | booleanWhether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed. |
data[].attemptCount | integerCompleted delivery attempts. |
data[].nextAttemptAt | string:date-timeScheduled time for the next retry. |
data[].lastAttemptAt | string:date-timeTime of the most recent attempt. |
data[].lastResponseStatus | integerMost recent HTTP response status. |
data[].lastErrorCode | stringCompact last delivery error code. |
data[].suppressedReason | stringReason delivery was suppressed before sending. |
data[].createdAt | string:date-timeDelivery creation time. |
data[].updatedAt | string:date-timeDelivery metadata update time. |
page | object |
page.limit | integerMaximum records requested. |
page.nextCursor | string | nullOpaque cursor for the next page. |
Get a webhook delivery
GET/v1/webhooks/{webhookId}/deliveries/{deliveryId}Returns delivery status and response metadata.
Required scopes: webhook:read
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|---|
path.deliveryIdrequired | string:uuidWebhook delivery identifier. |
Response 200
data | object |
|---|---|
data.id | string:uuidStable delivery identifier. |
data.webhookId | string:uuidOwning webhook endpoint identifier. |
data.teamId | string:uuidTeam associated with the delivery. |
data.eventId | string:uuidTriggering event identifier. |
data.eventType | stringPublic webhook event type. |
data.resourceId | string:uuidResource represented by the delivery. |
data.aggregateVersion | integerAggregate version that triggered this delivery. |
data.cursor | integerTriggering event global cursor. |
data.status | "pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"Current delivery status. |
data.retryable | booleanWhether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed. |
data.attemptCount | integerCompleted delivery attempts. |
data.nextAttemptAt | string:date-timeScheduled time for the next retry. |
data.lastAttemptAt | string:date-timeTime of the most recent attempt. |
data.lastResponseStatus | integerMost recent HTTP response status. |
data.lastErrorCode | stringCompact last delivery error code. |
data.suppressedReason | stringReason delivery was suppressed before sending. |
data.createdAt | string:date-timeDelivery creation time. |
data.updatedAt | string:date-timeDelivery metadata update time. |
Retry a webhook delivery
POST/v1/webhooks/{webhookId}/deliveries/{deliveryId}/retryQueues an owned exhausted or suppressed delivery for another asynchronous attempt. A pending delivery is also retryable after the active queue retry window has safely elapsed.
Required scopes: webhook:write
Parameters
path.webhookIdrequired | string:uuidWebhook endpoint identifier. |
|---|---|
path.deliveryIdrequired | string:uuidWebhook delivery identifier. |
Response 202
data | object |
|---|---|
data.id | string:uuidStable delivery identifier. |
data.webhookId | string:uuidOwning webhook endpoint identifier. |
data.teamId | string:uuidTeam associated with the delivery. |
data.eventId | string:uuidTriggering event identifier. |
data.eventType | stringPublic webhook event type. |
data.resourceId | string:uuidResource represented by the delivery. |
data.aggregateVersion | integerAggregate version that triggered this delivery. |
data.cursor | integerTriggering event global cursor. |
data.status | "pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"Current delivery status. |
data.retryable | booleanWhether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed. |
data.attemptCount | integerCompleted delivery attempts. |
data.nextAttemptAt | string:date-timeScheduled time for the next retry. |
data.lastAttemptAt | string:date-timeTime of the most recent attempt. |
data.lastResponseStatus | integerMost recent HTTP response status. |
data.lastErrorCode | stringCompact last delivery error code. |
data.suppressedReason | stringReason delivery was suppressed before sending. |
data.createdAt | string:date-timeDelivery creation time. |
data.updatedAt | string:date-timeDelivery metadata update time. |