Skip to main content

Event Stream

The signageOS Event Stream delivers domain and telemetry events to HTTPS webhooks or Azure Event Hubs. Device system logs are available through Azure Event Hubs only. See the supported destinations and delivery guarantees before choosing event subscriptions.

Set up an exporter​

Choose a destination walkthrough or manage an existing exporter:

For the concepts, see Introduction to Event Stream Distributor.

Delivery format​

Both destinations receive a JSON event body. Webhooks receive it in an HTTP POST; Azure Event Hubs receives it as an AMQP message. The exporter's format version selects the envelope below.

Format version 1 example​

{
"id": "0197f2a4-3a5e-7b1c-9d2f-8c4e6a1b3d5f",
"kind": "domain",
"type": "Device.Verification.DevicePaired",
"payload": {
"deviceIdentityHash": "8d6b3da0xxxxxxxxxxxxxxxx1d40293e",
"owner": {
"ownershipType": "organization",
"organizationUid": "8742ac98xxxxxxxxxxxxxxxx4b8c354c",
"parentCompanyUid": "5e4d8e7cxxxxxxxxxxxxxxxx6dcde5ea"
},
"type": "Device.Verification.DevicePaired",
"verificationHash": "1c61025fxxxxxxxxxxxxxxxxc517e042"
}
}

Format version 2 example​

Version 2 has two more fields: dispatchedAt and attemptNumber:

{
"id": "0197f2a4-3a5e-7b1c-9d2f-8c4e6a1b3d5f",
"kind": "domain",
"type": "Device.Verification.DevicePaired",
"payload": {
"deviceIdentityHash": "8d6b3da0xxxxxxxxxxxxxxxx1d40293e",
"owner": {
"ownershipType": "organization",
"organizationUid": "8742ac98xxxxxxxxxxxxxxxx4b8c354c",
"parentCompanyUid": "5e4d8e7cxxxxxxxxxxxxxxxx6dcde5ea"
},
"type": "Device.Verification.DevicePaired",
"verificationHash": "1c61025fxxxxxxxxxxxxxxxxc517e042"
},
"dispatchedAt": "2026-01-01T00:00:00.000Z",
"attemptNumber": 0
}
FieldVersionTypeDescription
id1+stringEvent identifier. Stable across repeated domain and telemetry deliveries; use it to deduplicate them. System logs receive a new ID at export time, not a stable deduplication key.
kind1+"domain" | "telemetry" | "systemLog"Event category. System logs are available through Azure Event Hubs only.
type1+stringFull subscription identifier from the catalogue below.
payload1+objectEvent-specific data, documented on each event page.
dispatchedAt2+stringISO 8601 event time. Stable across retries. Deliveries can arrive out of order; buffer and sort by this field, not arrival time or X-SOS-Timestamp.
attemptNumber2+numberDelivery attempt starting at 0. Increases on retries; always 0 for events delivered without retries. A duplicate delivery can repeat the same number, so do not use it to deduplicate.

Format versions​

Every exporter carries a formatVersion (1 or 2) selecting the delivery envelope it receives. It can be set when creating the exporter and changed at any time. An exporter created without the field uses version 1, including exporters created before format versions existed.

A format version covers the envelope fields and header semantics only. Event-specific payload contents are not versioned. New payload fields may appear at any time, so parse the payload leniently.

  • Version 1, legacy: the four-field envelope above.
  • Version 2: adds dispatchedAt and attemptNumber. Deliveries can arrive out of order, so buffer them for a short window and apply them in dispatchedAt order.

Webhook headers​

Webhook deliveries include the following HTTP headers:

