Shareable reports
Turn a measurement into an end-to-end encrypted link your user can hand to a doctor. The server stores only ciphertext.
POST /sdk/v1/measurements/{id}/report turns a stored measurement into a
shareable web page — for the "show this to your doctor" moment in your product.
Security model
- The report (measurement + assessment) is encrypted with AES-256-GCM under a fresh random key.
- The key is returned once, inside the URL fragment (
#…). Fragments never reach servers, and we do not store or log the key: after the response, nobody but the link holder can read the report — including us. - The store keeps only ciphertext with a TTL. A missing, expired and burned
report are the same
404on purpose, so report ids cannot be probed.
Creating a link
HMAC-signed (authentication); the measurement
must belong to the calling key, anything else is an indistinguishable 404.
curl -X POST https://neccessory.com/sdk/v1/measurements/meas_.../report \
-H 'content-type: application/json' \
-d '{ "ttlHours": 72, "burnAfterRead": false, "locale": "en" }'
# + NCS1 signature headers| Field | Meaning |
|---|---|
ttlHours | 1..168, default 72; out-of-range values are clamped |
burnAfterRead | the first successful open deletes the report |
locale | en or ru — the language of the viewer page |
Response 201:
{
"reportId": "rpt_…",
"url": "https://neccessory.com/en/report/rpt_…#<key>",
"expiresAt": 1756259200000,
"burnAfterRead": false
}Hand url to your end user as is — the part after # is the decryption
key, without it the page shows nothing. Creation is rate limited per key
(30/hour by default).
The viewer
The link opens /{locale}/report/{id} on our site: the page downloads the
ciphertext, decrypts it in the browser with the fragment key and renders the
metrics, the wellness assessment and the disclaimers. It is not indexed and
never sends the key anywhere.