LifeCare.ID® Developer Docs Public

Security & compliance

Integrating with LifeCare.ID means inheriting — and upholding — a small set of hard guarantees. This page states what the platform guarantees you, and what you must guarantee in return.


The zero-PHI invariant (the one rule above all)

For any data value d held by a resource holder R and delivered to a requester Q, the transfer R → Q is direct. No LifeCare.ID component is an intermediary, cache, proxy, or co-processor of d. LifeCare.ID participates only in {DID, public key, token, scope, consent receipt, revocation status}.

This is architectural, not a policy toggle. What it means for you:

A data source must additionally be able to demonstrate direct transfer (this is part of future conformance). An app accepts the obligation as part of the Network Developer Agreement (🛣️).


Identity & key custody


Token handling

Token Prefix Protect by
Session / user token lcs_ server-side storage, TLS, never in URLs/logs; honor logout
Data-access token (RPT) lc_ TLS, never logged; cache only to expires_at

The lcs_ session token doubles as the user token: when a resource server introspects it, it carries subject_did — proof the caller is that user, required for user-self actions (e.g. in-app consent). A lc_ access token never carries a subject; it names the data it unlocks via resource_owner. See Authorization & tokens.



Transport & storage


Your integration checklist

Apps - [ ] Token exchange runs server-side; client_secret never reaches a client. - [ ] PKCE S256 with a fresh per-attempt code_verifier; state validated. - [ ] HTTPS redirect URIs, exact-match registered. - [ ] Session + access tokens stored server-side, never logged or URL-borne. - [ ] No health value in any field sent to LifeCare.ID. - [ ] Graceful handling of revoked / expired grants and tokens.

Data sources - [ ] Introspect every request; enforce active + scope, and bind the request to the introspected resource_owner. (For a user-self action, require a user token whose subject_did matches the acting user instead.) - [ ] Serve data directly to the requester — never via LifeCare.ID. - [ ] Record each access (/v1/access/record). - [ ] Honor revocation within targets; don't over-cache active results. - [ ] Hold upstream provider credentials yourself, under an active grant; never send them (or any value) to LifeCare.ID. - [ ] Source has its own DID and signs its requests.


Node transparency — verify what you integrate with

A node publishes a public, CORS-open attestation at GET {node}/v1/attestation: the code commit, AI models (with licenses), and parameter version it is running, over a measurement it signs with its own key (ECDSA P-256). It carries no PHI.

LifeCare.ID hosts a public verifierhttps://lifecare.id/verify — that confirms a node's attestation in the browser, without trusting the operator: it recomputes the measurement from the published fields and verifies the signature. It works for any node — pass the address (?node=<url>) for a one-click "verify the node you're talking to" link you can surface to your users.

Verifying the node you integrate with is good hygiene; for high-assurance flows, treat the hardware-rooted attestation (roadmap) as the bar.


Reporting & contacts

Security issues with the platform should be reported to the network operator through the channel they provide at onboarding. 🛣️ A formal vulnerability disclosure policy and a status/changelog page are planned with the developer portal.


References