Event catalog

Pastrata emits 87 catalogued events across 19 domains. Subscribe to the ones your extension needs in its manifest; each delivery arrives as a signed webhook.

Min scope — the scope your extension must be granted before the event is delivered to it. Scope is re-checked at send time, so a revoked consent stops delivery mid-flight rather than at the next install.

PII tier — how sensitive the payload is. Payloads are deliberately thin: ids plus a little denormalized context. Fetch detail through the Gateway under a scope check rather than expecting it inline.

Version — the payload contract version. Payloads evolve additively only: a schema may gain optional fields, and the version increments to signal that. A breaking change ships as a new event name, so a contract you have integrated against never changes shape underneath you.

Index

building

EventVersionPII tierMin scope
building.config.changed1NONEBUILDING_SETTINGS_VIEW
building.unit.assigned1LOWBUILDING_SETTINGS_VIEW
building.unit.created1LOWBUILDING_SETTINGS_VIEW

calendar

EventVersionPII tierMin scope
calendar.event.cancelled1LOWCALENDAR_VIEW
calendar.event.created1LOWCALENDAR_VIEW
calendar.event.updated1LOWCALENDAR_VIEW

community

EventVersionPII tierMin scope
community.poll.closed1LOWFEED_MODERATE
community.post.created1LOWFEED_MODERATE
community.post.deleted1LOWFEED_MODERATE
community.report.created1LOWFEED_MODERATE

concierge

EventVersionPII tierMin scope
concierge.guest_pass.issued1LOWGUEST_PASS_MANAGE
concierge.guest_pass.revoked1LOWGUEST_PASS_MANAGE
concierge.incident.created1LOWINCIDENT_MANAGE
concierge.incident.resolved1LOWINCIDENT_MANAGE
concierge.shift_note.recorded1LOWSHIFT_NOTES
concierge.visitor.checked_in1LOWVISITOR_MANAGE
concierge.visitor.checked_out1LOWVISITOR_MANAGE

deposit

EventVersionPII tierMin scope
deposit.ledger.deducted1MODERATEDEPOSIT_LEDGER_VIEW
deposit.ledger.recorded1LOWDEPOSIT_LEDGER_VIEW
deposit.ledger.refunded1LOWDEPOSIT_LEDGER_VIEW
deposit.ledger.transferred1LOWDEPOSIT_LEDGER_VIEW

document

EventVersionPII tierMin scope
document.file.categorized1LOWDOCUMENT_VIEW
document.file.deleted1LOWDOCUMENT_VIEW
document.file.text_extracted1LOWDOCUMENT_VIEW
document.file.uploaded1LOWDOCUMENT_VIEW

extension

EventVersionPII tierMin scope
extension.installation.config_changed1NONEEXTENSION_MANAGE
extension.installation.installed1NONEEXTENSION_MANAGE
extension.installation.resumed1NONEEXTENSION_MANAGE
extension.installation.suspended1NONEEXTENSION_MANAGE
extension.installation.uninstalled1NONEEXTENSION_MANAGE
extension.installation.upgraded1NONEEXTENSION_MANAGE

inbox

EventVersionPII tierMin scope
inbox.request.assigned1LOWINBOX_REQUEST_VIEW
inbox.request.created1LOWINBOX_REQUEST_VIEW
inbox.request.reopened1LOWINBOX_REQUEST_VIEW
inbox.request.resolved1LOWINBOX_REQUEST_VIEW
inbox.request.routing_changed1LOWINBOX_REQUEST_VIEW
inbox.request.status_changed1LOWINBOX_REQUEST_VIEW

invitation

EventVersionPII tierMin scope
invitation.invite.accepted1LOWDIRECTORY_VIEW
invitation.invite.sent1LOWDIRECTORY_VIEW

leasing

