RoadOpsDeveloper

Webhooks

Ask

List webhook event types

GET/v1/webhook-event-types

Lists the versioned public webhook events and required resource read scopes.

Required scopes: webhook:read

Response 200

dataobject[]
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[].resourceTypestring

Developer 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[].descriptionstring

Human-readable description of the event.

Create a webhook

POST/v1/webhooks

Creates 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)

namerequiredstring

Name shown in the developer portal.

urlrequiredstring:uri

Public HTTPS endpoint that receives deliveries.

bindingsrequiredobject[]

Initial active team bindings.

bindings[].teamIdrequiredstring:uuid

Team 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

webhookobject
webhook.idstring:uuid

Webhook endpoint identifier.

webhook.namestring

Developer-defined endpoint name.

webhook.urlstring:uri

HTTPS delivery URL.

webhook.status"active" | "suspended"

Current endpoint delivery status.

webhook.bindingsobject[]

Team and event subscriptions.

webhook.bindings[].teamIdstring:uuid

Team 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[].suspendedReasonstring

Why the team binding is suspended.

webhook.consecutiveExhaustedDeliveriesinteger

Consecutive deliveries that exhausted all retries.

webhook.suspendedReasonstring

Why the endpoint is suspended.

webhook.createdAtstring:date-time

Endpoint creation time.

webhook.updatedAtstring:date-time

Endpoint last update time.

secretstring

Signing secret shown only once.

List webhooks

GET/v1/webhooks

Lists webhook endpoints owned by the authenticated user.

Required scopes: webhook:read

Parameters

query.limitinteger

Maximum number of records to return. Defaults to 50 and is capped at 200.

query.cursorstring

Cursor returned by page.nextCursor from the previous list response.

Response 200

dataobject[]
data[].idstring:uuid

Webhook endpoint identifier.

data[].namestring

Developer-defined endpoint name.

data[].urlstring:uri

HTTPS delivery URL.

data[].status"active" | "suspended"

Current endpoint delivery status.

data[].bindingsobject[]

Team and event subscriptions.

data[].bindings[].teamIdstring:uuid

Team 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[].suspendedReasonstring

Why the team binding is suspended.

data[].consecutiveExhaustedDeliveriesinteger

Consecutive deliveries that exhausted all retries.

data[].suspendedReasonstring

Why the endpoint is suspended.

data[].createdAtstring:date-time

Endpoint creation time.

data[].updatedAtstring:date-time

Endpoint last update time.

pageobject
page.limitinteger

Maximum records requested.

page.nextCursorstring | null

Opaque 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.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

Response 200

dataobject
data.idstring:uuid

Webhook endpoint identifier.

data.namestring

Developer-defined endpoint name.

data.urlstring:uri

HTTPS delivery URL.

data.status"active" | "suspended"

Current endpoint delivery status.

data.bindingsobject[]

Team and event subscriptions.

data.bindings[].teamIdstring:uuid

Team 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[].suspendedReasonstring

Why the team binding is suspended.

data.consecutiveExhaustedDeliveriesinteger

Consecutive deliveries that exhausted all retries.

data.suspendedReasonstring

Why the endpoint is suspended.

data.createdAtstring:date-time

Endpoint creation time.

data.updatedAtstring:date-time

Endpoint last update time.

Update a webhook

PATCH/v1/webhooks/{webhookId}

Updates an endpoint owned by the authenticated user.

Required scopes: webhook:write

Parameters

path.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

Request body (application/json)

namestring

Name shown in the developer portal.

urlstring:uri

Public HTTPS endpoint that receives deliveries.

bindingsobject[]

Replacement team bindings. Every submitted binding is activated.

bindings[].teamIdrequiredstring:uuid

Team 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

dataobject
data.idstring:uuid

Webhook endpoint identifier.

data.namestring

Developer-defined endpoint name.

data.urlstring:uri

HTTPS delivery URL.

data.status"active" | "suspended"

Current endpoint delivery status.

data.bindingsobject[]

Team and event subscriptions.

data.bindings[].teamIdstring:uuid

Team 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[].suspendedReasonstring

Why the team binding is suspended.

data.consecutiveExhaustedDeliveriesinteger

Consecutive deliveries that exhausted all retries.

data.suspendedReasonstring

Why the endpoint is suspended.

data.createdAtstring:date-time

Endpoint creation time.

data.updatedAtstring:date-time

Endpoint last update time.

Delete a webhook

DELETE/v1/webhooks/{webhookId}

Deletes an endpoint owned by the authenticated user.

Required scopes: webhook:write

Parameters

path.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

Rotate a webhook secret

POST/v1/webhooks/{webhookId}/rotate-secret

Creates a new signing secret while accepting the previous secret for 24 hours.

Required scopes: webhook:write

Parameters

path.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

Response 200

webhookobject
webhook.idstring:uuid

Webhook endpoint identifier.

webhook.namestring

Developer-defined endpoint name.

webhook.urlstring:uri

HTTPS delivery URL.

webhook.status"active" | "suspended"

Current endpoint delivery status.

webhook.bindingsobject[]

Team and event subscriptions.

webhook.bindings[].teamIdstring:uuid

Team 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[].suspendedReasonstring

Why the team binding is suspended.

webhook.consecutiveExhaustedDeliveriesinteger

Consecutive deliveries that exhausted all retries.

webhook.suspendedReasonstring

Why the endpoint is suspended.

webhook.createdAtstring:date-time

Endpoint creation time.

webhook.updatedAtstring:date-time

Endpoint last update time.

secretstring

Signing secret shown only once.

Send a test delivery

