SDK usage report
Available starting SDK 2.3.0
The Data SDK sends a usage report to the Corsano cloud for the bracelet that is connected at that moment. It tells Corsano which bracelet, firmware and SDK version your app runs, when the bracelet last synced, its battery state and how long it has been worn.
There is nothing to integrate: no API to call, nothing to configure in DataSdk.Config, and no
manifest change. The report is scheduled by DataSdk.initialize() and cannot be turned off.
When a report is sent
- Every 12 hours, through a background
WorkManagerjob. - A report needs a licence key, a connected bracelet, and one completed download from that
bracelet. While any of these is missing the report is not sent and does not fail: it stays
pending and goes out as soon as the missing piece arrives — when the licence key check returns,
when
subscribeDeviceForDownload()subscribes a bracelet, when a bracelet connects, or when a download completes. So the first report is sent within seconds of the bracelet being put on, rather than up to 12 hours later. - Once a report has been sent, the 12-hour schedule sets the pace again; restarting the app does not send an extra report.
- If the request fails (any non-2xx response),
WorkManagerretries it with backoff.
The report is sent to:
POST https://api.health.cloud.corsano.com/app-sdk/devices
If your app restricts network traffic (a network security configuration, or a firewall or MDM allowlist on managed devices), make sure this host is reachable.
What is sent
{
"serial_number": "2B41234567",
"license_key": "your-licence-key",
"plan": "5",
"last_sync_date": "2026-09-01T09:14:32.118+02:00",
"first_pairing_date": "2026-06-17T11:02:07.000+02:00",
"fw_version": "2.1.60",
"sdk_version": "2.3.0",
"battery_percentage": 78,
"worn_minutes": 12480,
"is_charging": false
}
| Field | Type | Description |
|---|---|---|
serial_number | string | Serial number, read from the connected bracelet. |
license_key | string | The licence key the SDK was initialized with. |
plan | string | Bracelet plan id, read from the connected bracelet. "-1" when it is unknown or could not be read. |
last_sync_date | string | When the last download from this bracelet completed. |
first_pairing_date | string | When the SDK completed its first download from this bracelet. |
fw_version | string | Firmware version, read from the connected bracelet. |
sdk_version | string | Android SDK version. |
battery_percentage | int | Battery level, 0–100, read from the bracelet. |
is_charging | bool | Whether the bracelet is charging. |
worn_minutes | int | Total minutes this bracelet has been worn since the SDK started counting. It only grows. |
Dates use yyyy-MM-dd'T'HH:mm:ss.SSSXXX (milliseconds and the local offset), always with Gregorian
years and ASCII digits, whatever language the phone is set to.
Sync dates, identity and worn minutes are kept per bracelet, so when a user switches bracelets
one bracelet's history is never reported under another's serial number. A second bracelet's
worn_minutes starts from zero.
Upgrading from 2.2.x or earlier: the SDK only starts recording when it is updated.
first_pairing_dateis the first download completed after the upgrade, not the bracelet's original pairing, andworn_minutescounts from the upgrade. Reinstalling the app or wiping its database also resetsworn_minutesto 0.
Privacy
- The report contains no health measurements.
- Neither the request body nor the response body is written to the SDK logs, because the logs can be exported by your app and the report carries the licence key and serial number. Only non-identifying fields and the HTTP response code are logged.
Replaces the per-download device update
Before 2.3.0, the SDK sent a device update to the same endpoint after each download. That call has
been removed: the usage report now owns this endpoint, because running both made them overwrite each
other's last_sync_date and first_pairing_date. The report sends everything the old update did
except frequency, and adds battery_percentage and is_charging. The BraceletInfo row a
download writes to the local database is unchanged.