EventVersionPII tierMin scope
leasing.lease.activated1LOWLEASE_VIEW
leasing.lease.created1LOWLEASE_VIEW
leasing.lease.sent1LOWLEASE_VIEW
leasing.lease.signed1LOWLEASE_VIEW
leasing.lease.terminated1LOWLEASE_VIEW
leasing.move.completed1LOWLEASE_VIEW
leasing.move.scheduled1LOWLEASE_VIEW
leasing.renewal.accepted1LOWLEASE_VIEW
leasing.renewal.declined1LOWLEASE_VIEW
leasing.renewal.offered1LOWLEASE_VIEW

legal

EventVersionPII tierMin scope
legal.agreement.cancelled1LOWAGREEMENT_VIEW
legal.agreement.completed1LOWAGREEMENT_VIEW
legal.agreement.declined1LOWAGREEMENT_VIEW
legal.agreement.expired1LOWAGREEMENT_VIEW
legal.agreement.partially_signed1LOWAGREEMENT_VIEW
legal.agreement.sent1LOWAGREEMENT_VIEW
legal.agreement.signed1LOWAGREEMENT_VIEW
legal.prescribed_notice.acknowledged1LOWPRESCRIBED_NOTICE_MANAGE
legal.prescribed_notice.generated1LOWPRESCRIBED_NOTICE_MANAGE
legal.prescribed_notice.served1LOWPRESCRIBED_NOTICE_MANAGE

meeting

EventVersionPII tierMin scope
meeting.meeting.cancelled1LOWMEETING_ATTEND
meeting.meeting.created1LOWMEETING_ATTEND
meeting.meeting.ended1LOWMEETING_ATTEND
meeting.meeting.scheduled1LOWMEETING_ATTEND
meeting.minutes.published1LOWMEETING_ATTEND
meeting.motion.decided1LOWMEETING_ATTEND
meeting.motion.proposed1LOWMEETING_ATTEND

membership

EventVersionPII tierMin scope
membership.member.created1LOWDIRECTORY_VIEW
membership.member.removed1LOWDIRECTORY_VIEW
membership.member.role_changed1LOWDIRECTORY_VIEW
membership.member.verified1LOWDIRECTORY_VIEW

messaging

EventVersionPII tierMin scope
messaging.channel.created1LOWCHANNEL_VIEW
messaging.conversation.created1LOWMESSAGE_VIEW
messaging.message.sent1LOWMESSAGE_VIEW

org

EventVersionPII tierMin scope
org.building.added1NONEBUILDING_SETTINGS_VIEW
org.building.removed1NONEBUILDING_SETTINGS_VIEW

package

EventVersionPII tierMin scope
package.parcel.logged1LOWPACKAGE_VIEW
package.parcel.picked_up1LOWPACKAGE_VIEW

pad

EventVersionPII tierMin scope
pad.mandate.enrolled1LOWRENT_LEDGER_VIEW
pad.mandate.revoked1LOWRENT_LEDGER_VIEW

payment

EventVersionPII tierMin scope
payment.transaction.failed1LOWRENT_LEDGER_VIEW
payment.transaction.refunded1LOWRENT_LEDGER_VIEW
payment.transaction.succeeded1LOWRENT_LEDGER_VIEW

rent

EventVersionPII tierMin scope
rent.charge.created1LOWRENT_LEDGER_VIEW
rent.charge.failed1LOWRENT_LEDGER_VIEW
rent.charge.paid1LOWRENT_LEDGER_VIEW
rent.charge.waived1MODERATERENT_LEDGER_VIEW
rent.charge.written_off1MODERATERENT_LEDGER_VIEW

Payloads

building.config.changed

Version 1 · PII tier NONE · requires BUILDING_SETTINGS_VIEW

FieldTypeRequiredDescription
changedKeysstring[]yes—
Example payload
{
  "changedKeys": [
    "booking.enabled",
    "feed.moderation"
  ]
}

building.unit.assigned

Version 1 · PII tier LOW · requires BUILDING_SETTINGS_VIEW

FieldTypeRequiredDescription
unitIdstringyes—
membershipIdstring | nullyes—
userIdstring | nullyes—
Example payload
{
  "unitId": "unit_2",
  "membershipId": "mem_1",
  "userId": "usr_1"
}

building.unit.created

Version 1 · PII tier LOW · requires BUILDING_SETTINGS_VIEW

