Skip to main content

Event Catalog

Every webhook delivery contains a single event object. This page documents the event envelope structure and the payload for each event type.

Event Envelope

All events share the same top-level structure:

{
"id": "evt_abc123",
"type": "asset.created",
"organizationId": "o-xxxx",
"created": 1771911526,
"data": {
"object": { },
"previousAttributes": { }
},
"livemode": true
}
FieldTypeDescription
idstringUnique event identifier. Use this for idempotency. Format: evt_ prefix + random string.
typestringThe event type (e.g., asset.created). Determines the shape of data.object.
organizationIdstringThe organization where the event occurred.
createdintegerUnix timestamp (seconds) when the event was generated.
data.objectobjectThe full resource at the time of the event.
data.previousAttributesobjectFor .updated and .status.changed events only. Contains the fields that changed, with their previous values.
isTestbooleanPresent and true only on test events (webhook.test). Absent on real events.
livemodebooleantrue for real events, false for test events.
tip

The previousAttributes field makes it easy to detect exactly what changed without diffing the entire object. For .created events, this field is absent.


Asset Events

asset.created

Fired when a new asset is added to the organization.

{
"id": "evt_ast_001",
"type": "asset.created",
"organizationId": "o-xxxx",
"created": 1771911526,
"data": {
"object": {
"id": "ast-a1b2c3d4",
"name": "HVAC Unit #12",
"assetTypeId": "at-cooling",
"locationId": "loc-building-a",
"status": "Online",
"metadata": {
"manufacturer": "Daikin",
"model": "VRV-IV",
"serialNumber": "DK-2024-00412"
},
"created": 1771911526,
"updated": 1771911526
}
},
"livemode": true
}

asset.updated

Fired when any asset property is modified.

{
"id": "evt_ast_002",
"type": "asset.updated",
"organizationId": "o-xxxx",
"created": 1771912000,
"data": {
"object": {
"id": "ast-a1b2c3d4",
"name": "HVAC Unit #12 (Lobby)",
"assetTypeId": "at-cooling",
"locationId": "loc-building-a",
"status": "Online",
"metadata": {
"manufacturer": "Daikin",
"model": "VRV-IV",
"serialNumber": "DK-2024-00412"
},
"created": 1771911526,
"updated": 1771912000
},
"previousAttributes": {
"name": "HVAC Unit #12"
}
},
"livemode": true
}

asset.deleted

Fired when an asset is removed.

{
"id": "evt_ast_003",
"type": "asset.deleted",
"organizationId": "o-xxxx",
"created": 1771913000,
"data": {
"object": {
"id": "ast-a1b2c3d4",
"deleted": true
}
},
"livemode": true
}

asset.status.changed

Fired when an asset's operational status changes (e.g., Online to Offline, or to Maintenance).

{
"id": "evt_ast_004",
"type": "asset.status.changed",
"organizationId": "o-xxxx",
"created": 1771914000,
"data": {
"object": {
"id": "ast-a1b2c3d4",
"name": "HVAC Unit #12 (Lobby)",
"status": "Offline",
"created": 1771911526,
"updated": 1771914000
},
"previousAttributes": {
"status": "Online"
}
},
"livemode": true
}

Work Order Events

workorder.created

Fired when a new work order is opened.

{
"id": "evt_wo_001",
"type": "workorder.created",
"organizationId": "o-xxxx",
"created": 1771920000,
"data": {
"object": {
"id": "wo-x1y2z3",
"title": "Fix leaking pipe in B2 washroom",
"description": "Water leaking from ceiling pipe near sink area",
"status": "Open",
"priority": "High",
"locationId": "loc-building-b",
"assigneeId": "usr-tech-01",
"reportedBy": "usr-fm-manager",
"slaResponseDeadline": 1771927200,
"slaResolutionDeadline": 1771963200,
"created": 1771920000,
"updated": 1771920000
}
},
"livemode": true
}

workorder.updated

Fired when a work order's details are modified (title, description, priority, assignee, etc.).

{
"id": "evt_wo_002",
"type": "workorder.updated",
"organizationId": "o-xxxx",
"created": 1771921000,
"data": {
"object": {
"id": "wo-x1y2z3",
"title": "Fix leaking pipe in B2 washroom",
"status": "Open",
"priority": "Critical",
"locationId": "loc-building-b",
"assigneeId": "usr-tech-02",
"created": 1771920000,
"updated": 1771921000
},
"previousAttributes": {
"priority": "High",
"assigneeId": "usr-tech-01"
}
},
"livemode": true
}

workorder.status.changed

Fired when a work order transitions to a new status.

{
"id": "evt_wo_003",
"type": "workorder.status.changed",
"organizationId": "o-xxxx",
"created": 1771925000,
"data": {
"object": {
"id": "wo-x1y2z3",
"title": "Fix leaking pipe in B2 washroom",
"status": "InProgress",
"priority": "Critical",
"created": 1771920000,
"updated": 1771925000
},
"previousAttributes": {
"status": "Open"
}
},
"livemode": true
}

workorder.completed

Fired when a work order is marked as completed.

{
"id": "evt_wo_004",
"type": "workorder.completed",
"organizationId": "o-xxxx",
"created": 1771940000,
"data": {
"object": {
"id": "wo-x1y2z3",
"title": "Fix leaking pipe in B2 washroom",
"status": "Completed",
"priority": "Critical",
"completedAt": 1771940000,
"completedBy": "usr-tech-02",
"created": 1771920000,
"updated": 1771940000
},
"previousAttributes": {
"status": "InProgress"
}
},
"livemode": true
}

Booking Events

booking.created