POST/v1/webhooks/{webhookId}/test

Queues an asynchronous signed webhook.test delivery.

Required scopes: webhook:write

Parameters

path.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

Response 202

dataobject
data.idstring:uuid

Stable delivery identifier.

data.webhookIdstring:uuid

Owning webhook endpoint identifier.

data.teamIdstring:uuid

Team associated with the delivery.

data.eventIdstring:uuid

Triggering event identifier.

data.eventTypestring

Public webhook event type.

data.resourceIdstring:uuid

Resource represented by the delivery.

data.aggregateVersioninteger

Aggregate version that triggered this delivery.

data.cursorinteger

Triggering event global cursor.

data.status"pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"

Current delivery status.

data.retryableboolean

Whether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed.

data.attemptCountinteger

Completed delivery attempts.

data.nextAttemptAtstring:date-time

Scheduled time for the next retry.

data.lastAttemptAtstring:date-time

Time of the most recent attempt.

data.lastResponseStatusinteger

Most recent HTTP response status.

data.lastErrorCodestring

Compact last delivery error code.

data.suppressedReasonstring

Reason delivery was suppressed before sending.

data.createdAtstring:date-time

Delivery creation time.

data.updatedAtstring:date-time

Delivery metadata update time.

List webhook deliveries

GET/v1/webhooks/{webhookId}/deliveries

Lists recent delivery attempts without retaining payload bodies.

Required scopes: webhook:read

Parameters

path.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

query.limitinteger

Maximum number of records to return. Defaults to 50 and is capped at 200.

query.cursorstring

Cursor returned by page.nextCursor from the previous list response.

Response 200

dataobject[]
data[].idstring:uuid

Stable delivery identifier.

data[].webhookIdstring:uuid

Owning webhook endpoint identifier.

data[].teamIdstring:uuid

Team associated with the delivery.

data[].eventIdstring:uuid

Triggering event identifier.

data[].eventTypestring

Public webhook event type.

data[].resourceIdstring:uuid

Resource represented by the delivery.

data[].aggregateVersioninteger

Aggregate version that triggered this delivery.

data[].cursorinteger

Triggering event global cursor.

data[].status"pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"

Current delivery status.

data[].retryableboolean

Whether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed.

data[].attemptCountinteger

Completed delivery attempts.

data[].nextAttemptAtstring:date-time

Scheduled time for the next retry.

data[].lastAttemptAtstring:date-time

Time of the most recent attempt.

data[].lastResponseStatusinteger

Most recent HTTP response status.

data[].lastErrorCodestring

Compact last delivery error code.

data[].suppressedReasonstring

Reason delivery was suppressed before sending.

data[].createdAtstring:date-time

Delivery creation time.

data[].updatedAtstring:date-time

Delivery metadata update time.

pageobject
page.limitinteger

Maximum records requested.

page.nextCursorstring | null

Opaque 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.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

path.deliveryIdrequiredstring:uuid

Webhook delivery identifier.

Response 200

dataobject
data.idstring:uuid

Stable delivery identifier.

data.webhookIdstring:uuid

Owning webhook endpoint identifier.

data.teamIdstring:uuid

Team associated with the delivery.

data.eventIdstring:uuid

Triggering event identifier.

data.eventTypestring

Public webhook event type.

data.resourceIdstring:uuid

Resource represented by the delivery.

data.aggregateVersioninteger

Aggregate version that triggered this delivery.

data.cursorinteger

Triggering event global cursor.

data.status"pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"

Current delivery status.

data.retryableboolean

Whether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed.

data.attemptCountinteger

Completed delivery attempts.

data.nextAttemptAtstring:date-time

Scheduled time for the next retry.

data.lastAttemptAtstring:date-time

Time of the most recent attempt.

data.lastResponseStatusinteger

Most recent HTTP response status.

data.lastErrorCodestring

Compact last delivery error code.

data.suppressedReasonstring

Reason delivery was suppressed before sending.

data.createdAtstring:date-time

Delivery creation time.

data.updatedAtstring:date-time

Delivery metadata update time.

Retry a webhook delivery

POST/v1/webhooks/{webhookId}/deliveries/{deliveryId}/retry

Queues 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.webhookIdrequiredstring:uuid

Webhook endpoint identifier.

path.deliveryIdrequiredstring:uuid

Webhook delivery identifier.

Response 202

dataobject
data.idstring:uuid

Stable delivery identifier.

data.webhookIdstring:uuid

Owning webhook endpoint identifier.

data.teamIdstring:uuid

Team associated with the delivery.

data.eventIdstring:uuid

Triggering event identifier.

data.eventTypestring

Public webhook event type.

data.resourceIdstring:uuid

Resource represented by the delivery.

data.aggregateVersioninteger

Aggregate version that triggered this delivery.

data.cursorinteger

Triggering event global cursor.

data.status"pending" | "retrying" | "succeeded" | "exhausted" | "suppressed"

Current delivery status.

data.retryableboolean

Whether this delivery may be explicitly requeued. Pending deliveries become retryable after the active queue retry window has safely elapsed.

data.attemptCountinteger

Completed delivery attempts.

data.nextAttemptAtstring:date-time

Scheduled time for the next retry.

data.lastAttemptAtstring:date-time

Time of the most recent attempt.

data.lastResponseStatusinteger

Most recent HTTP response status.

data.lastErrorCodestring

Compact last delivery error code.

data.suppressedReasonstring

Reason delivery was suppressed before sending.

data.createdAtstring:date-time

Delivery creation time.

data.updatedAtstring:date-time

Delivery metadata update time.