FieldTypeRequiredDescription
unitIdstringyes—
labelstring | nullyes—
Example payload
{
  "unitId": "unit_2",
  "label": "PH-1"
}

calendar.event.cancelled

Version 1 · PII tier LOW · requires CALENDAR_VIEW

FieldTypeRequiredDescription
eventIdstringyes—
Example payload
{
  "eventId": "evt_1"
}

calendar.event.created

Version 1 · PII tier LOW · requires CALENDAR_VIEW

FieldTypeRequiredDescription
eventIdstringyes—
startsAtstringyes—
endsAtstring | nullyes—
Example payload
{
  "eventId": "evt_1",
  "startsAt": "2026-08-01T17:00:00.000Z",
  "endsAt": "2026-08-01T18:00:00.000Z"
}

calendar.event.updated

Version 1 · PII tier LOW · requires CALENDAR_VIEW

FieldTypeRequiredDescription
eventIdstringyes—
startsAtstringyes—
endsAtstring | nullyes—
Example payload
{
  "eventId": "evt_1",
  "startsAt": "2026-08-01T18:00:00.000Z",
  "endsAt": null
}

community.poll.closed

Version 1 · PII tier LOW · requires FEED_MODERATE

FieldTypeRequiredDescription
pollIdstringyes—
postIdstringyes—
Example payload
{
  "pollId": "poll_1",
  "postId": "post_1"
}

community.post.created

Version 1 · PII tier LOW · requires FEED_MODERATE

FieldTypeRequiredDescription
postIdstringyes—
authorUserIdstring | nullyes—
categorystring | nullyes—
hasPollbooleanyes—
Example payload
{
  "postId": "post_1",
  "authorUserId": "usr_1",
  "category": "ANNOUNCEMENT",
  "hasPoll": false
}

community.post.deleted

Version 1 · PII tier LOW · requires FEED_MODERATE

FieldTypeRequiredDescription
postIdstringyes—
deletedBystringyes—
deletedByUserIdstring | nullyes—
Example payload
{
  "postId": "post_1",
  "deletedBy": "MODERATOR",
  "deletedByUserId": "usr_9"
}

community.report.created

Version 1 · PII tier LOW · requires FEED_MODERATE

FieldTypeRequiredDescription
reportIdstringyes—
targetTypestringyes—
targetPostIdstring | nullyes—
targetCommentIdstring | nullyes—
Example payload
{
  "reportId": "rep_1",
  "targetType": "POST",
  "targetPostId": "post_1",
  "targetCommentId": null
}

concierge.guest_pass.issued

Version 1 · PII tier LOW · requires GUEST_PASS_MANAGE

FieldTypeRequiredDescription
guestPassIdstringyes—
unitIdstring | nullyes—
purposestring | nullyes—
validUntilstring | nullyes—
Example payload
{
  "guestPassId": "gp_1",
  "unitId": "unit_2",
  "purpose": "GUEST",
  "validUntil": "2026-08-02T00:00:00.000Z"
}

concierge.guest_pass.revoked

Version 1 · PII tier LOW · requires GUEST_PASS_MANAGE

FieldTypeRequiredDescription
guestPassIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "guestPassId": "gp_1",
  "unitId": "unit_2"
}

concierge.incident.created

Version 1 · PII tier LOW · requires INCIDENT_MANAGE

FieldTypeRequiredDescription
incidentIdstringyes—
categorystringyes—
severitystringyes—
Example payload
{
  "incidentId": "inc_1",
  "category": "SECURITY",
  "severity": "HIGH"
}

concierge.incident.resolved

Version 1 · PII tier LOW · requires INCIDENT_MANAGE

FieldTypeRequiredDescription
incidentIdstringyes—
resolvedByUserIdstring | nullyes—
Example payload
{
  "incidentId": "inc_1",
  "resolvedByUserId": "usr_9"
}

concierge.shift_note.recorded

Version 1 · PII tier LOW · requires SHIFT_NOTES

