Silver Shield Integration API (Part Webhook) (5.0.0)

Download OpenAPI specification:

Silver Shield Dev Team: support@pontosense.com License: Apache 2.0

Overview

The Silver Shield Webhook API enables real-time event notifications to be delivered to your configured callback endpoints. This push-based mechanism ensures your systems receive immediate updates as events occur in the Silver Shield platform.

Event Categories

Silver Shield webhooks are organized into four primary categories:

1. Sensor Raw Events (sensor.raw.config)

Unprocessed data directly from sensors, primarily used for device configuration synchronization and monitoring. These events provide essential device-level information such as scan area settings, firmware versions, and detection thresholds.

2. Sensor Detection Events (sensor.detection.*)

Business logic-processed events representing meaningful occurrences such as fall detection, occupancy status, and sensor health monitoring.

3. Resource Change Events (resource.*)

Lifecycle notifications for system resources including sensors, users, homes, rooms, and configurations. These events track creation, updates, and deletion operations.

4. System Events (system.*)

Platform-level notifications such as firmware releases and system-wide updates.

Payload Structure

  • Sensor Events (sensor.raw.config, sensor.detection.*): Complete payload with all sensor and event details
  • System Events (system.*): Full payload containing comprehensive system event information
  • Resource Events (resource.*): Lightweight payload containing only resource identifiers (id or sn) for efficient processing

Security & Verification

All webhook requests are signed using HMAC-SHA256 symmetric encryption to verify authenticity and prevent tampering:

  • Signature Components: msg_id.timestamp.payload
  • Signature Format: v1,base64(hmac_sha256(msg_id.timestamp.payload, secret))
  • Verification: Always validate the signature to ensure requests originate from Silver Shield. See the header documentation below for detailed verification steps.

Webhook

Event notification callbacks pushed to your configured endpoints

Receive webhook event notification

Implementation Requirements

Your webhook endpoint must handle the following responsibilities:

  1. Signature Verification: Always verify the HMAC-SHA256 signature using your secret key to confirm the request originates from Silver Shield
  2. Idempotency: Use the webhook-id header as an idempotency key. The same webhook-id may be delivered multiple times (e.g., due to retries), so ensure your processing handles duplicate events gracefully
  3. Response Handling: Return a 2xx status code to indicate successful processing. Non-2xx responses will trigger automatic retry
  4. Performance: Process requests quickly to prevent timeout. Long-running operations should be handled asynchronously after acknowledging the webhook
header Parameters
required
object

Security headers for request authentication and integrity verification. These headers must be validated before processing the webhook payload.

Critical: Always reject requests with missing or invalid signature headers to prevent security vulnerabilities.

Request Body schema: application/json
required

Webhook event message body.

Event-specific delivery rules:

  • sensor.detection.bed_in is delivered only after the person remains in the bed area for at least 30 seconds.
  • sensor.detection.bed_out is delivered only if the previous confirmed state was bed_in. If the person stays in bed for less than 30 seconds and then leaves, neither bed_in nor bed_out will be delivered.
  • sensor.detection.couch_in is delivered only after the person remains in the couch area for at least 30 seconds.
  • sensor.detection.couch_out is delivered only if the previous confirmed state was couch_in. If the person stays on the couch for less than 30 seconds and then leaves, neither couch_in nor couch_out will be delivered.
  • sensor.detection.door_in and sensor.detection.door_out are rate-limited to at most one notification per minute for each event type.
  • sensor.detection.fall_detected is delivered only when the device has been properly calibrated. If any of the scan area parameters left, right, or height is not set, or if the device has a mount angle error, no fall detection event will be delivered.
eventId
required
integer <int64> (EventId) >= 1

Unique identifier for an event in the system.

eventType
required
string (EventType)
Enum: "sensor.raw.config" "sensor.detection.online" "sensor.detection.offline" "sensor.detection.occupied" "sensor.detection.vacant" "sensor.detection.bed_in" "sensor.detection.bed_out" "sensor.detection.couch_in" "sensor.detection.couch_out" "sensor.detection.door_in" "sensor.detection.door_out" "sensor.detection.fall_detected" "sensor.detection.fall_recovered" "sensor.detection.mount_angle_skewed" "sensor.detection.device_recovered" "sensor.detection.device_malfunctioning" "sensor.detection.upgrade_started" "sensor.detection.upgrade_succeeded" "sensor.detection.upgrade_failed" "resource.sensor.created" "resource.sensor.updated" "resource.sensor.deleted" "resource.sensor.config_updated" "resource.sensor.fall_threshold_updated" "resource.sensor.zones_updated" "resource.sensor.bind_room" "resource.user.created" "resource.user.batch_created" "resource.user.updated" "resource.user.deleted" "resource.user.bind_home_updated" "resource.user.bind_label_updated" "resource.home.created" "resource.home.updated" "resource.home.deleted" "resource.home.bind_user_updated" "resource.home.bind_label_updated" "resource.room.created" "resource.room.updated" "resource.room.deleted" "resource.home_label.created" "resource.home_label.updated" "resource.home_label.deleted" "resource.home_label.bind_home_updated" "resource.home_label.bind_user_updated" "resource.tenant.created" "resource.tenant.updated" "resource.tenant.deleted" "system.firmware.published"

Event Type Classification

