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.


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

  1. Provider starts a Zoom session with AI Scribe enabled
  2. Zoom initiates the RTMS stream and fires appointment.transcript_started
  3. Healthie's Media Streams service connects and begins receiving transcript data
  4. Transcript is written incrementally to S3 as the session progresses — readable mid-session once appointment.transcript_started has fired

After the session

  1. Session ends; Zoom completes transcript processing
  2. appointment.transcript_available fires — typically within ~2 minutes of session end
  3. 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

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.