FieldTypeRequiredDescription
shiftNoteIdstringyes—
categorystringyes—
authorIdstring | nullyes—
Example payload
{
  "shiftNoteId": "sn_1",
  "category": "HANDOFF",
  "authorId": "usr_9"
}

concierge.visitor.checked_in

Version 1 · PII tier LOW · requires VISITOR_MANAGE

FieldTypeRequiredDescription
visitorIdstringyes—
unitIdstring | nullyes—
guestPassIdstring | nullyes—
purposestring | nullyes—
Example payload
{
  "visitorId": "vis_1",
  "unitId": "unit_2",
  "guestPassId": "gp_1",
  "purpose": "DELIVERY"
}

concierge.visitor.checked_out

Version 1 · PII tier LOW · requires VISITOR_MANAGE

FieldTypeRequiredDescription
visitorIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "visitorId": "vis_1",
  "unitId": "unit_2"
}

deposit.ledger.deducted

Version 1 · PII tier MODERATE · requires DEPOSIT_LEDGER_VIEW

FieldTypeRequiredDescription
depositIdstringyes—
amountCentsnumberyes—
reasonstring | nullyes—
Example payload
{
  "depositId": "dep_1",
  "amountCents": 5000,
  "reason": "DAMAGE"
}

deposit.ledger.recorded

Version 1 · PII tier LOW · requires DEPOSIT_LEDGER_VIEW

FieldTypeRequiredDescription
depositIdstringyes—
leaseIdstring | nullyes—
amountCentsnumberyes—
Example payload
{
  "depositId": "dep_1",
  "leaseId": "lease_1",
  "amountCents": 105000
}

deposit.ledger.refunded

Version 1 · PII tier LOW · requires DEPOSIT_LEDGER_VIEW

FieldTypeRequiredDescription
depositIdstringyes—
amountCentsnumberyes—
Example payload
{
  "depositId": "dep_1",
  "amountCents": 100000
}

deposit.ledger.transferred

Version 1 · PII tier LOW · requires DEPOSIT_LEDGER_VIEW

FieldTypeRequiredDescription
depositIdstringyes—
leaseIdstring | nullyes—
fromUserIdstring | nullyes—
toUserIdstring | nullyes—
Example payload
{
  "depositId": "dep_1",
  "leaseId": "lease_1",
  "fromUserId": "usr_1",
  "toUserId": "usr_2"
}

document.file.categorized

Version 1 · PII tier LOW · requires DOCUMENT_VIEW

FieldTypeRequiredDescription
documentIdstringyes—
categoryIdstring | nullyes—
previousCategoryIdstring | nullyes—
Example payload
{
  "documentId": "doc_1",
  "categoryId": "cat_3",
  "previousCategoryId": null
}

document.file.deleted

Version 1 · PII tier LOW · requires DOCUMENT_VIEW

FieldTypeRequiredDescription
documentIdstringyes—
Example payload
{
  "documentId": "doc_1"
}

document.file.text_extracted

Version 1 · PII tier LOW · requires DOCUMENT_VIEW

FieldTypeRequiredDescription
documentIdstringyes—
Example payload
{
  "documentId": "doc_1"
}

document.file.uploaded

Version 1 · PII tier LOW · requires DOCUMENT_VIEW

FieldTypeRequiredDescription
documentIdstringyes—
categoryIdstring | nullyes—
mimeTypestring | nullyes—
Example payload
{
  "documentId": "doc_1",
  "categoryId": "cat_3",
  "mimeType": "application/pdf"
}

extension.installation.config_changed

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "scopeType": "BUILDING",
  "scopeId": "bld_1"
}

extension.installation.installed

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
versionIdstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "versionId": "ver_1",
  "scopeType": "BUILDING",
  "scopeId": "bld_1"
}

extension.installation.resumed

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "scopeType": "BUILDING",
  "scopeId": "bld_1"
}

extension.installation.suspended

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
reasonstring | nullyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "scopeType": "BUILDING",
  "scopeId": "bld_1",
  "reason": "billing hold"
}

extension.installation.uninstalled

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "scopeType": "BUILDING",
  "scopeId": "bld_1"
}

extension.installation.upgraded

