NeccessoryNeccessory
REST API

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 404 on purpose, so report ids cannot be probed.

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
FieldMeaning
ttlHours1..168, default 72; out-of-range values are clamped
burnAfterReadthe first successful open deletes the report
localeen 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.