Data flows

Visual walkthrough of where patient data lives at each stage - booking, voice calls, clinician review, audit logging - and which sub-processors see what.

This page exists so your DPO or auditor can trace any data element from collection to retention without having to read code.

End-to-end patient journey

Loading diagram…

Where data sits at each moment

DataAt restIn transitIn memory
Patient name / phone / emailAES-256-GCM encrypted in patients tableTLS 1.2+Decrypted only inside the Go service during request handling
Clinical notesPostgres TDE + AES-256 for sensitive fieldsTLS 1.2+Short-lived request context
Voice audioAzure Blob with immutable policy, 7-year retentionSRTP via LiveKitMemory during the call only
JWT tokensNot stored server-side (only jti in Redis if revoked)TLS 1.2+ + httpOnly cookiesBrowser cookie jar (httpOnly, inaccessible to JS)
Redis session dataAzure-managed encryption at rest + TLS 1.2+TLS 1.2+24-hour inactivity TTL

Which sub-processor sees what

Sub-processorReceivesWhenDuration
Microsoft AzureAll platform dataAlwaysContract term + 30 days
SpeechmaticsVoice audio streamDuring active callAudio not retained by Speechmatics
CartesiaText (post-scrubbing) for TTSDuring active callNot retained
Groq / Anthropic / OpenAIPII-scrubbed prompt textDuring voice / agent inferenceProvider retention per DPA
StripeCard data (via Stripe.js)At paymentCard tokens retained by Stripe
BandwidthE.164 phone number + SMS bodyAt sendStandard telco retention
MailgunEmail address + rendered bodyAt send30 days sendgrid logs
DentallyWhatever the clinic chooses to syncReal-time via their APIPer clinic's own Dentally contract

See Sub-processors for the DPA status of each.