4 min read
Feb 11, 2026

Webhook Event Reference

Complete reference for all Pivot webhook event payloads.

This page documents the JSON payloads delivered to your webhook endpoints. All field names use camelCase. For setup instructions, see Webhooks.

Common Envelope

Every webhook event shares this structure:

FieldTypeDescription
eventTypestringThe event type identifier
organizationIdstringThe organization this event belongs to
spaceIdstringThe space containing the subject
subjectobject{ type, id } — the entity that triggered
timestampstringISO 8601 timestamp of when the event fired
dataobjectEvent-specific payload (see below)

MESSAGE_SENT

Triggered when a message is sent in a subscribed room.

Data fields:

FieldTypeDescription
messageIdstringThe unique identifier of the message.
roomIdstringThe room the message was sent in.
userIdstringThe user who sent the message.
statusstringThe message status (e.g. “SENT”).
createdAtstringWhen the message was created (ISO 8601).
richContentgoogle.protobuf.StructStructured rich text content of the message body (Lexical JSON).
threadParentMessageIdstringThe parent message ID when this message is a thread reply. Empty string if not a thread reply.
inlineReplyMessageIdstringThe message ID this message is an inline reply to. Empty string if not an inline reply.
typestringThe message type (e.g. “MESSAGE_TYPE_UNSPECIFIED”, “MESSAGE_TYPE_VIDEO_CALL”, “MESSAGE_TYPE_AUDIO_CALL”).
sentAtstringWhen the message was sent (ISO 8601). Empty string if not yet sent.
threadRootMessageIdstringThe thread root message ID when this message is a (possibly nested) thread reply. Empty string for top-level messages. Together with room_id and sent_at this is the message’s storage locator; pass it back on message reads for partition-addressed lookups.

Payload example:

{
"eventType": "message_sent",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "room",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"messageId": "message-uuid",
"roomId": "room-uuid",
"userId": "user-uuid",
"status": "SENT",
"createdAt": "2026-01-01T12:00:00Z",
"richContent": {
"key": "value"
},
"threadParentMessageId": "thread_parent_message-uuid",
"inlineReplyMessageId": "inline_reply_message-uuid",
"type": "MESSAGE_TYPE_UNSPECIFIED",
"sentAt": "2026-01-01T12:00:00Z",
"threadRootMessageId": "thread_root_message-uuid"
}
}

MESSAGE_DELETED

Triggered when a message is deleted in a subscribed room.

Data fields:

FieldTypeDescription
messageIdstringThe unique identifier of the deleted message.
roomIdstringThe room the message was in.
userIdstringThe user who deleted the message.
statusstringThe message status (e.g. “DELETED”).
deletedAtstringWhen the message was deleted (ISO 8601).
sentAtstringWhen the message was originally sent (ISO 8601). Empty string if unknown.
threadParentMessageIdstringThe parent message ID when the deleted message was a thread reply.
threadRootMessageIdstringThe thread root message ID when the deleted message was a (possibly nested) thread reply. Empty string for top-level messages.

Payload example:

{
"eventType": "message_deleted",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "room",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"messageId": "message-uuid",
"roomId": "room-uuid",
"userId": "user-uuid",
"status": "DELETED",
"deletedAt": "2026-01-01T12:00:00Z",
"sentAt": "2026-01-01T12:00:00Z",
"threadParentMessageId": "thread_parent_message-uuid",
"threadRootMessageId": "thread_root_message-uuid"
}
}

MESSAGE_EDITED

Triggered when a message is edited in a subscribed room.

Data fields:

FieldTypeDescription
messageIdstringThe unique identifier of the edited message.
roomIdstringThe room the message is in.
userIdstringThe user who edited the message.
statusstringThe message status (e.g. “SENT”).
updatedAtstringWhen the message was last updated (ISO 8601).
richContentgoogle.protobuf.StructStructured rich text content of the message body (Lexical JSON).
threadParentMessageIdstringThe parent message ID when this message is a thread reply. Empty string if not a thread reply.
inlineReplyMessageIdstringThe message ID this message is an inline reply to. Empty string if not an inline reply.
typestringThe message type (e.g. “MESSAGE_TYPE_UNSPECIFIED”, “MESSAGE_TYPE_VIDEO_CALL”, “MESSAGE_TYPE_AUDIO_CALL”).
sentAtstringWhen the message was sent (ISO 8601). Empty string if not yet sent.
threadRootMessageIdstringThe thread root message ID when this message is a (possibly nested) thread reply. Empty string for top-level messages.

Payload example:

