Skip to navigation

Migrate from Recall.ai

A one-command tool that scans your Recall.ai codebase, maps every API call to its MeetStream equivalent, shows you the diff, and rewrites it, for both Node.js and Python.

View as Markdown

MeetStream covers the core Recall.ai bot workflow at a lower published price: 0.35perrecordinghour(0.35 per recording hour (0.25 at volume) versus $0.50. The migration kit does the mechanical rewrite for you and tells you exactly what, if anything, needs a human.

What it does

Point the tool at your existing Recall.ai project and it works in four passes:

  1. Scan: recursively finds Recall base URLs, endpoint calls, field names, webhook handlers, SDK imports, and RECALL_API_KEY usage.
  2. Map: prints endpoint, field, and webhook mapping tables so you can see every change before it happens.
  3. Transform: rewrites base URLs, endpoint paths, field names, webhook event handling, env vars, and imports.
  4. Report: summarizes what changed, warns on anything that needs manual review, and prints a post-migration checklist.

Run it in scan or --dry-run mode as many times as you like. Nothing is written until you confirm.

Install & run

# Scan only (no changes)
npx @meetstream/migrate scan /path/to/your-recall-project
# Dry run: see the full diff
npx @meetstream/migrate --dry-run /path/to/your-recall-project
# Migrate (asks for confirmation first)
npx @meetstream/migrate /path/to/your-recall-project
# Verify against the live API after migrating
npx @meetstream/migrate test --api-key YOUR_MEETSTREAM_API_KEY
# Full lifecycle test against a real meeting
npx @meetstream/migrate test --api-key YOUR_KEY --meeting-url https://meet.google.com/xxx-xxxx-xxx

What gets rewritten

Endpoints

Recall.aiMeetStream.aiNotes
POST /api/v1/bot/POST /api/v1/bots/create_botField names differ (see below)
GET /api/v1/bot/{id}/GET /api/v1/bots/{id}/detailAlso /status
POST /api/v1/bot/{id}/leave_call/GET /api/v1/bots/{id}/remove_botMethod changes from POST to GET
DELETE /api/v1/bot/{id}/DELETE /api/v1/bots/{id}/delete
GET /api/v1/bot/GET /api/v1/botsList all bots
GET /bot/{id}/audio/GET /bots/{id}/get_audio
GET /bot/{id}/video/GET /bots/{id}/get_video
GET /bot/{id}/transcript/GET /transcript/{transcript_id}/get_transcriptUses transcript_id, resolved from /detail
GET /bot/{id}/participants/GET /bots/{id}/get_participants
GET /bot/{id}/chat_messages/GET /bots/{id}/get_chats
POST /bot/{id}/send_chat_message/POST /bots/{id}/send_messageBody { "message": "..." }
POST /bot/{id}/output_video/POST /bots/{id}/send_imagePublic img_url (not base64)
GET /bot/{id}/speaker_timeline/GET /bots/{id}/get_speaker_timeline
POST /api/v1/webhook/A workspace webhook endpoint in the dashboard, or callback_url on create_botWorkspace endpoints are signed; callback_url deliveries are not

Fields

Recall.aiMeetStream.ai
meeting_urlmeeting_link
recording_modevideo_required (boolean). Defaults to true, so send false for audio only
recording_mode layoutrecording_config.video_layout (speaker_view or grid_view, API default grid_view)
metadatacustom_attributes
transcription_optionsrecording_config.transcript
no_one_joined_timeoutautomatic_leave.no_one_joined_timeout
assembly_aiassemblyai
destination_urlwebhook_url

Webhooks

Recall’s webhook becomes either a signed workspace webhook endpoint or a per-bot callback_url, and Recall’s string events map onto MeetStream’s event model:

  • Every payload carries event and bot_event. Branch on bot_event.
  • A bot’s ending arrives once, as event: "bot.stopped", with the cause in bot_event: bot.stopped, bot.kicked, bot.denied, bot.notallowed or bot.failed.
  • bot.done marks the end of post-call processing for every bot.

Before finalizing your handlers, read Webhooks and Events, or have your assistant call the webhook_events_guide tool on the MeetStream MCP server.

Capability comparison

Checked on September 24, 2026. MeetStream facts come from the product; Recall.ai facts come from Recall.ai’s public documentation and website, linked in the notes below. Only capabilities we could verify on both sides are listed.

Where MeetStream goes further

CapabilityMeetStreamRecall.ai
Recordings delivered to your own storage bucketYes: Amazon S3 (IAM role or access keys), Alibaba Cloud OSS and Cloudflare R2, including a write-only mode where MeetStream never reads your files backNot supported: recordings are downloaded from Recall and re-uploaded by you [1]
Published pay-as-you-go price per recording hour0.35/hr,0.35/hr, 0.25/hr at volume$0.50/hr [2]
Built-in transcription price$0.10/hr, waived when you use your own provider key$0.15/hr [2]

Available on both

CapabilityMeetStreamRecall.ai
Per-participant audioZoom, Google Meet and Microsoft Teams (guide)Zoom, Google Meet and Microsoft Teams, up to the 16 loudest speakers in real time [3]
Per-participant videoZoom, Google Meet and Microsoft Teams (guide)Zoom, Google Meet and Microsoft Teams (Teams up to 9 streams), plus Beta platforms [4]
Voice agents that speak in the meetingHosted voice agents configured with MIA, no web page to build or host, or your own agent over a WebSocketThe bot renders a web page you host and streams its audio and video into the meeting [5]
Transcription choices per botSix options: Deepgram, AssemblyAI, JigsawStack, Sarvam AI, MeetStream’s own transcription and meeting captions (providers)Recall.ai’s own transcription plus several third-party providers [6]
Calendar integrationGoogle Calendar and Outlook, several accounts per user (Google, Outlook)Google Calendar and Outlook [7]

Where Recall.ai goes further

CapabilityMeetStreamRecall.ai
Meeting platformsZoom, Google Meet and Microsoft TeamsAlso Webex, and GoTo Meeting in Beta [8]
Zoom breakout rooms and webinarsNot supportedBreakout rooms (Beta) and registration-required webinars [9] [10]
SOC 2SOC 2 Type 2 under audit. MeetStream is ISO 27001 certified, GDPR compliant (DPA available) and HIPAA compliant (BAAs available)SOC 2 Type 2 report available [11]

Notes (all checked September 24, 2026)

  1. Recall.ai, Storage and playback: docs.recall.ai/docs/storage-and-playback
  2. Recall.ai pricing: recall.ai/pricing
  3. Recall.ai, separate audio per participant (real-time): docs.recall.ai/docs/how-to-get-separate-audio-per-participant-realtime
  4. Recall.ai, separate video per participant (real-time): docs.recall.ai/docs/how-to-get-separate-videos-per-participant-realtime
  5. Recall.ai, Output Media: docs.recall.ai/docs/stream-media
  6. Recall.ai, Transcription: docs.recall.ai/docs/transcription
  7. Recall.ai, Calendar integration: docs.recall.ai/docs/calendar-integration
  8. Recall.ai, Bot overview (supported platforms): docs.recall.ai/docs/bot-overview
  9. Recall.ai, Zoom breakout rooms: docs.recall.ai/docs/zoom-breakout-rooms
  10. Recall.ai, Zoom webinars and registration-required meetings: docs.recall.ai/docs/zoom-webinars
  11. Recall.ai website, security section (SOC 2 Type 2 report): recall.ai

What the migrator flags for review

The migrator flags Recall.ai calls that have no one-to-one MeetStream equivalent, most notably live video output into the meeting. On MeetStream, bots can show a still or animated image with Send Image, and MIA voice agents can speak in the meeting. Everything in the endpoint and field tables migrates automatically.

After migrating

  1. Swap RECALL_API_KEY for MEETSTREAM_API_KEY in your environment and secrets manager.
  2. Change the auth header to Authorization: Token <your-key>.
  3. Receive events through a workspace webhook endpoint (signed) or callback_url on create_bot.
  4. Run test --api-key ... (optionally with --meeting-url) to confirm the live API responds as expected.
  5. Review anything the report flagged for manual attention.

Prefer to drive MeetStream from a chat assistant instead of rewriting code by hand? The MeetStream MCP server gives Claude direct access to the same API.