HIPAA Compliance
Compliance posture is yours to configure — Devotel Orbit defaults open. HIPAA mode is an opt-in, per-organization toggle for organizations that handle Protected Health Information (PHI): a workspace owner turns it on, and it stays off unless you ask for it. Devotel never mandates HIPAA mode or decides that your traffic is “compliant” — enabling the toggle activates Orbit’s BAA-gated safeguards, and the gates it opens are tenant controls you operate. This document describes the technical and administrative controls that apply when HIPAA mode is enabled.Overview
HIPAA mode is an opt-in, per-organization toggle — not a platform-mandated posture. Only a workspaceowner can switch it, the toggle is off until you act, and it is BAA-gated: it activates (or relaxes) a set of enhanced controls, and no send or access carries PHI-specific rules unless you have opted in:
- Encryption at Rest — PHI encrypted at rest with Google-managed AES-256 (Cloud SQL default)
- Access Controls — PHI access restricted to designated roles
- Audit Logging — All PHI access logged with reason codes
- Data Retention — Automatic deletion after configured retention period
- BAA Tracking — Business Associate Agreement status management
HIPAA_BAA_REQUIRED and HIPAA_BAA_INVALID envelopes you can receive desk-side are document-level tenant controls you opt into and own — the same verdict and fail-closed behavior described under BAA — the HIPAA send gate. They are not platform mandates.
Who can do what
HIPAA controls are assigned to roles, so you can map each surface to the people in your workspace. (These columns match the prose in the sections below.)Prerequisites
Before enabling HIPAA mode, organizations must:- Sign a Business Associate Agreement (BAA) with Devotel
- Designate a HIPAA compliance officer within their team
Technical Controls
1. Encryption at Rest
All PHI — including messagebody, media_url, and metadata — is encrypted at rest using Google-managed AES-256 keys (Cloud SQL default encryption):
- Algorithm: AES-256 (Google Cloud default at-rest encryption)
- Key Management: Encryption keys are managed and rotated by Google Cloud
- Scope: All database-stored content, including message
body,media_url, and metadata - In transit: TLS 1.3 protects all data in transit (see Infrastructure Safeguards)
Note: Devotel does not currently perform per-organization application-layer encryption of message bodies. PHI confidentiality at rest relies on Google Cloud’s transparent AES-256 encryption rather than an application-layer cipher. TheGET /settings/hipaaresponse includes anencryption_algorithmfield for reporting purposes only — it does not indicate that message bodies are individually encrypted at the application layer.
2. Access Controls
Message-content reads are governed by workspace membership and, for API keys, by themessages:read / messages:write scope. Every read is recorded in the PHI audit log. The table below reflects who can read message content today:
The
billing role is limited to financial surfaces — billing, pricing, and usage insights — and cannot read message content. Every other role, including viewer, can read message content, and each access is written to the PHI access log.
Reason codes are stored on every PHI access-log entry. Reads through GET /messages and GET /messages/{id} are recorded with an automatic read reason. The categories below describe the access reasons used elsewhere in the platform when an operator supplies one explicitly:
treatment— Access required for patient treatment coordinationpayment— Access required for payment processingoperations— Access required for healthcare operationslegal— Access required for legal compliancesupport— Access required for customer support resolution
Known limitation: Orbit does not currently restrict message-content reads to a narrower set of roles beyond thebillingconfinement above, and it does not require an operator-supplied reason code on the message read endpoints (GET /messages,GET /messages/{id}). To meet the HIPAA minimum necessary standard, provision workspace membership and API-key scopes so that only staff who need PHI can reach these endpoints. If your program requires per-role read restriction on message content, contact compliance@devotel.io before relying on it.
3. PHI audit log
Every access to PHI-containing data generates an audit log entry. This log is one row in the processing-records catalog your organization maintains — the Data Processing Agreement page is the upstream catalog of those records and of the attestations that bind them:- Is append-only and cannot be modified or deleted
- Retains up to 10,000 entries per organization (oldest entries are automatically rotated)
- Is accessible to
ownerandadminroles via the dashboard or API - Can be exported for external compliance audits
GET /api/v1/settings/hipaa/phi-access-log
4. Data Retention
When HIPAA mode is active, data retention is enforced:- Default retention period: 365 days (configurable: 30–3,650 days)
- Scope: Message content, call recordings, media attachments
- Mechanism: Automated background job scans for expired records and securely deletes them
- Exceptions: Audit logs and PHI access logs are retained independently of the data retention policy
5. BAA status lifecycle
Devotel tracks BAA status per organization on a canonicalbaa_status lifecycle:
not_required— the organization has attested that no PHI is in scope (the default)pending— PHI is in scope and the BAA is awaiting executionexecuted— the BAA has been signed and is within its termexpired— an executed BAA has passed its one-year term and must be re-executed
baa_status is executed. Attempting to enable HIPAA mode before then returns a 403 Forbidden error, and any PHI send is rejected with 422 HIPAA_BAA_REQUIRED. The send-time gate’s verdict and its fail-closed behaviour are documented under BAA — the HIPAA send gate.
Executing the BAA
Execute the BAA through the/api/v1/compliance/baa endpoints. This is the flow the dashboard’s Compliance → BAA pane uses, and the only flow that satisfies the HIPAA-enable and PHI-send gates.
-
Check the current state —
GET /api/v1/compliance/baa/returnsbaa_status, the signer details, anddays_until_expiry(owner/admin). -
Attest that PHI is in scope —
POST /api/v1/compliance/baa/requiresetshipaa_requiredand moves anot_requiredorganization topendingso the execute step opens (owner only). This starts the flow; it does not enable HIPAA mode.
- Execute the BAA —
POST /api/v1/compliance/baa/executerecords the agreement with a type-the-name click-wrap e-signature (owner only). Thetyped_attestationmust exactly matchsigner_name. On success the organization is stampedexecutedwith the signer, version, and date, which unblocks PHI sends and lets you enable HIPAA mode.
GET /api/v1/compliance/baa/template.
Legacy endpoint:PUT /api/v1/settings/hipaa/baa(body{ signed, signed_at, document_url }) writes an older JSONB status mirror and is a fallback for pre-migration tenants only. Once an organization has abaa_statusvalue, the HIPAA-enable and PHI-send gates read that canonical column and ignore this mirror — so asigned: truewrite here does not unblock sends or HIPAA mode. UsePOST /api/v1/compliance/baa/executeinstead.
PHI-Adjacent Audience Registry
The PHI-adjacent audience registry is an organization-level register of contact-list and segment ids whose members carry PHI — for example, patients opted into treatment outreach. Designation belongs on the audience itself, not on any individual campaign: an audience is PHI-adjacent because of its source data, so the designation follows it regardless of which campaign picks it up. When HIPAA is in scope for your organization (hipaa_required set via the BAA flow) and a campaign’s audience resolves to a designated list or segment id, the campaign launch precheck refuses the launch until your BAA is executed and in-term.
API: GET /api/v1/compliance/hipaa/phi-audiences returns the current registry scoped to your organization. PUT /api/v1/compliance/hipaa/phi-audiences replaces the registry in a single write. Both endpoints require the owner or admin role — the same gate used for the BAA endpoints.
Reading the registry:
PUT with an empty audience_ids array clears the registry. Every replacement is written atomically (a concurrent GET never sees a partial update) and recorded in the audit log.
Note: The registry is your organization’s attestation of which audiences contain PHI. It is tenant-owned: Devotel never designates audiences on your behalf, and the designation only takes effect once HIPAA is in scope for your organization.
Campaign Launch Precheck
Campaigns have two HIPAA gates at different points in the flow:- Launch precheck (campaign-level, hard gate). Before a campaign leaves the draft/scheduled state, the launch precheck resolves its audience against the registry. If the audience is a designated list or segment and your organization’s BAA is not
executedand in-term, the launch is refused with422 HIPAA_BAA_REQUIRED. This keeps a PHI cohort out of campaign enrollment instead of burning wallet credit on thousands of per-recipient refusals. If the compliance state cannot be read, the precheck fails closed (500 HIPAA_BAA_GATE_DB_FAIL) rather than silently admitting a PHI audience. - Send gate (per-recipient, existing behavior). The per-recipient send gate documented under BAA — the HIPAA send gate still applies at message time and is unchanged.
- Compose the registry —
PUT /api/v1/compliance/hipaa/phi-audienceswith the list/segment ids that contain PHI. - Verify the block — attempt the launch against a designated audience; expect
422 HIPAA_BAA_REQUIREDwhile the BAA is notexecuted/in-term. - Resolve the BAA — execute (or re-execute an
expired) BAA viaPOST /api/v1/compliance/baa/executeas described in Executing the BAA. - Relaunch — once the BAA is
executedand in-term, the precheck passes and the campaign launches normally.
- The registry governs campaign launches only. Legacy one-off per-recipient sends are still governed by the per-recipient send gate, which does not consult the registry.
- Only
list- andsegment-type audiences resolve against the registry at launch. Audiences assembled per contact (all contacts, CSV, manual entry) are evaluated recipient-by-recipient at send time instead. - The wizard’s PHI-adjacent warning is advisory on the audience picker; enforcement lives at launch.
6. Disabling HIPAA Mode
Disabling HIPAA mode is a destructive, audit-sensitive transition: it clears the covered-entity flag, the BAA link, and the strict retention floor on a workspace that may hold PHI. To prevent this from happening on a stolen browser session, disabling requires a fresh re-authentication challenge. (Enabling HIPAA mode does not — it only tightens posture.) Disabling is therefore a two-step flow: Step 1 — Mint a single-use re-auth challenge token:X-Reauth-Challenge header set to that token:
X-Reauth-Challenge header is missing, malformed, or expired, the disable request is rejected with 401 REAUTH_REQUIRED:
Note: The re-auth challenge gates only the enable → disable transition. Enabling HIPAA mode, and retention-only updates submitted while HIPAA mode is already disabled, do not require the header.
API Reference
Dashboard Configuration
HIPAA settings are available in the dashboard under Settings → Compliance:- HIPAA Mode Toggle — Enable/disable HIPAA mode (requires BAA)
- BAA Section — Execute the BAA (type-the-name e-signature) and track its status, signer, and term expiry
- Data Retention — Configure automatic data deletion period
- PHI Access Log — View and export PHI access audit trail
- PHI-Adjacent Audiences — Designate which contact lists and segments carry PHI; the campaign wizard warns on designated audiences and the launch precheck enforces the BAA gate
Infrastructure Safeguards
Beyond application-level controls, Devotel’s infrastructure provides:- Cloud SQL Encryption: All database storage encrypted with AES-256 by Google Cloud
- TLS 1.3: All data in transit encrypted with TLS 1.3
- VPC Isolation: Database accessible only via private IP within the VPC
- No Privileged Containers: GKE Autopilot prevents privileged container execution
- Secret Manager: All encryption keys and credentials stored in GCP Secret Manager
- Audit Trails: Google Cloud Audit Logs for infrastructure-level access tracking
Voice & Video Transcript PII/PHI Redaction
Live captions, call transcripts, and post-call transcripts are generated by Devotel’s speech-to-text subprocessor with PII/PHI redaction enabled by default. Sensitive numerics — credit-card numbers, social-security numbers, and similar — are masked at the source, before any transcript text is stored or written to logs. For HIPAA organizations, this means PHI spoken on a call is redacted before it is persisted.Redaction is on by default
Transcript redaction is enabled by default and cannot be turned off from your dashboard or API. Turning it off is a deployment-wide change Devotel makes only for archival-compliance verticals (for example, legal or healthcare) that are contractually required to retain raw, unredacted transcripts under their own safeguards and BAA.Warning: Because this control applies to a whole deployment rather than a single organization, it cannot be scoped to one workspace. If your deployment handles PHI, redaction should stay enabled — confirm its status in writing with your Devotel contact as part of your BAA before you store any PHI.If raw-transcript retention was ever enabled for your deployment, transcripts captured during that window were stored unredacted and are not masked retroactively. Review and purge them per your retention policy if they contain PHI, and ask Devotel to confirm redaction is re-enabled for all transcripts going forward.
Shared Responsibility
HIPAA compliance is a shared responsibility between Devotel and the customer:Incident Response
In the event of a suspected PHI breach:- Devotel’s security team is notified within 1 hour via automated alerting
- Affected organizations are notified within 24 hours per HIPAA Breach Notification Rule
- PHI access logs are immediately preserved and exported for forensic analysis
- Remediation steps are documented and shared with affected parties
Related pages
- DLP scanner — the send-time control that flags regulated data crossing an outbound message
- Pre-send policy scanner — the verdict and enforcement mode this control feeds
Last updated: September 2026 For questions about HIPAA compliance, contact: compliance@devotel.io