{"asyncapi":"3.0.0","info":{"title":"Rhombus Console WebSocket API","version":"1.0.0","description":"Real-time change events from the Rhombus platform, delivered over a **STOMP 1.2** session framed on a secure WebSocket.\n\nClients open a WebSocket to the Rhombus WebSocket service, complete a STOMP handshake, then `SUBSCRIBE` to their organization's change destination `/topic/change/{orgUuid}`. The server pushes a `MESSAGE` frame when entities in the organization change: new policy alerts, camera and sensor state, door and access-control components, policies, saved clips and more. Policy alerts are fully modeled below; other entities share the generic envelope.\n\n### Connection lifecycle\nSTOMP frames are sent as WebSocket text messages. Each frame is `COMMAND\\n` + `header:value\\n` lines + a blank line + body, terminated by a NULL (`\\u0000`) byte.\n\n1. **Open WebSocket** to the server URL with a credential on the handshake: an API key in the `x-auth-apikey` header with `x-auth-scheme=api-token`; an OAuth access token with the `read` scope as `Authorization: Bearer <token>`; or a federated token as `x-auth-scheme=federated-token` and `x-auth-ft`, in headers or the query string. Partner credentials also send the client organization's UUID in the `x-auth-org` header. The handshake request authenticates itself; no prior HTTP session is needed.\n2. **CONNECT** — send `accept-version:1.2` and `heart-beat:10000,10000`.\n3. **CONNECTED** — server confirms the session.\n4. **SUBSCRIBE** — send `id:sub-0` and `destination:/topic/change/{orgUuid}`.\n5. **MESSAGE** — server streams change events as STOMP `MESSAGE` frames whose body is the JSON documented here.\n6. **Heartbeats** — client sends a bare newline (`\\n`) every 10s to keep the connection alive.\n7. **DISCONNECT** — send on clean shutdown.\n\n### Authentication\n- **Credentials.** API keys (standard or partner) and OAuth access tokens go in headers; a federated token can also go in the query string, so a browser can connect directly. Certificate (mTLS) keys aren't accepted.\n- **Partners.** A partner credential must send `x-auth-org` as a header; without it the handshake is refused with 403 `PERMISSION_REQUIRED`.\n- **Refusals.** A refused handshake gets an HTTP status (401 when the credential is missing, unknown, expired or revoked; 403 when it's valid but not allowed; 429 when rate limited) and the JSON body `{msg, error, errorCode, errorMsg, status, timestamp, txid}`.\n- **Revocation.** The credential is re-checked about once a minute. Deleting or revoking it, or changing its role, sends a STOMP `ERROR` frame and closes the socket with code `1008` within 60 seconds.\n- **Browser sessions.** A handshake that uses a Rhombus console session is accepted only from a Rhombus console origin.\n\n### Delivery\n- **At most once.** Messages aren't acknowledged, stored or replayed: anything published while you are disconnected is lost, and a message that the service can't process within 30 seconds of publication is dropped. Reconcile with the REST API after a reconnect.\n- **Filtered by role.** A connection receives only what its credential's role can see. A policy alert is delivered when the role can access the alert's device or location; an alert with neither goes only to full-access roles. A role limited to some locations or devices receives only the entity types the server can check against them.\n- **No ordering guarantee.** Order events by their timestamps, not by arrival.\n- **Frames.** The body is JSON; the frame's `content-type` header says `text/plain;charset=UTF-8`. Key order in the body varies, and null fields are omitted.\n- **Liveness.** The server always answers `CONNECTED` with `heart-beat:10000,10000`. Send the STOMP `CONNECT` frame within 60 seconds of opening the socket, and send heartbeats, or the connection is closed. A client that can't keep up (10 seconds of blocked sends, or 512 KiB of unsent messages) is disconnected.\n- **New values.** New entity types, change types, fields and enum values can appear at any time; ignore what you don't recognize.","contact":{"name":"Rhombus Support","email":"support@rhombus.com","url":"https://developer.rhombus.com"},"license":{"name":"Rhombus API Terms","url":"https://www.rhombus.com"}},"servers":{"production":{"host":"ws.rhombussystems.com:8443","pathname":"/websocket","protocol":"wss","description":"Production STOMP-over-WebSocket endpoint (US region).","security":[{"$ref":"#/components/securitySchemes/apiKey"},{"$ref":"#/components/securitySchemes/oauthBearer"},{"$ref":"#/components/securitySchemes/federatedToken"}]},"production-eu":{"host":"ws.eu.rhombussystems.com:8443","pathname":"/websocket","protocol":"wss","description":"Production STOMP-over-WebSocket endpoint (EU region). Used by organizations provisioned in the EU.","security":[{"$ref":"#/components/securitySchemes/apiKey"},{"$ref":"#/components/securitySchemes/oauthBearer"},{"$ref":"#/components/securitySchemes/federatedToken"}]}},"channels":{"orgChangeStream":{"address":"/topic/change/{orgUuid}","title":"Organization Change Stream","description":"STOMP destination that emits a `MESSAGE` frame for every entity change in the organization. Subscribe with a STOMP `SUBSCRIBE` frame (`destination:/topic/change/{orgUuid}`). Resolve `orgUuid` from `POST /api/org/getOrgV2` (`org.uuid`).","servers":[{"$ref":"#/servers/production"},{"$ref":"#/servers/production-eu"}],"parameters":{"orgUuid":{"$ref":"#/components/parameters/orgUuid"}},"messages":{"policyAlertChange":{"$ref":"#/components/messages/PolicyAlertChangeEvent"},"changeEvent":{"$ref":"#/components/messages/ChangeEvent"}},"bindings":{"ws":{"bindingVersion":"0.1.0","headers":{"type":"object","properties":{"x-auth-apikey":{"type":"string","description":"API key (standard or partner), with `x-auth-scheme=api-token`. Header only. Certificate (mTLS) keys aren't accepted."},"Authorization":{"type":"string","description":"`Bearer <OAuth access token>`. The token's grant must include the `read` scope. With no `x-auth-scheme`, a Bearer token is read as an OAuth access token."},"x-auth-ft":{"type":"string","description":"Federated token, with `x-auth-scheme=federated-token`. May also be sent as a query parameter."},"x-auth-org":{"type":"string","description":"Client organization UUID. Required for partner credentials (otherwise 403 `PERMISSION_REQUIRED`); a blank value counts as absent. Header only; it is not read from the query string."}}},"query":{"type":"object","properties":{"x-auth-scheme":{"type":"string","enum":["api-token","api-oauth-token","federated-token","partner-api-token","partner-api-oauth-token"],"description":"The credential's scheme. May also be sent as a request header. Leave it out to send an OAuth access token as `Authorization: Bearer`. `partner-api-token` and `partner-api-oauth-token` are aliases of `api-token` and `api-oauth-token`."},"x-auth-ft":{"type":"string","description":"Federated token, with `x-auth-scheme=federated-token`. Lets a browser authenticate the handshake."}}}}}}},"operations":{"receiveOrgChanges":{"action":"receive","channel":{"$ref":"#/channels/orgChangeStream"},"title":"Subscribe to organization change events","summary":"Stream real-time policy alerts and entity changes for an organization.","description":"After the STOMP `CONNECT`/`CONNECTED` handshake, send a `SUBSCRIBE` frame for `/topic/change/{orgUuid}`. The server then pushes change events as STOMP `MESSAGE` frames until you `DISCONNECT` or the socket closes. Messages are filtered by the credential's role. Filter client-side on the `entity` field (e.g. `POLICY_ALERT`).","messages":[{"$ref":"#/channels/orgChangeStream/messages/policyAlertChange"},{"$ref":"#/channels/orgChangeStream/messages/changeEvent"}]}},"components":{"securitySchemes":{"apiKey":{"type":"httpApiKey","in":"header","name":"x-auth-apikey","description":"Rhombus API key (standard or partner) sent as a WebSocket request header, with `x-auth-scheme=api-token` as a query parameter or header. Certificate (mTLS) keys aren't accepted."},"oauthBearer":{"type":"http","scheme":"bearer","description":"OAuth access token from Sign in with Rhombus, sent as `Authorization: Bearer <token>`. The grant must include the `read` scope, or the handshake is refused with 403 `PERMISSION_REQUIRED` and `WWW-Authenticate: Bearer error=\"insufficient_scope\", scope=\"read\"`."},"federatedToken":{"type":"httpApiKey","in":"query","name":"x-auth-ft","description":"Federated token minted with `POST /api/org/generateFederatedSessionToken`, with `x-auth-scheme=federated-token`. Both may also be sent as headers. A token minted with `domain` is accepted only when the handshake's `Origin` matches it (otherwise 403 `DOMAIN_NOT_ALLOWED`)."}},"parameters":{"orgUuid":{"description":"Organization UUID. Resolve from POST /api/org/getOrgV2 (org.uuid)."}},"messages":{"PolicyAlertChangeEvent":{"name":"PolicyAlertChangeEvent","title":"Policy Alert Change Event","summary":"A new policy alert, or a change to one.","contentType":"application/json","description":"A `CREATE` carries the whole alert in `update`; it is sent once, when the alert is first stored, so fields that Rhombus fills in later (such as `finalized` and clip locations) can still be at their initial values. Read the alert from the REST API when you need its final state. `UPDATE` and `DELETE` carry only `entityUuid`. `DELETE` messages are limited to one per organization every 10 minutes, so don't rely on them to track every removed alert. A policy alert is delivered only to a role that can access the alert's device or location; an alert with neither goes only to full-access roles.","payload":{"$ref":"#/components/schemas/PolicyAlertChangePayload"},"examples":[{"name":"newAlert","summary":"A new human-detection alert","payload":{"entity":"POLICY_ALERT","type":"CREATE","update":{"alertMonitoringVerified":false,"clipLocationMap":{},"clipLocationMapV2":{},"deviceType":"CAMERA","deviceUuid":"ItkwWv1qT7Wy8-pY8KDesw","durationSec":12,"egressBoundaryDevices":[],"finalized":false,"ingressBoundaryDevices":[],"locationUuid":"Rk2pQ7yLT0qX4b1nVt8sJw","notificationSent":false,"numHumans":1,"orgUuid":"wEeifGSySTiD228kK7M-Xg","policyAlertTriggers":["MOTION_HUMAN"],"policyUuid":"pL0c7YvHQkWm3rN2aB9xCg","ruleUuid":"rU1e9KdLR3uJ5sP0qW2tYg","saved":false,"serverReceivedAtMs":1791367200850,"shared":false,"textDescription":"Human detected at Front Lobby","timestampMs":1791367200000,"type":"POLICY_ALERT_V2","uuid":"Xq3vT1bKQ2m8c9Zr0aLwYg"}}},{"name":"alertRemoved","summary":"An alert was removed or archived","payload":{"entity":"POLICY_ALERT","entityUuid":"Xq3vT1bKQ2m8c9Zr0aLwYg","type":"DELETE"}}],"headers":{"type":"object","description":"STOMP headers on the `MESSAGE` frame, besides `destination`, `subscription`, `message-id` and `content-length`. A header is left out when it has no value.","properties":{"ORG_UUID":{"type":"string","description":"The organization."},"ENTITY_TYPE":{"type":"string","description":"Same as the body's `entity`."},"ENTITY_UUID":{"type":"string","description":"Same as the body's `entityUuid`, when set."},"DEVICE_UUID":{"type":"string","description":"Same as the body's `deviceUuid`, when set."}}}},"ChangeEvent":{"name":"ChangeEvent","title":"Generic Change Event","summary":"Any other change: device state, sensors, access control, policies, clips and more.","contentType":"application/json","description":"The generic envelope for every entity except `POLICY_ALERT`. The shape of `update` depends on `entity`; many messages carry none, so treat them as a signal to read the entity from the REST API.","payload":{"$ref":"#/components/schemas/ChangeEventPayload"},"examples":[{"name":"cameraState","summary":"A camera's state changed","payload":{"entity":"CAMERA_STATE","entityUuid":"ItkwWv1qT7Wy8-pY8KDesw","type":"UPDATE","update":{"connectionStatus":"GREEN","firmwareVersion":"v1.0.1234","healthStatus":"GREEN","locationUuid":"Rk2pQ7yLT0qX4b1nVt8sJw","mediaRegion":"us-west-2","name":"Front Lobby","stateUpdatedTimestampMs":1791367200000,"uuid":"ItkwWv1qT7Wy8-pY8KDesw"}}},{"name":"doorSensor","summary":"A door sensor reported a change","payload":{"entity":"DOOR_STATE","entityUuid":"Dk4wN2pQSa6vT1bKQ2m8cA","type":"REFRESH","update":{"status":"CLOSED","timestampMs":1791367200000}}},{"name":"deviceAdded","summary":"A camera was added to the organization","payload":{"entity":"CAMERA","entityUuid":"ItkwWv1qT7Wy8-pY8KDesw","type":"REFRESH"}}],"headers":{"type":"object","description":"STOMP headers on the `MESSAGE` frame, besides `destination`, `subscription`, `message-id` and `content-length`. A header is left out when it has no value.","properties":{"ORG_UUID":{"type":"string","description":"The organization."},"ENTITY_TYPE":{"type":"string","description":"Same as the body's `entity`."},"ENTITY_UUID":{"type":"string","description":"Same as the body's `entityUuid`, when set."},"DEVICE_UUID":{"type":"string","description":"Same as the body's `deviceUuid`, when set."}}}}},"schemas":{"ChangeType":{"type":"string","title":"Change Type","description":"The kind of change. `REFRESH` (the default) means the entity changed and carries little or no detail: read it again from the REST API if you need its current state. `CREATE` and `UPDATE` usually carry the entity in `update`; `DELETE` never does.","enum":["REFRESH","DELETE","CREATE","UPDATE"]},"ChangeEventPayload":{"type":"object","title":"Change Event Envelope","description":"Common envelope for change-stream messages. The organization isn't in the body; it is in the `ORG_UUID` header and the destination.","required":["entity","type"],"properties":{"entity":{"type":"string","description":"The kind of entity that changed. Filter on it client-side.","enum":["ALARM_MONITORING_LOCATION_SETTINGS","ALARM_MONITORING_LICENSE","DEVICE","LOCATION","POLICY","POLICY_ALERT","POLICY_ADDENDUM","POLICY_PAUSE","USER","CAMERA_USER_CONFIG","ORG","USER_PERMISSION_GROUP","PARTNER_PERMISSION_GROUP","VIDEO_WALL","SHARED_CLIPS","SAVED_CLIPS","SHARED_STREAMS","SPLICED_CLIPS","TIMELAPSE","AUDIT_EVENTS","DIAGNOSTIC_EVENTS","CAMERA_STATE","CLIMATE_STATE","DOOR_STATE","NVR_STATE","OCCUPANCY_STATE","PROXIMITY_STATE","AUDIO_STATE","CAMERA","NVR","DOOR_SENSOR","CLIMATE_SENSOR","PROXIMITY_SENSOR","BOUNDING_BOX","SEEK_POINT","SENSOR_SEEK_POINT","SCHEDULE","FACE_EVENT","DEVICE_SHADOW","THREAT_CASE","THREAT_CASE_REVIEWER","KEYPAD","COMPONENT_DOOR_READER_SHADOW","COMPONENT_DOOR_RELAY_SHADOW","COMPONENT_DOOR_POSITION_INDICATOR_SHADOW","COMPONENT_APERIO_GATEWAY_SHADOW","COMPONENT_APERIO_DOOR_EXT_SHADOW","COMPONENT_SCHLAGE_GATEWAY_SHADOW","COMPONENT_SCHLAGE_DOOR_EXT_SHADOW","COMPONENT_REQUEST_TO_EXIT_SHADOW","COMPONENT_GENERIC_RELAY_SHADOW","COMPONENT_GENERIC_INPUT_SHADOW","COMPONENT_GENERIC_BUTTON_SHADOW","ACCESS_CONTROLLED_DOOR_SHADOW","ACCESS_CONTROLLED_DOOR","ACCESS_CONTROLLED_ELEVATOR_SHADOW","ACCESS_CONTROLLED_ELEVATOR","ACCESS_CONTROLLED_ELEVATOR_LANDING_SHADOW","ACCESS_CONTROLLED_ELEVATOR_LANDING","COMPONENT_SEEKPOINT","ROBOT_SEEKPOINT","VEHICLE_EVENT","DEVICE_INTEGRATION","SHELLY_INTEGRATION","THIRD_PARTY_CAMERA_DISCOVERY","THIRD_PARTY_CAMERA_ASSIGNMENT","THIRD_PARTY_CAMERA_CREDENTIAL","CHATBOT_QUERY","KEYPAD_COMMAND","PRIORITY_DETECTION","LIVE_DETECTION","LIVE_OCCUPANCY","UNKNOWN"]},"entityUuid":{"type":"string","description":"The entity that changed, as a 22-character base64url UUID. Absent on policy alert `CREATE` messages."},"type":{"$ref":"#/components/schemas/ChangeType"},"deviceUuid":{"type":"string","description":"The device involved, with an optional facet suffix (`.v0`). Set only on some messages, such as `FACE_EVENT`."},"subLocationsHierarchyKey":{"type":"string","description":"The sub-location path, as dot-separated location UUIDs. Set only on some alarm-monitoring messages."},"targetUsers":{"type":"array","items":{"type":"string"},"description":"The users the message is addressed to, as UUID strings. Set only on some messages."},"targetRoles":{"type":"array","items":{"type":"string"},"description":"The roles the message is addressed to, as UUID strings. Set only on some messages."},"update":{"type":"object","description":"The entity's new state or the changed fields. Its shape depends on `entity`, and it is absent on `DELETE`, on most `REFRESH` messages and on some `UPDATE` messages."}}},"PolicyAlertChangePayload":{"type":"object","title":"Policy Alert Change","description":"A change to a policy alert.","required":["entity","type"],"properties":{"entity":{"type":"string","enum":["POLICY_ALERT"]},"type":{"type":"string","enum":["CREATE","UPDATE","DELETE"],"description":"`CREATE`: a new alert, with the whole alert in `update`. `UPDATE`: the alert was linked to an alarm-monitoring threat case (no `update`). `DELETE`: the alert was removed or archived (no `update`)."},"entityUuid":{"type":"string","description":"The alert's UUID on `UPDATE` and `DELETE`. Absent on `CREATE`: use `update.uuid`."},"update":{"$ref":"#/components/schemas/BasePolicyAlertType"},"targetUsers":{"type":"array","items":{"type":"string"},"description":"The users the message is addressed to, as UUID strings. Set only on some messages."},"targetRoles":{"type":"array","items":{"type":"string"},"description":"The roles the message is addressed to, as UUID strings. Set only on some messages."}}},"BasePolicyAlertType":{"description":"The requested policy alert","discriminator":{"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/PolicyAlertV2Type"},{"$ref":"#/components/schemas/AccessControlledDoorPolicyAlertType"}],"properties":{"alertMonitoringThreatCaseUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"alertMonitoringVerified":{"type":"boolean"},"archived":{"type":"boolean"},"clientType":{"$ref":"#/components/schemas/ApiClientTypeEnum"},"clipLocationMap":{"additionalProperties":{"$ref":"#/components/schemas/MetaDataLocationType"},"type":"object"},"clipLocationMapV2":{"additionalProperties":{"type":"string"},"type":"object"},"delayedProcessing":{"type":"boolean"},"deleted":{"type":"boolean"},"durationSec":{"format":"int32","type":"integer"},"finalized":{"type":"boolean"},"locationUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"notificationSent":{"type":"boolean"},"orgUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"policyAlertTriggers":{"items":{"$ref":"#/components/schemas/ActivityEnum"},"type":"array"},"policyUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"ruleUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"saved":{"type":"boolean"},"serverReceivedAtMs":{"format":"int64","type":"integer"},"shared":{"type":"boolean"},"subLocationsHierarchyKey":{"description":"A sequence of one or more base 64 (url-safe) uuid substrings.\nThese substrings are separated by dots (.).\n","example":"AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA","format":"SubLocationsHierarchyKey","pattern":"^([A-Za-z0-9\\-_]{22})([.][A-Za-z0-9\\-_]{22})*$","type":"string"},"textDescription":{"description":"Natural language description of the alert","type":"string"},"thumbnailLocation":{"$ref":"#/components/schemas/MetaDataLocationType"},"thumbnailLocationV2":{"type":"string"},"timestampMs":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/PolicyAlertEnumType"},"uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"}},"type":"object"},"PolicyAlertEnumType":{"enum":["POLICY_ALERT_V2","ACCESS_CONTROLLED_DOOR_POLICY_ALERT"],"type":"string"},"MetaDataLocationType":{"properties":{"region":{"type":"string"}},"type":"object"},"ActivityEnum":{"enum":["SOUND_LOUD","SOUND_GUN_SHOT","TAMPER","VISUAL_TAMPER","MOTION_TAMPER","MOTION","MOTION_HUMAN","MOTION_CAR","MOTION_ANIMAL","MOTION_PACKAGE","PACKAGE_ARRIVED","PACKAGE_DEPARTED","FACE","FACE_IDENTIFIED","FACE_UNIDENTIFIED","FACE_BLACKLISTED","FACE_ALERT","POSE_ANOMALOUS","POSE_FALL","LICENSEPLATE","LICENSEPLATE_IDENTIFIED","LICENSEPLATE_UNIDENTIFIED","LICENSEPLATE_ALERT","LICENSEPLATE_BLACKLISTED","LICENSEPLATE_TRUSTED","PEOPLECOUNT_HIGH","PEOPLECOUNT_HIGH_RESET","PEOPLECOUNT_LOW","PEOPLECOUNT_LOW_RESET","HUMAN_ENTER","HUMAN_EXIT","CAR_ENTER","CAR_EXIT","TEMPERATURE_EXCEEDED_HIGH","TEMPERATURE_EXCEEDED_LOW","HUMIDITY_EXCEEDED_HIGH","HUMIDITY_EXCEEDED_LOW","PM25_EXCEEDED_HIGH","TVOC_EXCEEDED_HIGH","ETOH_EXCEEDED_HIGH","IAQ_EXCEEDED_HIGH","CO2_EXCEEDED_HIGH","CO2_EXCEEDED_LOW","PROBE_TEMPERATURE_EXCEEDED_HIGH","PROBE_TEMPERATURE_EXCEEDED_LOW","PROBE_DISCONNECTED","PROBE_CONNECTED","HEAT_INDEX_EXCEEDED_HIGH","PRESSURE_EXCEEDED_HIGH","PRESSURE_EXCEEDED_LOW","PM10_EXCEEDED_HIGH","PM40_EXCEEDED_HIGH","PM100_EXCEEDED_HIGH","VOC_IDX_EXCEEDED_HIGH","NOX_IDX_EXCEEDED_HIGH","FORMALDEHYDE_EXCEEDED_HIGH","CARBON_MONOXIDE_EXCEEDED_HIGH","AQI_EXCEEDED_HIGH","DOOR_AJAR","DOOR_OPENED","DOOR_CLOSED","BUTTON_SINGLE_PRESSED","BUTTON_DOUBLE_PRESSED","BUTTON_LONG_PRESSED","TAG_ARRIVED","TAG_DEPARTED","TAG_MOVED","TAG_POSITIONING_CHANGED","TAG_BOUNDARY_INGRESS","TAG_BOUNDARY_EGRESS","TAG_PANIC","BADGE_AUTHORIZED","BADGE_UNAUTHORIZED","BADGE_UNAUTHORIZED_V2","BADGE_AJAR","BADGE_MANUAL","BADGE_FORCED_OPEN","BADGE_LOCKDOWN","BADGE_REQUEST_TO_EXIT","BADGE_DURESS","BADGE_SECURITY_BREACH","BADGE_TAMPER","BADGE_FACE_MISMATCH","POS_ORDER","GUN_DETECT_EVENT","IOT_SOUND_AGGRESSION","IOT_SOUND_HELP","IOT_AIR_CO","IOT_AIR_CO2","IOT_AIR_MASKING","IOT_AIR_THC","IOT_AIR_VAPE","IOT_AIR_VOC","IOT_AIR_TEMP","IOT_TAMPER","IOT_GUNSHOT","IOT_BUTTON_SINGLE_CLICK","IOT_BUTTON_DOUBLE_CLICK","IOT_BUTTON_HOLD","IOT_PANIC_BUTTON_TRIGGERED","AUDIO_SOUND_SIGNIFICANT","AUDIO_SOUND_LOUD","AUDIO_SOUND_ABUSIVE","AUDIO_SOUND_GREETING","AUDIO_SOUND_HELP","AUDIO_SOUND_GUN","AUDIO_SOUND_GLASS_BREAK","AUDIO_SOUND_ALARM_SMOKE_FIRE","AUDIO_SOUND_ALARM_CARBON_MONOXIDE","AUDIO_SOUND_SIREN","CLIMATE_VOC","CLIMATE_VAPE","CLIMATE_SMOKE","CLIMATE_THC","CLIMATE_CO2","CLIMATE_ETOH","CLIMATE_PM25","CLIMATE_IAQ","CLIMATE_LEAK","SOUND_AGGRESSION","SOUND_HELP","AIR_CO","AIR_CO2","AIR_MASKING","AIR_THC","AIR_VAPE","AIR_VOC","MASK_MISSING","HELMET_MISSING","GLOVES_MISSING","PIR_OCCUPIED","PIR_MOVEMENT","PIR_VACANT","CUSTOM","VISITOR_ARRIVED","VISITOR_DEPARTED","AC_DR_CONNECTED","AC_DR_DISCONNECTED","AC_DPI_DOOR_OPEN","AC_DPI_DOOR_CLOSED","AC_DPI_DOOR_AJAR","AC_DPI_DOOR_FORCED_OPEN","AC_DSR_UNLOCKED","AC_DSR_LOCKED","AC_DB_TRIGGERED","AC_PANIC_BUTTON_TRIGGERED","AC_REMOTE_UNLOCK","AC_BADGE_AUTHORIZED","AC_BADGE_UNAUTHORIZED","AC_BADGE_FACE_MISMATCH","AC_LOCKDOWN_ACTIVATED","AC_LOCKDOWN_DEACTIVATED","AC_LOCKDOWN_PLAN_SWITCHED","AC_TAMPER_PROX","AC_TAMPER_ACCEL","AC_TAMPER_SWITCH","AC_GR_ACTIVE","AC_GR_INACTIVE","AC_GI_ACTIVE","AC_GI_INACTIVE","AC_REX_ACTIVE","AC_REX_INACTIVE","AC_APERIO_DEVICE_DISCONNECTED","AC_APERIO_DEVICE_CONNECTED","AC_APERIO_DEVICE_REBOOT","AC_APERIO_DEVICE_TAMPER","AC_APERIO_LOW_BATTERY","AC_APERIO_FLAT_BATTERY","AC_APERIO_OK_BATTERY","AC_SCHLAGE_GW_DISCONNECTED","AC_SCHLAGE_GW_CONNECTED","AC_SCHLAGE_APM_DISCONNECTED","AC_SCHLAGE_APM_CONNECTED","AC_SCHLAGE_LOW_BATTERY","AC_SCHLAGE_CRITICAL_BATTERY","AC_SCHLAGE_OK_BATTERY","POWER_SWITCH_BATTERY","POWER_SWITCH_PRIMARY","AI_SEARCH_MATCH","AI_SEARCH_MATCH_PERSON_SMOKING","AI_SEARCH_MATCH_PERSON_ON_PHONE","AI_SEARCH_MATCH_PERSON_FALLING","CUSTOM_LLM_BOOLEAN_TRUE","CUSTOM_LLM_BOOLEAN_FALSE","CUSTOM_LLM_THRESHOLD_EXCEEDED_LOW","CUSTOM_LLM_THRESHOLD_EXCEEDED_HIGH","ALM_AUTHORITIES_CONTACTED","ALM_MONITORING_ENABLED","ALM_MONITORING_DISABLED","ALM_MONITORING_SETTINGS_CHANGE","ALM_THREAT_CASE_CLOSED","ALM_THREAT_DETECTED","ALM_MONITORING_EVENT_DETECTED","ROBOT_DOG_DETECTED","ROBOT_ARRIVED_AT_WAYPOINT","ROBOT_ARRIVED_AT_POSE","ROBOT_WAITING_AT_POSE","ROBOT_MANUAL_CMD_VEL","ROBOT_MANUAL_ACTION","ROBOT_MANUAL_POSTURE","ROBOT_NAVIGATE_TO_POSE_START","ROBOT_NAVIGATE_TO_POSE_END","ROBOT_NAVIGATE_TO_HOME_START","ROBOT_NAVIGATE_TO_HOME_END","ROBOT_NAVIGATE_TO_WAYPOINT_START","ROBOT_NAVIGATE_TO_WAYPOINT_END","ROBOT_ROUTE_RUN_START","ROBOT_ROUTE_RUN_END","ROBOT_LOW_BATTERY_DOCKING","ROBOT_IDLE_DOCKING","ROBOT_EMERGENCY","LOITER_HUMAN","INACTIVITY_HUMAN","INACTIVITY_CAR","GROUP_ENTRY","ONGUARD_BADGE_AUTHORIZED","ONGUARD_BADGE_ANOMALY","ONGUARD_NO_ENTRY_MADE","ELEMENTS_BADGE_AUTHORIZED","ELEMENTS_BADGE_ANOMALY","ELEMENTS_NO_ENTRY_MADE","NETBOX_BADGE_AUTHORIZED","NETBOX_BADGE_ANOMALY","NETBOX_NO_ENTRY_MADE","THERMAL_TEMPERATURE_ALARM","THERMAL_TEMPERATURE_WARNING","THERMAL_FIRE_DETECTED","THERMAL_SMOKING_DETECTED","THERMAL_FIRE_VERIFIED","THERMAL_HEAT_NO_THREAT","THERMAL_VISUAL_HOTSPOT","THERMAL_VISUAL_HEAT_RISE","THERMAL_VISUAL_WARM_BODY","UNKNOWN"],"type":"string"},"ApiClientTypeEnum":{"enum":["PARTNER_DEVELOPER","DEVELOPER","DOOR_STATION","INTERNAL_SALESFORCE","TVOS","WINDOWS","LINUX","KIOSK","KEYPAD","SQUARE","KISI","OPENPATH","TOAST","BOULEVARD","BRIVO","EXECUTABLE","HALO","SALTO","BUTTERFLYMX","GENEA","PRODATAKEY","ENVOY","AMT","PIMLOC","PLACEOS","OMNIALERT","FLIC","SHELLY_DEVICE_EVENT","NINEONEONECELLULAR","HONEYWELL_ELEMENTS","HONEYWELL_ONGUARD","HONEYWELL_NETBOX","TRITON","CHATBOT","SIGNATURE_API","INCOMING_WEBHOOK","UNKNOWN"],"type":"string"},"AccessControlledDoorPolicyAlertType":{"allOf":[{"properties":{"accessControlUnitUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"accessControlledDoorUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"componentUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"initiatingUsername":{"type":"string"},"originatorEntityName":{"type":"string"},"originatorEntityUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"originatorType":{"$ref":"#/components/schemas/EventOriginatorEnum"}},"type":"object"}],"properties":{"alertMonitoringThreatCaseUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"alertMonitoringVerified":{"type":"boolean"},"archived":{"type":"boolean"},"clientType":{"$ref":"#/components/schemas/ApiClientTypeEnum"},"clipLocationMap":{"additionalProperties":{"$ref":"#/components/schemas/MetaDataLocationType"},"type":"object"},"clipLocationMapV2":{"additionalProperties":{"type":"string"},"type":"object"},"delayedProcessing":{"type":"boolean"},"deleted":{"type":"boolean"},"durationSec":{"format":"int32","type":"integer"},"finalized":{"type":"boolean"},"locationUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"notificationSent":{"type":"boolean"},"orgUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"policyAlertTriggers":{"items":{"$ref":"#/components/schemas/ActivityEnum"},"type":"array"},"policyUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"ruleUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"saved":{"type":"boolean"},"serverReceivedAtMs":{"format":"int64","type":"integer"},"shared":{"type":"boolean"},"subLocationsHierarchyKey":{"description":"A sequence of one or more base 64 (url-safe) uuid substrings.\nThese substrings are separated by dots (.).\n","example":"AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA","format":"SubLocationsHierarchyKey","pattern":"^([A-Za-z0-9\\-_]{22})([.][A-Za-z0-9\\-_]{22})*$","type":"string"},"textDescription":{"description":"Natural language description of the alert","type":"string"},"thumbnailLocation":{"$ref":"#/components/schemas/MetaDataLocationType"},"thumbnailLocationV2":{"type":"string"},"timestampMs":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/PolicyAlertEnumType"},"uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"}},"type":"object"},"EventOriginatorEnum":{"enum":["USER","SUPPORT_AUTHORITY","API_TOKEN","RULE","COMPONENT_COMPOSITE_EVENT","GUEST_PASS","DEVICE_SERVICE","UNKNOWN"],"type":"string"},"PolicyAlertV2Type":{"allOf":[{"properties":{"airQualityIndex":{"format":"int32","type":"integer"},"airQualityIndexThreshold":{"format":"int32","type":"integer"},"alertingDwellEvents":{"items":{"$ref":"#/components/schemas/DwellEventType"},"type":"array"},"alertingEventFaces":{"items":{"$ref":"#/components/schemas/PolicyEventFaceType"},"type":"array"},"alertingEventVehicles":{"items":{"$ref":"#/components/schemas/PolicyEventVehicleType"},"type":"array"},"alertingTrackIds":{"items":{"format":"int32","type":"integer"},"type":"array"},"cd":{"description":"Custom activity display description, maximum 100 characters","type":"string"},"cdn":{"description":"Custom activity display name, maximum 32 characters","type":"string"},"ch2oPpb":{"format":"float","type":"number"},"ch2oPpbThreshold":{"format":"float","type":"number"},"clipLocation":{"$ref":"#/components/schemas/MetaDataLocationType"},"cllmBooleanValue":{"type":"boolean"},"cllmCheckCondition":{"$ref":"#/components/schemas/CheckCondition"},"cllmIntegerValue":{"format":"int32","type":"integer"},"cllmPromptTypeEnum":{"$ref":"#/components/schemas/PromptTypeEnum"},"cllmPromptUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"co2":{"format":"float","type":"number"},"co2Ppm":{"format":"int32","type":"integer"},"co2PpmThreshold":{"format":"int32","type":"integer"},"co2Threshold":{"format":"float","type":"number"},"coConcentration":{"format":"double","type":"number"},"coConcentrationThreshold":{"format":"double","type":"number"},"componentUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"deviceFacetUuid":{"description":"RUUID with optional appended facet information","example":"AAAAAAAAAAAAAAAAAAAAAA.v0","format":"DeviceFacetUuid","type":"string"},"deviceType":{"$ref":"#/components/schemas/DeviceTypeEnum"},"deviceUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"egressBoundaryDevices":{"items":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"type":"array"},"ethanol":{"format":"float","type":"number"},"ethanolThreshold":{"format":"float","type":"number"},"heatIndexDegF":{"format":"double","type":"number"},"heatIndexDegFThreshold":{"format":"double","type":"number"},"humidityPercent1616":{"format":"int32","type":"integer"},"humidityPercentThreshold1616":{"format":"int32","type":"integer"},"humidityPermyriad":{"format":"int32","type":"integer"},"humidityThresholdPermyriad":{"format":"int32","type":"integer"},"iaq":{"format":"float","type":"number"},"iaqThreshold":{"format":"float","type":"number"},"inactivityThresholdMs":{"description":"For INACTIVITY_* alerts, the inactivity threshold configured on the region that fired, in milliseconds. This is the configured threshold, not the elapsed length of the inactivity window.","format":"int64","type":"integer"},"ingressBoundaryDevices":{"items":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"type":"array"},"leakDetected":{"type":"boolean"},"maxLuf":{"format":"int32","type":"integer"},"noxIdx":{"format":"float","type":"number"},"noxIdxThreshold":{"format":"float","type":"number"},"numHumans":{"format":"int32","type":"integer"},"peopleCountHighThreshold":{"format":"int32","type":"integer"},"peopleCountLowThreshold":{"format":"int32","type":"integer"},"pm10p0":{"format":"float","type":"number"},"pm10p0Threshold":{"format":"float","type":"number"},"pm1p0":{"format":"float","type":"number"},"pm1p0Threshold":{"format":"float","type":"number"},"pm25":{"format":"float","type":"number"},"pm25Threshold":{"format":"float","type":"number"},"pm4p0":{"format":"float","type":"number"},"pm4p0Threshold":{"format":"float","type":"number"},"pressure":{"format":"float","type":"number"},"pressureThreshold":{"format":"float","type":"number"},"probeTempC":{"format":"float","type":"number"},"probeTempCThreshold":{"format":"float","type":"number"},"probeTempThreshold":{"format":"float","type":"number"},"relHumid":{"format":"float","type":"number"},"relHumidThreshold":{"format":"float","type":"number"},"tamperByMovementChange":{"format":"float","type":"number"},"tampered":{"type":"boolean"},"tempC":{"format":"float","type":"number"},"tempCThreshold":{"format":"float","type":"number"},"tempProbePresent":{"type":"boolean"},"temperatureCelsius1616":{"format":"int32","type":"integer"},"temperatureCelsiusThreshold1616":{"format":"int32","type":"integer"},"temperaturePermyriad":{"format":"int32","type":"integer"},"temperatureThresholdPermyriad":{"format":"int32","type":"integer"},"thcPercent":{"format":"float","type":"number"},"thcPercentThreshold":{"format":"float","type":"number"},"tvoc":{"format":"float","type":"number"},"tvocThreshold":{"format":"float","type":"number"},"vapeDetected":{"type":"boolean"},"vapeSmokePercent":{"format":"float","type":"number"},"vapeSmokePercentThreshold":{"format":"float","type":"number"},"vocIdx":{"format":"float","type":"number"},"vocIdxThreshold":{"format":"float","type":"number"}},"type":"object"}],"properties":{"alertMonitoringThreatCaseUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"alertMonitoringVerified":{"type":"boolean"},"archived":{"type":"boolean"},"clientType":{"$ref":"#/components/schemas/ApiClientTypeEnum"},"clipLocationMap":{"additionalProperties":{"$ref":"#/components/schemas/MetaDataLocationType"},"type":"object"},"clipLocationMapV2":{"additionalProperties":{"type":"string"},"type":"object"},"delayedProcessing":{"type":"boolean"},"deleted":{"type":"boolean"},"durationSec":{"format":"int32","type":"integer"},"finalized":{"type":"boolean"},"locationUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"notificationSent":{"type":"boolean"},"orgUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"policyAlertTriggers":{"items":{"$ref":"#/components/schemas/ActivityEnum"},"type":"array"},"policyUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"ruleUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"saved":{"type":"boolean"},"serverReceivedAtMs":{"format":"int64","type":"integer"},"shared":{"type":"boolean"},"subLocationsHierarchyKey":{"description":"A sequence of one or more base 64 (url-safe) uuid substrings.\nThese substrings are separated by dots (.).\n","example":"AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA","format":"SubLocationsHierarchyKey","pattern":"^([A-Za-z0-9\\-_]{22})([.][A-Za-z0-9\\-_]{22})*$","type":"string"},"textDescription":{"description":"Natural language description of the alert","type":"string"},"thumbnailLocation":{"$ref":"#/components/schemas/MetaDataLocationType"},"thumbnailLocationV2":{"type":"string"},"timestampMs":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/PolicyAlertEnumType"},"uuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"}},"type":"object"},"DeviceTypeEnum":{"enum":["BLE_TRACKER","CAMERA","DOOR_SENSOR","ENVIRONMENTAL_SENSOR","OCCUPANCY_SENSOR","AUDIO_GATEWAY","EXECUTABLE","BADGE_READER","DOOR_CONTROLLER","BLE_BUTTON","IO_BOARD","ENVIRONMENTAL_GATEWAY","NVR","ROBOT","UNKNOWN"],"type":"string"},"PromptTypeEnum":{"enum":["COUNT","PERCENT","BOOLEAN","TEXT"],"type":"string"},"CheckCondition":{"properties":{"operator":{"$ref":"#/components/schemas/OPERATOREnum"},"value":{"type":"string"}},"type":"object"},"OPERATOREnum":{"enum":["GT","LT","LTE","GTE","EQ","CONTAINS"],"type":"string"},"PolicyEventVehicleType":{"properties":{"imageS3Bucket":{"type":"string"},"imageS3Key":{"type":"string"},"imageS3Region":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array","uniqueItems":true},"licensePlateNumber":{"type":"string"},"vehicleName":{"type":"string"}},"type":"object"},"PolicyEventFaceType":{"properties":{"faceId":{"type":"string"},"faceName":{"type":"string"},"imageS3Bucket":{"type":"string"},"imageS3Key":{"type":"string"},"imageS3Region":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array","uniqueItems":true},"personUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"}},"type":"object"},"DwellEventType":{"properties":{"activity":{"$ref":"#/components/schemas/ActivityEnum"},"deviceLabels":{"items":{"type":"string"},"type":"array"},"deviceUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"durationSec":{"format":"int32","type":"integer"},"dwellStartTimeMs":{"format":"int64","type":"integer"},"locationLabels":{"items":{"type":"string"},"type":"array"},"locationUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"orgUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"regionUuid":{"description":"base 64 (url-safe) uuid string","example":"AAAAAAAAAAAAAAAAAAAAAA","format":"RUUID","type":"string"},"subLocationsHierarchyKey":{"description":"A sequence of one or more base 64 (url-safe) uuid substrings.\nThese substrings are separated by dots (.).\n","example":"AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA.AAAAAAAAAAAAAAAAAAAAAA","format":"SubLocationsHierarchyKey","pattern":"^([A-Za-z0-9\\-_]{22})([.][A-Za-z0-9\\-_]{22})*$","type":"string"},"thumbnailLocation":{"type":"string"},"thumbnailUri":{"type":"string"},"timestampMs":{"format":"int64","type":"integer"},"trackId":{"format":"int32","type":"integer"}},"type":"object"}}}}