Zoom RTMS & Live Transcription
Healthie's AI Scribe uses Zoom's Real-Time Media Streams (RTMS) to capture live session transcripts during telehealth appointments. RTMS replaced the legacy cloud recording approach and is the current standard for all new Scribe enablements.
Rather than polling the Zoom API after a session ends, RTMS is fully push-based: Zoom sends a single webhook when a session starts, Healthie's Media Streams service connects to the stream directly, and the transcript is written incrementally to storage as the session progresses.
In this article:
AI Scribe & Transcript Integration
Healthie's AI Scribe automatically captures and transcribes telehealth sessions, turning real-time Zoom conversations into structured, searchable transcripts, without any manual recording or transcription effort from providers.
- Live, real-time transcription during Zoom sessions
- Automatic delivery of full transcripts post-session
- Webhooks to trigger downstream workflows (note generation, charting, summarization)
- Scribe controls scoped per appointment type — patients are only notified when transcription is actually active
Transcripts Only
If you're interested in transcript access without the full AI Scribe feature (e.g., to power your own downstream AI, charting tools, or workflows), reach out to hello@gethealthie.com to learn more.
RTMS vs. Cloud Recording
|
|
RTMS (current) | Cloud Recording (legacy) |
|---|---|---|
| Trigger | Push-based (one webhook per session start) | Polling the Zoom API for recording URLs |
| Rate limits | None — no per-recording API calls | Subject to 429 errors under high volume |
| Transcript delivery | Incremental + post-session webhook | Post-session only (can take hours) |
| Client notification | "Content of this meeting is being shared with app(s)" modal | "This meeting is being recorded" banner |
| Transcript quality | Identical — both use Zoom's transcription engine | Identical |
Note: RTMS receives transcript text directly from Zoom — Healthie does not run separate audio transcription. The word-level output is identical to cloud recording transcripts.
Transcript Pipeline
During the session
- Provider starts a Zoom session with AI Scribe enabled
- Zoom initiates the RTMS stream and fires appointment.transcript_started
- Healthie's Media Streams service connects and begins receiving transcript data
- Transcript is written incrementally to S3 as the session progresses — readable mid-session once appointment.transcript_started has fired
After the session
- Session ends; Zoom completes transcript processing
- appointment.transcript_available fires — typically within ~2 minutes of session end
- Full transcript is available in S3 in VTT format, fetchable via the Healthie GraphQL API
Recommendation: For most use cases, wait for appointment.transcript_available before fetching. Mid-session access is supported but the stream may be incomplete.
Webhooks
Healthie sends the following webhook events for AI Scribe / RTMS sessions. These are separate from the legacy cloud recording events.
RTMS / Real-Time Transcript Events
| Event | When it fires | Use for |
|---|---|---|
| appointment.transcript_started | RTMS stream goes live (session in progress) | Confirming stream is active; mid-session transcript access |
| appointment.transcript_available | Full transcript written to S3 (~2 min post-session) | Triggering transcript processing workflows |
| appointment.transcript_failed | Stream fails for any reason | Alerting, retry logic; includes a failure reason |
Cloud Recording Events (legacy — still available)
| Event | When it fires |
|---|---|
| appointment.recording_started | Recording begins in Zoom |
| appointment.recording_stopped | Recording ends in Zoom |
| appointment.transcript_available | Cloud transcript ready (can take hours post-session) |
Participant Events
| Event | When it fires |
|---|---|
| appointment.participant_joined | Someone joins the Zoom session (includes name + email) |
| appointment.participant_left | Someone leaves the Zoom session |
Note: appointment.transcript_available is shared between RTMS and cloud recording paths. It fires for whichever transcript source is active on the account.
Webhook Payload Structure
Healthie uses thin payloads — webhooks contain minimal identifying data. After receiving a webhook, fetch the full resource via the Healthie GraphQL API.

Key fields:
- resource_id — The appointment ID
- resource_id_type — Always "Appointment" for Scribe events
- event_type — The specific event that occurred
Setting up Webhooks
Register via GraphQL

Basic Endpoint (Node.js)

Fetching Transcript Content
After receiving appointment.transcript_available, query the Healthie GraphQL API for the appointment details and transcript.

Transcripts are stored in VTT (WebVTT) format and accessible from the appointment record. They can be opened in any standard text editor.
Security
Webhook Signature Verification
Healthie signs all webhooks using HTTP Message Signatures (RFC 9421). Always verify signatures before processing.
Relevant headers:
- Content-Digest — SHA-256 hash of the payload
- Signature-Input — Specifies signature components
- Signature — The cryptographic signature
IP Whitelisting
Configure your firewall to accept webhooks only from Healthie's IPs:
| Environment | IP Addresses |
|---|---|
| Production | 52.4.158.130, 3.216.152.234, 54.243.233.84, 50.19.211.21 |
| Staging | 18.206.70.225, 44.195.8.253 |
Key Constraints & Notes
- Transcript format: VTT files; opens in any standard text editor
- Transcript retention timing:
- Transcripts are stored for 2 years from the date of the appointment
- After 2 years, transcripts are automatically deleted
- Delete transcripts: transcripts can be deleted through the Healthie API via the deleteTranscript mutation (learn more here)
- Transcripts are not included in client EHI downloads
- No Zoom cloud recording required for RTMS — cloud recording can be fully disabled
- Scribe controls are appointment-type scoped: RTMS only runs when a provider with Scribe permissions books a Scribe-enabled appointment type. For appointment types without a Scribe template assigned, transcription does not run and clients see no notification
Staging note: AI Scribe and RTMS require Zoom to be enabled in Staging, which is not on by default. Testing in Production is recommended