Anyone can build the app. Nobody can clone the signature.
Build your health app however you like, with any framework and any model. When what it drafts needs a licensed person to stand behind it, send it through the sign kit: a licensed physician signs it or declines it, and your page gets back a receipt bound to the source document.
Ten lines
The key stays on your server. Your page holds none.
// your server (Node 18 or later) import { createSignClient } from './sign-kit/server.js'; const cs = createSignClient({ key: process.env.CLINICALSWIPE_KEY }); app.post('/review', async (req, res) => res.json(await cs.mintLink({ clientRef: req.body.orderId, condition: 'osteoarthritis' }))); app.get('/review/:ref', async (req, res) => res.json(cs.toBrowser(await cs.status(req.params.ref)))); <!-- your page --> <script type="module" src="https://clinicalswipe.com/packages/sign-kit/clinical-sign.js"></script> <clinical-sign src="/review/order-123" link="the url /review returned"></clinical-sign>
The kit: server.js and its types, clinical-sign.js and its types. Plain ES modules, no dependencies, no build step.
What happens in between
- Your server mints a link with your partner key: single use, for one person, with your own opaque reference (never a name or an email).
- The person opens it on clinicalswipe.com, consents, answers, gives their state and attaches the source document. If no physician is licensed and covered in that state, they are told so before anything is recorded.
- A licensed physician decides: one whose specialty, licence and malpractice coverage fit the case. They sign it, ask for changes, or decline. A signature needs a source document in the packet.
- The decision becomes a receipt: a SHA-256 on hashcare.com that anyone can check without trusting us. A decline gets one too.
- Your server reads the outcome (status, or a signed webhook) and
<clinical-sign>shows it.
The receipt your page shows
- Signed by
- Licensed physician, CO
- Drafted by
- Fixed template, named with its version on a real receipt
- Relied on
- sha256 of each source document, bound into the receipt hash
- Receipt
- the 64-character hash, with a link to check it on hashcare.com
The signer is a role and a licence state, never a name or NPI. Drafted by names the model and its version, a person, or a fixed template, and says “not recorded” when nobody said; it is never guessed. Nothing is called signed unless a licensed physician signed it.
What to know first
- Test mode until go-live. A BAA with Google Cloud is in place; real-record handling on the covered services, reviewer coverage for the state and the medical director’s go come first. Until then every link is test mode: synthetic answers and synthetic documents only.
- What the physician decides is the case the person builds on clinicalswipe.com from their answers and their source document. Your app’s own draft is not sent today, and the receipt’s drafted-by line says what drafted the document that was decided.
- Your server learns a status word, a time and the receipt. Never the person’s answers, documents or letter, and never the physician’s name or NPI.
- A signature makes the decision owned and answerable. It is not a claim that review makes the draft more accurate.
Try it
A one-page home-exercise letter generator ships with the kit as a worked example. To run it, or your own app, against test mode you need a test-mode partner key; ask on the companies page.