Skip to main content

Patient portal & messaging

After purchase, patients need three things: see where their treatment stands, talk to their care team, and (for some offerings) verify their identity. Tagada Rx ships all three as portal endpoints your storefront can skin however it likes — the Oakwell template’s /portal page is a full reference implementation.
Auth model: portal routes are scoped to the customer, not the merchant. The patient logs in with an email OTP which creates a CMS session; every portal call carries that session token (x-cms-token). With the Plugin SDK this is automatic once the customer has logged in via useLogin — no extra wiring.

The endpoints

All under /api/v1/rx/portal/*, CMS-session authenticated: Access control is strict: a case is only visible if it belongs to the authenticated customer, and messaging requires the case to have a linked network patient (canMessage: true).

Messaging

The thread is relayed from the clinical network — Tagada stores no message bodies (PHI transit rule). Messages carry an author so you can style the bubbles:
Sending, with optional attachments (images, documents, audio, video — base64-encoded):

Notifications

When the care team writes (clinician or support — patient-authored messages are filtered out), Tagada emails the patient a content-free notification — “You have a new message from your care team” — deep-linking to your portal page. The email never contains the message text.
This is why your storefront should have a stable portal URL: the notification links there. The Oakwell template registers /portal and the thank-you page links to it.

Identity verification

Offerings mapped with requiresIdVerification: true need a government photo ID before the clinician can prescribe. One call handles upload + attachment to the network patient:
Show the upload block whenever the case’s offering requires it and the case is still pre-approval — the Oakwell portal renders it inline in the case detail view.

Plugin SDK wiring (Oakwell pattern)

From a headless site, call the same endpoints with the CMS session token you obtain from the customer OTP login flow (tagada.customer module), passed as the x-cms-token header.

UX checklist for a good portal

  • Timeline, not jargon — render case.in_review as “A clinician is reviewing your information”, with dates.
  • Message composer with attachments — patients often need to send photos; accept camera capture on mobile.
  • ID upload prompt — surface it prominently while the case waits on identity verification; it’s the #1 stall cause.
  • Content-free everywhere — never mirror message text into your own emails, analytics, or logs.