{
"eventType": "message_edited",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "room",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"messageId": "message-uuid",
"roomId": "room-uuid",
"userId": "user-uuid",
"status": "SENT",
"updatedAt": "2026-01-01T12:00:00Z",
"richContent": {
"key": "value"
},
"threadParentMessageId": "thread_parent_message-uuid",
"inlineReplyMessageId": "inline_reply_message-uuid",
"type": "MESSAGE_TYPE_UNSPECIFIED",
"sentAt": "2026-01-01T12:00:00Z",
"threadRootMessageId": "thread_root_message-uuid"
}
}

ROOM_RECORDING_TRANSCRIPT_PUBLISHED

Triggered when a room recording transcript is ready.

Data fields:

FieldTypeDescription
recordingIdstringThe unique identifier of the recording.
roomIdstringThe room the recording belongs to.
createdAtstringWhen the recording was created (ISO 8601).

Payload example:

{
"eventType": "room_recording_transcript_published",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "room",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"recordingId": "recording-uuid",
"roomId": "room-uuid",
"createdAt": "2026-01-01T12:00:00Z"
}
}

MESSAGE_ATTACHMENT_TRANSCRIPT_PUBLISHED

Triggered when a message attachment transcript is ready.

Data fields:

FieldTypeDescription
messageIdstringThe message that owns the attachment.
roomIdstringThe room containing the message.
attachmentIdstringThe attachment whose transcript became available.
sentAtstringWhen the message was sent (ISO 8601). Pass this to message read routes.
completedAtstringWhen transcription completed (ISO 8601).
threadRootMessageIdstringThe root message ID when this message is a thread reply. Empty string otherwise.

Payload example:

{
"eventType": "message_attachment_transcript_published",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "message",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"messageId": "message-uuid",
"roomId": "room-uuid",
"attachmentId": "attachment-uuid",
"sentAt": "2026-01-01T12:00:00Z",
"completedAt": "2026-01-01T12:00:00Z",
"threadRootMessageId": "thread_root_message-uuid"
}
}

BLOCK_RESPONSE_ATTACHMENT_TRANSCRIPT_PUBLISHED

Triggered when a block response attachment transcript is ready.

Data fields:

FieldTypeDescription
blockResponseIdstringThe block response that owns the attachment.
blockIdstringThe block containing the response.
attachmentIdstringThe attachment whose transcript became available.
completedAtstringWhen transcription completed (ISO 8601).

Payload example:

{
"eventType": "block_response_attachment_transcript_published",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "blockResponse",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"blockResponseId": "block_response-uuid",
"blockId": "block-uuid",
"attachmentId": "attachment-uuid",
"completedAt": "2026-01-01T12:00:00Z"
}
}

ROOM_RECORDING_PUBLISHED

Triggered when a room recording video is ready.

Data fields:

FieldTypeDescription
recordingIdstringThe unique identifier of the recording.
roomIdstringThe room the recording belongs to.
createdAtstringWhen the recording was created (ISO 8601).

Payload example:

{
"eventType": "room_recording_published",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "room",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"recordingId": "recording-uuid",
"roomId": "room-uuid",
"createdAt": "2026-01-01T12:00:00Z"
}
}

BLOCK_RESPONSE_SENT

Triggered when a block response is sent on a subscribed block.

Data fields:

FieldTypeDescription
blockResponseIdstringThe unique identifier of the block response.
blockIdstringThe block the response was submitted on.
parentBlockResponseIdstringThe parent response ID when this is a threaded reply.
userIdstringThe user who sent the response.
statusstringThe response status (e.g. “BLOCK_RESPONSE_STATUS_SENT”).
createdAtstringWhen the response was created (ISO 8601).
updatedAtstringWhen the response was last updated (ISO 8601).
richContentgoogle.protobuf.StructStructured rich text content for the response.
attachmentsBlockResponseAttachmentData[]File attachment metadata for the response.

Payload example:

{
"eventType": "block_response_sent",
"organizationId": "organization-uuid",
"spaceId": "space-uuid",
"subject": {
"type": "block",
"id": "example-id"
},
"timestamp": "2026-01-01T12:00:00Z",
"data": {
"blockResponseId": "block_response-uuid",
"blockId": "block-uuid",
"parentBlockResponseId": "parent_block_response-uuid",
"userId": "user-uuid",
"status": "BLOCK_RESPONSE_STATUS_SENT",
"createdAt": "2026-01-01T12:00:00Z",
"updatedAt": "2026-01-01T12:00:00Z",
"richContent": {
"key": "value"
},
"attachments": [
{
"id": "example-id",
"fileId": "file-uuid",
"fileUrl": "example-file_url",
"displayName": "example-display_name",
"type": "example-type",
"createdAt": "2026-01-01T12:00:00Z"
}
]
}
}

Was this guide helpful?