Fired when a new booking is made.

{
"id": "evt_bk_001",
"type": "booking.created",
"organizationId": "o-xxxx",
"created": 1771950000,
"data": {
"object": {
"id": "bk-m1n2o3",
"resourceId": "res-meeting-room-5a",
"resourceName": "Meeting Room 5A",
"locationId": "loc-building-a",
"bookedBy": "usr-john",
"startTime": 1771963200,
"endTime": 1771966800,
"status": "Confirmed",
"created": 1771950000
}
},
"livemode": true
}

booking.cancelled

Fired when a booking is cancelled.

{
"id": "evt_bk_002",
"type": "booking.cancelled",
"organizationId": "o-xxxx",
"created": 1771955000,
"data": {
"object": {
"id": "bk-m1n2o3",
"resourceId": "res-meeting-room-5a",
"status": "Cancelled",
"cancelledBy": "usr-john",
"cancelledAt": 1771955000,
"created": 1771950000
},
"previousAttributes": {
"status": "Confirmed"
}
},
"livemode": true
}

booking.checked_in

Fired when a guest checks in for their booking.

{
"id": "evt_bk_003",
"type": "booking.checked_in",
"organizationId": "o-xxxx",
"created": 1771963500,
"data": {
"object": {
"id": "bk-m1n2o3",
"resourceId": "res-meeting-room-5a",
"status": "CheckedIn",
"checkedInAt": 1771963500,
"created": 1771950000
},
"previousAttributes": {
"status": "Confirmed"
}
},
"livemode": true
}

Visitor Events

visitor.registered

Fired when a new visitor is pre-registered.

{
"id": "evt_vis_001",
"type": "visitor.registered",
"organizationId": "o-xxxx",
"created": 1771970000,
"data": {
"object": {
"id": "vis-p1q2r3",
"name": "Jane Smith",
"email": "jane.smith@example.com",
"company": "Acme Corp",
"hostId": "usr-john",
"locationId": "loc-building-a",
"expectedArrival": 1771984800,
"status": "Registered",
"created": 1771970000
}
},
"livemode": true
}

visitor.checked_in

Fired when a visitor checks in at the location.

{
"id": "evt_vis_002",
"type": "visitor.checked_in",
"organizationId": "o-xxxx",
"created": 1771984900,
"data": {
"object": {
"id": "vis-p1q2r3",
"name": "Jane Smith",
"status": "CheckedIn",
"checkedInAt": 1771984900,
"created": 1771970000
},
"previousAttributes": {
"status": "Registered"
}
},
"livemode": true
}

visitor.checked_out

Fired when a visitor checks out.

{
"id": "evt_vis_003",
"type": "visitor.checked_out",
"organizationId": "o-xxxx",
"created": 1771999200,
"data": {
"object": {
"id": "vis-p1q2r3",
"name": "Jane Smith",
"status": "CheckedOut",
"checkedOutAt": 1771999200,
"created": 1771970000
},
"previousAttributes": {
"status": "CheckedIn"
}
},
"livemode": true
}

SOR Events (Schedule of Rates)

sor.schedule.published

Fired when a SOR schedule is published and made active.

{
"id": "evt_sor_001",
"type": "sor.schedule.published",
"organizationId": "o-xxxx",
"created": 1772000000,
"data": {
"object": {
"id": "sor-sch-a1b2c3",
"name": "FY2026 Maintenance Rates",
"status": "Published",
"effectiveFrom": 1772000000,
"effectiveTo": 1803536000,
"itemCount": 245,
"publishedBy": "usr-fm-manager",
"publishedAt": 1772000000,
"created": 1771900000
},
"previousAttributes": {
"status": "Draft"
}
},
"livemode": true
}

sor.quotation.submitted

Fired when a SOR quotation is submitted for approval.

{
"id": "evt_sor_002",
"type": "sor.quotation.submitted",
"organizationId": "o-xxxx",
"created": 1772010000,
"data": {
"object": {
"id": "sor-qt-d4e5f6",
"scheduleId": "sor-sch-a1b2c3",
"workOrderId": "wo-x1y2z3",
"status": "Submitted",
"totalAmountCents": 1250000,
"lineItemCount": 8,
"submittedBy": "usr-contractor-01",
"submittedAt": 1772010000,
"created": 1772005000
},
"previousAttributes": {
"status": "Draft"
}
},
"livemode": true
}
info

Money values are always in integer cents. 1250000 = $12,500.00.

sor.quotation.approved

Fired when a SOR quotation is approved.

{
"id": "evt_sor_003",
"type": "sor.quotation.approved",
"organizationId": "o-xxxx",
"created": 1772020000,
"data": {
"object": {
"id": "sor-qt-d4e5f6",
"scheduleId": "sor-sch-a1b2c3",
"workOrderId": "wo-x1y2z3",
"status": "Approved",
"totalAmountCents": 1250000,
"approvedBy": "usr-fm-manager",
"approvedAt": 1772020000,
"created": 1772005000
},
"previousAttributes": {
"status": "Submitted"
}
},
"livemode": true
}

Test Events

webhook.test

Sent when you click "Send Test" in the dashboard or call the test endpoint. Use this to verify your endpoint is reachable and your signature verification works.

{
"id": "evt_test_xyz789",
"type": "webhook.test",
"organizationId": "o-xxxx",
"created": 1771911600,
"data": {
"object": {
"message": "This is a test webhook event from Infodeck"
}
},
"isTest": true,
"livemode": false
}
danger

Test events have livemode: false and isTest: true. Your handler should process them normally but avoid triggering side effects (e.g., do not create real records from test events).

Was this page helpful?