Skip to main content

Webhook Integration Documentation

Overview

This feature allows you to configure a webhook endpoint to receive activity data events. Once configured, Corsano will deliver real‑time data payloads to your specified endpoint.


Gather Your Connection Details

The following details are typically required before enabling the webhook:

  • Endpoint URL: Public, valid https:// address you control.
  • Verification secret: Shared secret for HMAC signature validation.

You can apply these details by locaing to the Setting page, open the Integration tab and click WEBHOOK. You will see the following page:

App Chart

Test and Save Webhook configuration

You can trigger a test event by clicking the "Send Test Event" button. This will dispatch a payload containing { event_type: "test" } to the configured endpoint. Verify on your system that the event has been received and processed as expected.

Click the "Save" button to persist the endpoint configuration and secret.

Toggle Webhook for Each Study

App ChartApp Chart

In the settings modal for each study, you can enable or disable the webhook. When Webhook Data Push is disabled, no data associated with that study will be forwarded.


Delivery History

Displays recent webhook delivery attempts for debugging.

Metrics

  • Total Events: Number of webhook events attempted.
  • Success: Number of successful deliveries.
  • Failed: Number of failed attempts. Full logs for failed requests will be displayed.
  • Success Rate: Ratio of successes to total attempts.

Event Log Table

Each entry includes:

  • Time: When delivery occurred.
  • Event: Event type.
  • Status: Delivery status.
  • HTTP: Response code from your server.
  • Attempt: Retry count.
  • Latency: Round‑trip delivery time.
  • Actions: Additional diagnostic options (if available).

If no events have been delivered, the table displays an empty state.


Delivery Workflow

The Corsano bracelet constantly streams data to the mobile app, the app forwards it to our cloud service, and as soon as the cloud receives the it, it will forward the data to your service.


Recommendations

  • Corsano sends data using the application/json format, so ensure your endpoint validates the corresponding Content-Type header.

  • Return a 200 or 204 status code only after the payload has been successfully processed. These status codes indicate that the data was delivered and handled correctly.

  • Return a 4xx or 5xx status code to signal a processing failure on your server.

  • Monitor the failure count to identify connectivity issues or endpoint-side errors.


Troubleshooting

  • No deliveries shown: Ensure endpoint and secret are saved.
  • Consistent failures: Check network availability and endpoint logs.
  • Signature mismatch: Verify that your HMAC logic uses the exact secret and payload.

Example Payload


{
"user_uuid": "e962******2c5c",
"data": [
[
{
"timestamp": "1763562121000",
"bpm": "79",
"bpm_q": "2",
"last_steps": "0",
"activity_type": "7",
"activity_count": "25",
"spo2": "0",
"spo2_q": "0",
"energy_exp": "1196",
"respiration_rate": "22",
"pha": "10",
"pha_q": "10",
"resp_q": "1",
"wearing": "4",
"battery": "37",
"gait_asymmetry": "0",
"gait_speed": "0",
"gait_var": "0",
"cardiac_arrest": "1",
"nibp_systolic": "0",
"nibp_diastolic": "0",
"nibp_systolic_long_term": "0",
"nibp_diastolic_long_term": "0",
"nibp_systolic_combine": "0",
"nibp_diastolic_combine": "0",
"is_charging": "0",
"timezone": "+01:00"
},
{
"timestamp": "1763562124000",
"bpm": "0",
"bpm_q": "0",
"last_steps": "0",
"activity_type": "0",
"activity_count": "0",
"spo2": "0",
"spo2_q": "0",
"energy_exp": "0",
"pha": "0",
"pha_q": "0",
"resp_q": "0",
"wearing": "4",
"battery": "37",
"gait_asymmetry": "0",
"gait_speed": "0",
"gait_var": "0",
"cardiac_arrest": "0",
"nibp_systolic": "122",
"nibp_diastolic": "72",
"nibp_systolic_long_term": "120",
"nibp_diastolic_long_term": "57",
"nibp_systolic_combine": "121",
"nibp_diastolic_combine": "64",
"is_charging": "0",
"timezone": "+01:00"
}
]
]
}

Data Dictionary

Activity event

Top-Level

FieldTypeRequiredDescription
studystringyesStudy identifier.
typestringyesEvent type. Expected: "activity".
dataobjectyesContains user identifier + activity samples.

data Object

FieldTypeRequiredDescription
user_uuidstring (UUID)yesUnique ID for the user.
dataarrayyesArray of sessions/batches. Each item is an array of samples.

Activity Sample

FieldTypeRequiredMeaning
timestampnumberyesUnix ms.
bpmnumberyesHeart rate.
bpm_qnumberyesHeart rate quality (0–4).
last_stepsnumberyesStep count since last sample.
activity_typenumberyesActivity code.
activity_countnumberyesActivity intensity.
spo2numberyesSpO2 (%) or 0 if invalid.
spo2_qnumberyesSpO2 quality (0–4, 103, 104, 105).
energy_expnumberyesEnergy expenditure (device-specific units).
respiration_ratenumberyesRespiration rate per minute.
resp_qnumberyesRespiration quality.
phanumberyesPHA value.
pha_qnumberyesPHA quality.
wearingnumberyesWearing state (0:not wearing, 1–3:reserved, 4:wearing for sure).
batterynumberyesBattery percentage.
gait_asymmetrynumberyesAsymmetry score.
gait_speednumberyesSpeed.
gait_varnumberyesVariability.
cardiac_arrestnumberyes0/1/2.
nibp_systolicnumberyesSystolic blood pressure.
nibp_diastolicnumberyesDiastolic blood pressure.
nibp_systolic_long_termnumberyesLong-term systolic blood pressure.
nibp_diastolic_long_termnumberyesLong-term diastolic blood pressure.
nibp_systolic_combinenumberyesCombined systolic blood pressure.
nibp_diastolic_combinenumberyesCombined diastolic blood pressure.
is_chargingbooleanyesCharging flag.
timezonestringyesISO-8601 offset (e.g. +01:00).
skin_proximitynumberoptionalPresent on iOS; Android may omits it.
speednumberoptionalPresent on iOS; Android may omits it.

Temperature event

Top-level

FieldTypeRequiredNotes
studystringyese.g., "EZTJD"
typestringyesmust be "temperature"
dataobjectyescontainer

Data Object

FieldTypeRequired
user_uuidstring (UUID)yes
dataarrayyes — array of batches (each batch = array of temperature samples)

Temperature Data

FieldTypeRequiredMeaning
timestampnumberyesUnix ms
temp_sk1numberyesCore body temp
temp_sk2number or nullnoSkin temperature during sleep
temp_ambnumber or nullnoReserved
timezonestringyesISO-8601 offset (+01:00)

Please note that the webhook functionality is still under active development; contact devsupport@corsano.com if you encounter any technical issues or unexpected behavior.