Version 1 · PII tier NONE · requires EXTENSION_MANAGE

FieldTypeRequiredDescription
installationIdstringyes—
extensionIdstringyes—
extensionSlugstringyes—
scopeTypeBUILDING | MANAGEMENT_ORG | JURISDICTION | GLOBALyes—
scopeIdstringyes—
fromVersionIdstringyes—
toVersionIdstringyes—
Example payload
{
  "installationId": "inst_1",
  "extensionId": "ext_1",
  "extensionSlug": "acme-screening",
  "scopeType": "BUILDING",
  "scopeId": "bld_1",
  "fromVersionId": "ver_1",
  "toVersionId": "ver_2"
}

inbox.request.assigned

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
assigneeUserIdstring | nullyes—
Example payload
{
  "requestId": "req_1",
  "assigneeUserId": "usr_9"
}

inbox.request.created

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
statusstringyes—
categorystring | nullyes—
Example payload
{
  "requestId": "req_1",
  "status": "OPEN",
  "category": "PLUMBING"
}

inbox.request.reopened

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
Example payload
{
  "requestId": "req_1"
}

inbox.request.resolved

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
resolutionstring | nullyes—
Example payload
{
  "requestId": "req_1",
  "resolution": "RESOLVED"
}

inbox.request.routing_changed

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
previousRoutingModestringyes—
routingModestringyes—
Example payload
{
  "requestId": "req_1",
  "previousRoutingMode": "NORMAL",
  "routingMode": "ESCALATED_PMC"
}

inbox.request.status_changed

Version 1 · PII tier LOW · requires INBOX_REQUEST_VIEW

FieldTypeRequiredDescription
requestIdstringyes—
previousStatusstringyes—
statusstringyes—
Example payload
{
  "requestId": "req_1",
  "previousStatus": "OPEN",
  "status": "IN_PROGRESS"
}

invitation.invite.accepted

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
invitationIdstringyes—
membershipIdstringyes—
userIdstringyes—
Example payload
{
  "invitationId": "inv_1",
  "membershipId": "mem_1",
  "userId": "usr_1"
}

invitation.invite.sent

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
invitationIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "invitationId": "inv_1",
  "unitId": "unit_2"
}

leasing.lease.activated

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "leaseId": "lease_1",
  "unitId": "unit_2"
}

leasing.lease.created

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
unitIdstring | nullyes—
statusstringyes—
Example payload
{
  "leaseId": "lease_1",
  "unitId": "unit_2",
  "status": "DRAFT"
}

leasing.lease.sent

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "leaseId": "lease_1",
  "unitId": "unit_2"
}

leasing.lease.signed

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
unitIdstring | nullyes—
Example payload
{
  "leaseId": "lease_1",
  "unitId": "unit_2"
}

leasing.lease.terminated

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
reasonstring | nullyes—
Example payload
{
  "leaseId": "lease_1",
  "reason": "END_OF_TERM"
}

leasing.move.completed

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
moveEventIdstringyes—
kindstringyes—
Example payload
{
  "leaseId": "lease_1",
  "moveEventId": "move_1",
  "kind": "MOVE_IN"
}

leasing.move.scheduled

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
moveEventIdstringyes—
kindstringyes—
scheduledForstringyes—
Example payload
{
  "leaseId": "lease_1",
  "moveEventId": "move_1",
  "kind": "MOVE_IN",
  "scheduledFor": "2026-09-01T00:00:00.000Z"
}

leasing.renewal.accepted

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
renewalIdstringyes—
Example payload
{
  "leaseId": "lease_1",
  "renewalId": "ren_1"
}

leasing.renewal.declined

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
renewalIdstringyes—
Example payload
{
  "leaseId": "lease_1",
  "renewalId": "ren_1"
}

leasing.renewal.offered

Version 1 · PII tier LOW · requires LEASE_VIEW

FieldTypeRequiredDescription
leaseIdstringyes—
renewalIdstringyes—
offeredRentCentsnumber | nullyes—
Example payload
{
  "leaseId": "lease_1",
  "renewalId": "ren_1",
  "offeredRentCents": 210000
}