HeaderDescriptionPresence
X-SOS-Sequence-NumberStringified integer. A counter per exporter, assigned when ESD accepts the event and kept on retries. Deliveries can arrive out of order; a gap means that an event is still pending or failedDomain events only
X-SOS-Exporter-Config-UidUID of the exporter configuration that produced this deliveryAll events
X-SOS-TimestampUnix timestamp in seconds of the delivery attempt. A retried delivery is signed with a fresh value. Never use it to order or deduplicate events - use the body id to deduplicateAll events
X-SOS-SignatureBase64 HMAC-SHA256, prefixed with v1=, over {METHOD}{url}{timestamp}{body} (uppercased HTTP method, concatenated, no separators) using your configured webhook secretAll events

Azure Event Hubs metadata​

Azure Event Hubs messages carry the same JSON body, with messageId set to the event ID. Metadata is sent as lowercase AMQP application properties, rather than HTTP headers:

PropertyDescription
x-sos-exporter-config-uidExporter configuration UID.
x-sos-timestampDelivery-attempt time as a Unix timestamp in milliseconds. Webhook timestamps use seconds.
x-sos-sequence-numberDomain events only. The same per-exporter counter as the webhook header, sent as a number.

Webhook HMAC signatures do not apply to Azure Event Hubs messages.

Event catalogue​

Alert​

Event typeEmitted when
Alert.AlertArchivedEmitted when a user resolves the whole alert. The alert's devices stay assigned; consumers tracking per-device alert state should treat all previously assigned devices as no longer alerting.
Alert.AlertDeviceAssignedEmitted when an alert becomes active on a device, one event per device.
Alert.AlertDeviceUnassignedEmitted when an alert stops being active on a device, one event per device.
Alert.AlertUnarchivedEmitted when a user reverts a manual alert resolution. The alert becomes active again with the same device assignments it had when it was resolved; no new AlertDeviceAssigned events are emitted.

Device​

Event typeEmitted when
Device.DeviceConnectionAddedEmitted when a device's socket connection goes online.
Device.DeviceConnectionDeletedEmitted when a device's socket connection goes offline.

Device / Provisioning Recipe​

Event typeEmitted when
Device.ProvisioningRecipeCreatedEmitted when a new provisioning recipe is created for a device.
Device.ProvisioningRecipeDeletedEmitted when a provisioning recipe is deleted.
Device.ProvisioningRecipeStatusUpdatedEmitted when the status of a provisioning recipe changes (e.g. Pending, Applied, Failed).
Device.ProvisioningRecipeUpdatedEmitted when an existing provisioning recipe is updated.

Device / System Log​

Event typeEmitted when
Device.SystemLog.AppletRunningPeriodic report that an applet is running on a device.
Device.SystemLog.AppletStartedReported when an applet starts on a device.
Device.SystemLog.ApplicationStartedReported when the signageOS application starts on a device.
Device.SystemLog.AutoRecoveryPerformedReported when a device recovered itself while the application was not running.
Device.SystemLog.DeviceAlivePeriodic keep-alive reported by a running device.
Device.SystemLog.DisplayConnectedOverSerialReported when a display is connected to a device over a serial line.
Device.SystemLog.NetworkChangedReported when a device's network interfaces change.
Device.SystemLog.PolicyChangedReported when the policy applied on a device changes.
Device.SystemLog.PowerActionPerformedReported when a power action (reboot, applet restart, display power, …) is performed on a device.
Device.SystemLog.SocketConnectedReported when a device establishes its socket connection to the platform.
Device.SystemLog.SocketConnectionFailedReported when a device fails to establish its socket connection to the platform.
Device.SystemLog.SocketDisconnectedReported when a device's socket connection to the platform is closed.
Device.SystemLog.TimeSettingsChangedReported when a device's time settings change.

Device / Telemetry​

Event typeEmitted when
Device.Telemetry.DeviceTelemetryRecordUpdatedEmitted when a device telemetry record is updated, such as a reported volume or brightness measurement. name identifies the measurement, and data contains its corresponding value.

Device / Verification​

Event typeEmitted when
Device.Verification.DevicePairedEmitted when a device is paired with a verification hash.
Device.Verification.DeviceUnpairedEmitted when a device is unpaired from its verification hash.