Event Types & Payloads
This document describes every webhook event type, when it fires, and the full payload schema delivered to your endpoint.
Common Delivery Structure
Every webhook delivery is an HTTP POST with the following headers and body:
Headers
| Header | Type | Description |
|---|---|---|
Content-Type | string | Always application/json. |
X-Timestamp | string | Unix timestamp (milliseconds) when the payload was signed. |
X-Signature | string | HMAC-SHA256 hex digest of {timestamp}.{JSON body}. |
Body
The body is the event-specific data described below. It is the data field of the internal webhook event — the wrapper (containing userUUID, webhookType) is not sent to your endpoint. You receive only the event payload directly.
FALL_DETECTION — Emergency / Fall Detection
Enum Value: FALL_DETECTION
Triggered when a fall or emergency event is detected for a user. This is a critical, time-sensitive event.
Payload Schema
{
"userUUID": "string",
"reasons": ["string"],
"happenedAt": "string (ISO 8601 datetime)",
"email": "string",
"firstName": "string",
"lastName": "string"
}Field Descriptions
| Field | Type | Description |
|---|---|---|
userUUID | string | The UUID of the user who experienced the event. |
reasons | string[] | Array of reasons for the emergency. Currently contains "fall" for fall detection events. |
happenedAt | string | ISO 8601 timestamp of when the emergency occurred. |
email | string | The email address of the affected user. |
firstName | string | First name of the affected user. |
lastName | string | Last name of the affected user. |
Example Payload
{
"userUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"reasons": ["fall"],
"happenedAt": "2026-02-17T14:30:00.000Z",
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe"
}VITAL_THRESHOLD — Vital Threshold Breach
Enum Value: VITAL_THRESHOLD
Triggered when one or more of a user’s vital signs cross a configured threshold (either above or below the set limit).
Payload Schema
{
"triggeredVitals": [
{
"vitalType": "string",
"badValue": "number",
"thresholdValue": "number",
"vital_id": "string",
"reason": "string"
}
],
"userUUID": "string",
"email": "string",
"firstName": "string",
"lastName": "string"
}Field Descriptions
| Field | Type | Description |
|---|---|---|
triggeredVitals | ThresholdResult[] | Array of vitals that crossed their thresholds. |
userUUID | string | The UUID of the user whose vitals triggered the alert. |
email | string | Email address of the affected user. |
firstName | string | First name of the affected user. |
lastName | string | Last name of the affected user. |
ThresholdResult Object
| Field | Type | Description |
|---|---|---|
vitalType | string | The type of vital that triggered. See Vital Types below. |
badValue | number | The actual vital reading that crossed the threshold. |
thresholdValue | number | The threshold value that was breached. |
vital_id | string | The MongoDB document ID of the vital record. |
reason | "high" | "low" | null | Whether the threshold was crossed on the high or low side. |
Vital Types
| Vital Type | Description |
|---|---|
heartrate | Heart rate (BPM) |
heartrateVariability | Heart rate variability |
respiratoryRate | Respiratory rate |
pulseox | Pulse oximetry (SpOâ‚‚) |
bloodPressureSystolic | Systolic blood pressure |
bloodPressureDiastolic | Diastolic blood pressure |
glucose | Blood glucose level |
temperature | Body temperature |
EKG | Electrocardiogram |
Example Payload
{
"triggeredVitals": [
{
"vitalType": "heartrate",
"badValue": 145,
"thresholdValue": 120,
"vital_id": "60c72b2f9b1d4c3a5c8e4d3f",
"reason": "high"
},
{
"vitalType": "pulseox",
"badValue": 88,
"thresholdValue": 90,
"vital_id": "60c72b2f9b1d4c3a5c8e4d40",
"reason": "low"
}
],
"userUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"email": "john.smith@example.com",
"firstName": "John",
"lastName": "Smith"
}TEST — Test Event
Enum Value: TEST
A special event used to verify that your webhook endpoint is configured and responding correctly. Sent only via the manual test endpoint. This event bypasses event type filtering — it is delivered regardless of which types you’ve subscribed to.
Payload Schema
{
"test": "test"
}Example Usage
Trigger via the API:
POST /webhooks/test/project/:projectIdYour endpoint will receive a POST with the above payload, signed with your webhook secret.