meeting.meeting.cancelled

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
Example payload
{
  "meetingId": "mtg_1"
}

meeting.meeting.created

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
typestringyes—
statusstringyes—
scheduledAtstring | nullyes—
Example payload
{
  "meetingId": "mtg_1",
  "type": "AGM",
  "status": "PLANNING",
  "scheduledAt": "2026-09-01T02:00:00.000Z"
}

meeting.meeting.ended

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
typestringyes—
hasMinutesbooleanyes—
Example payload
{
  "meetingId": "mtg_1",
  "type": "AGM",
  "hasMinutes": true
}

meeting.meeting.scheduled

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
scheduledAtstringyes—
Example payload
{
  "meetingId": "mtg_1",
  "scheduledAt": "2026-09-01T02:00:00.000Z"
}

meeting.minutes.published

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
documentIdstring | nullyes—
Example payload
{
  "meetingId": "mtg_1",
  "documentId": "doc_9"
}

meeting.motion.decided

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
motionIdstringyes—
resultstringyes—
yesVotesnumberyes—
noVotesnumberyes—
abstainVotesnumberyes—
Example payload
{
  "meetingId": "mtg_1",
  "motionId": "mo_7",
  "result": "PASSED",
  "yesVotes": 12,
  "noVotes": 3,
  "abstainVotes": 1
}

meeting.motion.proposed

Version 1 · PII tier LOW · requires MEETING_ATTEND

FieldTypeRequiredDescription
meetingIdstringyes—
motionIdstringyes—
voteTypestringyes—
decisionRulestringyes—
Example payload
{
  "meetingId": "mtg_1",
  "motionId": "mo_7",
  "voteType": "FOR_AGAINST",
  "decisionRule": "MAJORITY"
}

membership.member.created

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
membershipIdstringyes—
userIdstringyes—
unitIdstring | nullyes—
isOwnerbooleanyes—
isResidentbooleanyes—
managerRolestring | nullyes—
Example payload
{
  "membershipId": "mem_1",
  "userId": "usr_1",
  "unitId": "unit_2",
  "isOwner": false,
  "isResident": true,
  "managerRole": null
}

membership.member.removed

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
membershipIdstringyes—
userIdstringyes—
Example payload
{
  "membershipId": "mem_1",
  "userId": "usr_1"
}

membership.member.role_changed

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
membershipIdstringyes—
userIdstringyes—
previousManagerRolestring | nullyes—
managerRolestring | nullyes—
Example payload
{
  "membershipId": "mem_1",
  "userId": "usr_1",
  "previousManagerRole": null,
  "managerRole": "STRATA_COUNCIL"
}

membership.member.verified

Version 1 · PII tier LOW · requires DIRECTORY_VIEW

FieldTypeRequiredDescription
membershipIdstringyes—
userIdstringyes—
verificationstringyes—
Example payload
{
  "membershipId": "mem_1",
  "userId": "usr_1",
  "verification": "VERIFIED"
}

messaging.channel.created

Version 1 · PII tier LOW · requires CHANNEL_VIEW

FieldTypeRequiredDescription
conversationIdstringyes—
channelTypestringyes—
participantCountnumberyes—
Example payload
{
  "conversationId": "conv_1",
  "channelType": "USER",
  "participantCount": 4
}

messaging.conversation.created

Version 1 · PII tier LOW · requires MESSAGE_VIEW

FieldTypeRequiredDescription
conversationIdstringyes—
isGroupbooleanyes—
participantCountnumberyes—
Example payload
{
  "conversationId": "conv_1",
  "isGroup": false,
  "participantCount": 2
}

messaging.message.sent

Version 1 · PII tier LOW · requires MESSAGE_VIEW

FieldTypeRequiredDescription
conversationIdstringyes—
messageIdstringyes—
authorUserIdstringyes—
sourcestringyes—
hasAttachmentsbooleanyes—
Example payload
{
  "conversationId": "conv_1",
  "messageId": "msg_1",
  "authorUserId": "usr_9",
  "source": "APP",
  "hasAttachments": false
}