Event Type Data Schema Description
sensor.raw.config ConfigReportData Device configuration synchronization
sensor.detection.online SensorOnlineData Sensor came online
sensor.detection.offline SensorOfflineData Sensor went offline
sensor.detection.occupied OccupiedData Person detected in room
sensor.detection.vacant VacantData Room is empty
sensor.detection.bed_in BedInData Person entered bed (with positions)
sensor.detection.bed_out BedOutData Person left bed
sensor.detection.couch_in CouchInData Person on couch (with positions)
sensor.detection.couch_out CouchOutData Person left couch
sensor.detection.door_in DoorInData Person entered room
sensor.detection.door_out DoorOutData Person exited room
sensor.detection.fall_detected FallDetectedData ⚠️ Fall detected (with positions)
sensor.detection.fall_recovered FallRecoveredData Person recovered from fall
sensor.detection.mount_angle_skewed MountAngleSkewedData Installation angle misalignment
sensor.detection.device_recovered SensorRecoveredData Sensor recovered from malfunction
sensor.detection.device_malfunctioning SensorMalfunctioningData Sensor malfunction detected
sensor.detection.upgrade_started UpgradeStartedData Firmware upgrade initiated
sensor.detection.upgrade_succeeded UpgradeSucceededData Firmware upgrade completed
sensor.detection.upgrade_failed UpgradeFailedData Firmware upgrade failed
resource.sensor.created SensorThinData Sensor added
resource.sensor.updated SensorThinData Sensor modified
resource.sensor.deleted SensorBatchThinData Sensor(s) removed
resource.sensor.config_updated SensorThinData Sensor configuration changed
resource.sensor.fall_threshold_updated SensorThinData Fall threshold modified
resource.sensor.zones_updated SensorThinData Detection zones changed
resource.sensor.bind_room SensorThinData Sensor-room binding changed
resource.user.created UserThinData User added
resource.user.batch_created UserBatchThinData Multiple users added
resource.user.updated UserThinData User modified
resource.user.deleted UserBatchThinData User(s) removed
resource.user.bind_home_updated UserThinData User-home binding changed
resource.user.bind_label_updated UserThinData User-label binding changed
resource.home.created HomeThinData Home added
resource.home.updated HomeThinData Home modified
resource.home.deleted HomeBatchThinData Home(s) removed
resource.home.bind_user_updated HomeThinData Home-user binding changed
resource.home.bind_label_updated HomeThinData Home-label binding changed
resource.room.created RoomThinData Room added
resource.room.updated RoomThinData Room modified
resource.room.deleted RoomBatchThinData Room(s) removed
resource.home_label.created HomeLabelThinData Label added
resource.home_label.updated HomeLabelThinData Label modified
resource.home_label.deleted HomeLabelBatchThinData Label(s) removed
resource.home_label.bind_home_updated HomeLabelThinData Label-home binding changed
resource.home_label.bind_user_updated HomeLabelThinData Label-user binding changed
resource.tenant.created TenantThinData Tenant added
resource.tenant.updated TenantThinData Tenant modified
resource.tenant.deleted TenantBatchThinData Tenant(s) removed
system.firmware.published FirmwarePublishData Firmware release announced
tenantId
integer <int64> (TenantId) >= 1

Unique identifier for a tenant in the system.

A tenant represents an organization or customer entity that owns one or more homes, users, and sensors. This ID is automatically generated when a tenant is created and remains constant throughout the tenant's lifecycle. Used for referencing the tenant in API operations.

timestamp
required
string <date-time> (Timestamp)

Event occurrence time in ISO 8601 format

required
ConfigReportData (object) or SensorOnlineData (object) or SensorOfflineData (object) or OccupiedData (object) or VacantData (object) or BedInData (object) or BedOutData (object) or CouchInData (object) or CouchOutData (object) or DoorInData (object) or DoorOutData (object) or FallDetectedData (object) or FallRecoveredData (object) or MountAngleSkewedData (object) or SensorRecoveredData (object) or SensorMalfunctioningData (object) or UpgradeStartedData (object) or UpgradeSucceededData (object) or UpgradeFailedData (object) or SensorThinData (object) or SensorBatchThinData (object) or UserThinData (object) or UserBatchThinData (object) or HomeThinData (object) or HomeBatchThinData (object) or RoomThinData (object) or RoomBatchThinData (object) or HomeLabelThinData (object) or HomeLabelBatchThinData (object) or TenantThinData (object) or TenantBatchThinData (object) or FirmwarePublishData (object)

Event-specific payload data

The structure of this field varies based on the eventType value.

Important delivery rules:

  • bed_in and couch_in require at least 30 seconds of continuous presence before delivery.
  • bed_out and couch_out are delivered only after a previously confirmed bed_in or couch_in state.
  • door_in and door_out are rate-limited to at most one notification per minute for each event type.
  • fall_detected is not delivered when the device is not calibrated or has a mount angle error. If any of the scan area parameters left, right, or height is not set, fall_detected will not be delivered.

How to find the correct schema:

  1. Look at the eventType field value (e.g., sensor.raw.config)
  2. Find the corresponding data schema from the mapping table above
  3. Click/tap the schema link (e.g., ConfigReportData) to view its full definition

Payload Types:

  • Full payload (sensor.raw.*, sensor.detection.*, system.*): Complete event data
  • Thin payload (resource.*): Only resource identifiers (id or sn). Use REST API to fetch full details if needed.

Responses

Request samples

Content type
application/json
Example
{
  • "eventId": 3,
  • "eventType": "sensor.raw.config",
  • "tenantId": 153498752,
  • "timestamp": "2024-12-24T12:00:03.456789Z",
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "success": true
}