Integration Documentation
Last updated: April 30, 2026
1Thing CRM integrates with Zoom to let real estate agents schedule meetings, place phone calls, and auto-log call activity without leaving the CRM. The integration covers two Zoom products:
Both features are delivered through a single Zoom OAuth app. Each end-user (an agent or broker) authorizes 1Thing with their own Zoom account. Authorization is revocable at any time from within 1Thing or directly from the Zoom App Marketplace.
Zoom Meetings and Zoom Phone are connected from Settings → Integrations as two separate cards, since they use different scopes and a user may have one product but not the other.
Prerequisite: A Zoom account (Free or paid). No Zoom Phone license is required for Meetings.
Prerequisite: A Zoom account with an active Zoom Phone license. If your account does not have a Zoom Phone license, the consent screen will return an error — this is expected behavior.
Pilot note: During the pilot phase, your Zoom admin email must be on 1Thing's allow list before you can complete the consent screen. If you see “app not approved for your account,” contact support@1thing.ca and we'll add you within one business day.
For troubleshooting the connect flow, see the Troubleshooting section below.
Use case: An agent wants to run a virtual showing or buyer consultation via Zoom and have the meeting link automatically attached to the CRM activity.
Prerequisites: Zoom Meetings connected (see above). The CRM activity must have a future date and time set.
POST /v2/users/me/meetings on the Zoom API. The resulting join URL is saved to the activity and displayed in the Meeting section.Use case: An agent wants to call a lead directly from the CRM and have the call automatically logged as a Call Activity.
Prerequisites: Zoom Phone connected. Zoom desktop or mobile app installed on the same device as the browser.
zoomphonecall:// URI scheme with the number pre-dialled. The call is placed by the Zoom client.phone:write:user_call_command to terminate the call via the Zoom API.phone.caller_ended webhook. 1Thing automatically creates a Call Activity on the matched contact with direction, duration, and timestamp.Use case: A prospect calls the agent's Zoom Phone number. The agent wants to see who is calling and have the call automatically logged.
Prerequisites: Zoom Phone connected. Agent has a personal Zoom Phone number (not a shared line).
phone.callee_ringing webhook to 1Thing.Use case: An agent wants to review all past calls with a specific contact or across their book of business.
Prerequisites: At least one call must have been placed or received with Zoom Phone connected.
1Thing uses the phone:read:list_call_logs and phone:read:call_log scopes to back-fill recent call history when Zoom Phone is first connected.
Use case: A prospect left a voicemail. The agent wants to read the transcript without listening to the full recording.
Prerequisites: Zoom Phone connected. Caller must have left a voicemail on the agent's Zoom Phone number.
phone.voicemail_received webhook. 1Thing downloads the audio using phone:read:voicemail, sends it to OpenAI Whisper for transcription, then discards the audio. Only the transcript is retained.Voicemail audio sent to OpenAI is not used to train OpenAI models, per OpenAI's API data-usage policy. All voicemails can also be listed via the phone:read:list_voicemails scope.
Use case: An agent wants to replay a recorded call to review what was discussed.
Prerequisites: Call recording must be enabled in the agent's Zoom Phone account settings.
phone.recording_completed webhook. 1Thing stores a reference to the recording using phone:read:list_recordings.phone:read:call_recording. The recording audio is never copied to 1Thing's servers.Use case: After a virtual showing via Zoom, an agent wants the meeting transcript attached to the CRM activity automatically.
Prerequisites: Zoom Meetings connected. Meeting must have been created through 1Thing (which enables cloud recording automatically).
recording.completed webhook.cloud_recording:read:recording and parses it into plain text. The full list of available recordings is retrieved via cloud_recording:read:list_user_recordings.1Thing requests the minimum OAuth scopes needed to deliver the features above. Every scope has a specific purpose.
user:read:user — identify the connected Zoom user after OAuth (email, user id) so 1Thing can link the Zoom account to the correct 1Thing user.meeting:write:meeting — create scheduled Zoom meetings on the agent's behalf when generating a meeting link from a CRM activity.cloud_recording:read:list_user_recordings — list available recordings for a user to locate the transcript after a meeting ends.cloud_recording:read:recording — fetch the VTT transcript file for a specific meeting recording.phone:read:user — retrieve the agent's Zoom Phone user id and assigned phone number.phone:read:list_call_logs — fetch the agent's call history to back-fill CRM call activities on first connect and display the call log.phone:read:call_log — retrieve individual call detail records (duration, direction, outcome).phone:read:list_recordings — list recordings linked to a call so the agent can select one for playback.phone:read:call_recording — stream a specific recording for playback inside the CRM. Audio is not copied to 1Thing storage.phone:read:voicemail — download voicemail audio for Whisper transcription. Audio is discarded after transcription; only the transcript is retained.phone:read:list_voicemails — list the agent's voicemails for display in the call history view.phone:write:user_call_command — issue call commands (such as ending an active call) from the CRM's active-call banner, allowing agents to hang up without switching to the Zoom app.You can remove 1Thing's Zoom access at any time using either method below.
1Thing calls POST /oauth/revoke on the Zoom API immediately. The OAuth tokens are then deleted from our database. Webhook events for your account stop being processed within seconds.
app_deauthorized webhook event to our server. On receipt, 1Thing immediately deletes your Zoom OAuth access and refresh tokens, stops all webhook processing for your account, and acknowledges the deletion to Zoom's Data Compliance API as required by Marketplace policy.The authoritative description of what 1Thing stores, for how long, and with whom we share it lives in our Privacy Policy. A short summary for Zoom-specific data:
During the pilot phase, your Zoom admin email must be on 1Thing's allow list. Email support@1thing.ca with the email address you use to sign in to Zoom. We'll add you within one business day.
This usually indicates a transient OAuth redirect issue. Retry once from Settings → Integrations. If it persists, try revoking 1Thing in Zoom App Marketplace → Installed Apps and reconnecting from 1Thing. If the error continues, email support with the time of the attempt so we can check server logs.
The Zoom desktop app must be installed and running on the same machine as your browser. The zoomphonecall:// URI scheme only resolves if the Zoom client is installed. On iOS or Android, the Zoom mobile app must be installed.
Three things must be true: (1) your Zoom account is connected in 1Thing (Settings → Integrations shows Connected), (2) Zoom's webhook configuration is validated on our side, and (3) the inbound call is reaching your personal Zoom Phone number (not a shared line). If (1) and (3) are correct, contact support — webhook issues are diagnosable from our server logs.
Transcription typically completes within two minutes of the voicemail being left. If more than 10 minutes have passed, contact support with the call time and voicemail sender number. The most common cause is a transient OpenAI API error, which we retry automatically up to three times.
The fastest path is to uninstall 1Thing from Zoom App Marketplace. Zoom revokes our tokens immediately. 1Thing clears stale tokens from our database on the next API call. This method works even if you've lost access to your 1Thing account.
Email support@1thing.ca for any question about the Zoom integration. We respond within four business hours, typically sooner. For data access, data deletion, or privacy requests, email privacy@1thing.ca — we reply within 30 days as required by PIPEDA.