org.building.added

Version 1 · PII tier NONE · requires BUILDING_SETTINGS_VIEW

FieldTypeRequiredDescription
orgIdstringyes—
buildingIdstringyes—
Example payload
{
  "orgId": "org_1",
  "buildingId": "bld_1"
}

org.building.removed

Version 1 · PII tier NONE · requires BUILDING_SETTINGS_VIEW

FieldTypeRequiredDescription
orgIdstringyes—
buildingIdstringyes—
Example payload
{
  "orgId": "org_1",
  "buildingId": "bld_1"
}

package.parcel.logged

Version 1 · PII tier LOW · requires PACKAGE_VIEW

FieldTypeRequiredDescription
packageIdstringyes—
unitIdstringyes—
recipientUserIdstring | nullyes—
carrierstring | nullyes—
Example payload
{
  "packageId": "pkg_1",
  "unitId": "unit_2",
  "recipientUserId": "usr_1",
  "carrier": "UPS"
}

package.parcel.picked_up

Version 1 · PII tier LOW · requires PACKAGE_VIEW

FieldTypeRequiredDescription
packageIdstringyes—
unitIdstringyes—
pickedUpByUserIdstring | nullyes—
Example payload
{
  "packageId": "pkg_1",
  "unitId": "unit_2",
  "pickedUpByUserId": "usr_1"
}

pad.mandate.enrolled

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
mandateIdstringyes—
userIdstring | nullyes—
Example payload
{
  "mandateId": "pad_1",
  "userId": "usr_1"
}

pad.mandate.revoked

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
mandateIdstringyes—
userIdstring | nullyes—
Example payload
{
  "mandateId": "pad_1",
  "userId": "usr_1"
}

payment.transaction.failed

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
paymentIdstringyes—
amountCentsnumberyes—
reasonstring | nullyes—
Example payload
{
  "paymentId": "pay_1",
  "amountCents": 210000,
  "reason": "CARD_DECLINED"
}

payment.transaction.refunded

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
paymentIdstringyes—
amountCentsnumberyes—
Example payload
{
  "paymentId": "pay_1",
  "amountCents": 210000
}

payment.transaction.succeeded

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
paymentIdstringyes—
amountCentsnumberyes—
methodstring | nullyes—
Example payload
{
  "paymentId": "pay_1",
  "amountCents": 210000,
  "method": "PAD"
}

rent.charge.created

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
chargeIdstringyes—
leaseIdstring | nullyes—
amountCentsnumberyes—
dueOnstring | nullyes—
Example payload
{
  "chargeId": "chg_1",
  "leaseId": "lease_1",
  "amountCents": 210000,
  "dueOn": "2026-08-01"
}

rent.charge.failed

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
chargeIdstringyes—
leaseIdstring | nullyes—
reasonstring | nullyes—
Example payload
{
  "chargeId": "chg_1",
  "leaseId": "lease_1",
  "reason": "INSUFFICIENT_FUNDS"
}

rent.charge.paid

Version 1 · PII tier LOW · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
chargeIdstringyes—
leaseIdstring | nullyes—
amountCentsnumberyes—
Example payload
{
  "chargeId": "chg_1",
  "leaseId": "lease_1",
  "amountCents": 210000
}

rent.charge.waived

Version 1 · PII tier MODERATE · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
chargeIdstringyes—
leaseIdstring | nullyes—
amountCentsnumberyes—
reasonstring | nullyes—
Example payload
{
  "chargeId": "chg_1",
  "leaseId": "lease_1",
  "amountCents": 210000,
  "reason": "Tenant hardship — Feb rent waived"
}

rent.charge.written_off

Version 1 · PII tier MODERATE · requires RENT_LEDGER_VIEW

FieldTypeRequiredDescription
chargeIdstringyes—
leaseIdstring | nullyes—
amountCentsnumberyes—
reasonstring | nullyes—
Example payload
{
  "chargeId": "chg_1",
  "leaseId": "lease_1",
  "amountCents": 210000,
  "reason": "Uncollectable — tenant vacated"
}