How to Set Up a Webex Meeting Bot with Unified

Updated:


November 7, 2026

Overview

Webex (meeting bot) (webexmeetingbot) is the integration that gives you a calendar_bot and calendar_botevents for Webex meetings. It is separate from the Webex integration: existing Webex connections don't change, and your end users connect Webex (meeting bot) on its own.

A Webex meeting bot is a monitor: no bot joins the meeting, and no audio, video or chat is captured. Unified follows the meeting through Webex webhooks:

  • while the meeting runs: meeting started and ended, participants joined and left
  • after the meeting: RECORDING_READY (the bot's recording_id is set) and the Webex transcript as TRANSCRIPT_RECEIVED events

The same connection also gives you Webex's calendar_calendar, calendar_event, calendar_recording and calendar_webinar objects. They work as on the Webex integration, and their scopes are requested only when you select their permissions.

For how to create bots and receive events, see How to Build a Meeting Bot with Unified.


⚠️ Important: bring your own Webex integration

Unified has no shared OAuth credentials for Webex (meeting bot). You create your own Webex integration (Webex's name for an OAuth app) and enter its client ID and secret in Unified.


What you'll need

  • A Webex account that can sign in to the Webex Developer Portal
  • End users on Webex sites with Webex Meetings
  • For recordings: cloud recording, which isn't on the Webex Free plan. For transcripts: recording plus Webex Assistant / Closed Captions or the Cisco AI Assistant (transcripts aren't available on Webex for Government)

Step 1: Create a Webex integration

  1. In the Webex Developer Portal, open My Webex Apps and create an Integration.
  2. Add the Unified redirect URI for your region:
    • US: https://api.unified.to/oauth/code
    • EU: https://api-eu.unified.to/oauth/code
    • AU: https://api-au.unified.to/oauth/code
  3. Select the scopes in Step 2, save, and copy the Client ID and Client Secret. Webex shows the client secret only once, when you create the integration.

Step 2: Scopes

ScopeUnified permissionWhy
meeting:schedules_readcalendar_bot_read, calendar_bot_write, calendar_botevent_read, calendar_event_read, calendar_recording_readFind the meeting when a bot is created; meeting started and ended webhooks; list meetings
meeting:participants_readcalendar_botevent_read, calendar_event_readParticipant joined and left webhooks
meeting:recordings_readcalendar_botevent_read, calendar_recording_readRecording created webhooks; reading the recording
meeting:transcripts_readcalendar_botevent_read, calendar_recording_readTranscript created webhooks, transcript snippets and recording transcripts
Unified also requests the OpenID sign-in scopes (openid, profile, email); you don't select those in My Webex Apps. If you select other permissions, add the scopes the Webex integration uses for them: spark:rooms_read (calendar_calendar_read), and meeting:schedules_write and meeting:participants_write (calendar_event_write, calendar_webinar_write).

Webex lists the scope each webhook resource needs in Register and manage webhooks.


Step 3: Enter your credentials in Unified

  1. In the Unified app, open Integrations and activate Webex (meeting bot).
  2. Enter your Webex integration's Client ID and Client Secret.
  3. Select the permissions you need: calendar_bot_read, calendar_bot_write and calendar_botevent_read for bots, calendar_event_read to list events (creating a bot from an event_id needs only calendar_bot_write), and calendar_recording_read to read recordings.

Step 4: Webhook setup

There is nothing to configure in Webex. When you create a native calendar_botevent webhook on a connection, Unified registers six Webex webhooks for that connection, one per notification:

  • meetings started and ended
  • meetingParticipants joined and left
  • recordings created
  • meetingTranscripts created

Each has its own random secret, as Webex recommends, and Unified verifies every delivery with the secret of the webhook that sent it. Deleting the Unified webhook removes the Webex registrations. Webex disables a webhook after repeated delivery failures and doesn't re-enable it; if events stop, delete the calendar_botevent webhook and create it again.

Create the webhook before the meeting starts, or the bot misses the meeting.


How end users connect

End users authorize Webex (meeting bot) through Unified's authorization flow (embedded authorization or the authorization link) and approve the scopes above. A bot only receives notifications from its own connection's webhooks.


Test the setup

  1. Create a calendar_bot with the Webex meeting link (meeting_url), or with the id of a calendar_event listed on the same connection (event_id, the Webex meeting ID). The bot is READY. A bot created from an event_id that is a meeting instance already in progress starts in IN_CALL_NOT_RECORDING; a bot created from a meeting_url always starts in READY.
  2. Create a native webhook for calendar_botevent / created on the same connection.
  3. Start the meeting: expect BOT_STATUS_CHANGE to IN_CALL_NOT_RECORDING and PARTICIPANT_JOINED events.
  4. End the meeting: expect BOT_STATUS_CHANGE to CALL_ENDED. If the meeting was recorded or transcribed, expect RECORDING_READY and TRANSCRIPT_RECEIVED events later.
  5. Read the recording with GET /calendar/{connection_id}/recording/{recording_id} on the same connection.

Limits

  • Unsupported features return 501 (Not supported by this integration: …): join_at, and any recording_config (media capture or transcription). Malformed input returns 400. automatic_leave isn't used.
  • Final status is CALL_ENDED****. The meetings.ended notification doesn't say whether a recording will follow, so a Webex bot never moves to DONE. Watch for RECORDING_READY.
  • Recordings: Webex returns only recordings of meetings hosted by or shared with the connected user. A recording can take up to 24 hours to be ready, and a transcript about twice the meeting's length (up to 24 hours).
  • No live transcript, chat, webcam, screen-share or speaking events. Transcripts arrive after the meeting, one TRANSCRIPT_RECEIVED per snippet. Unified asks for 100 snippets per page, for up to 50 pages.
  • Recurring meetings: a bot created for a series or scheduled meeting follows the first occurrence that starts after the bot was created.
  • One active bot per meeting link per connection: creating another while an earlier bot for exactly the same link is still active (not CALL_ENDED, DONE or FATAL) returns 409.
  • Only name can be updated. An update with meeting_url or event_id returns 400.
  • Other errors on create: 400 for malformed input, 404 when no Webex meeting matches the link or event_id, and 422 when the meeting has no web link.
  • Webex aims to make the API data behind a notification available within 10 minutes (in 99.5% of cases); until then, looking it up can return 404. If the transcript isn't readable yet, Unified tries again for about 12 minutes, so TRANSCRIPT_RECEIVED events can arrive that much later than the transcript notification.
  • Deleting a bot stops following the meeting; no event is sent.

Troubleshooting

❌ No events at all

  • The calendar_botevent webhook was created after the meeting started, or on another connection
  • The Webex integration is missing a scope from Step 2 (reconnect after adding scopes)

❌ Creating a bot returns 501

The request includes join_at or recording_config. Remove them.

❌ No recording or transcript events

  • The meeting wasn't recorded or transcribed in Webex, or the site's plan has no cloud recording
  • The connected user didn't host the meeting and the recording wasn't shared with them
  • The connection is missing meeting:recordings_read or meeting:transcripts_read
  • Webex hasn't finished processing it yet (up to 24 hours)

❌ Events stopped arriving

Webex disabled the registrations after repeated delivery failures. Delete the calendar_botevent webhook and create it again.

Share
All guidesAccounting Account Type Hierarchy in UnifiedAdvertising Report Metrics by IntegrationAmazon S3: Required IAM PermissionsATS to Vector DB: How to Power Talent Intelligence with Real-Time DataBuilding AI applications with Unified and LangbaseConcur & Concur (Company) — Connection GuideConfigure Greenhouse Native Candidate WebhooksConfigure Salesforce Meetings and Notes for UnifiedConnect Amazon Seller Central to Unified.toConnecting BambooHR via OAuth 2Connecting Google Workspace Integrations with a Service AccountCorrect WelcomeKit Scopes for Jungle IntegrationCreating Ads using the Unified Ads APICreating Walmart Items via UnifiedEnd-Users, Integrations, and ConnectionsEnriching Unified Objects with Custom MetadataEnterprise-managed authorization (EMA) with a static keyEnterprise-managed authorization (EMA) with a workspace secretEnterprise-managed authorization (EMA) with Microsoft Entra IDExtended observability — pushing API logs to ClickHouseExtended observability — pushing API logs to Grafana / LokiExtended Observability - Pushing API Logs to your Datadog InstanceFacebook Messenger Webhook SetupFireflies Integration GuideGetting started with WorkableHandling Delegated vs. Application Scopes in Microsoft IntegrationsHiBob & Unified: connection and time off guideHow long are logs retainedHow to access employees and usersHow to add API support for the Create Activity in CrelateHow to Associate a Connection ID with Your End-UserHow to build a Candidate Assessment product withHow to build a candidate sourcing or job board app with Unified.toHow to build a Discord support bot with Unified.to and LangbaseHow to Build a Fintech Application with Unified's Payments APIHow to Build an E-Commerce Product Integration with UnifiedHow to build an invoicing system with Unified.toHow to build Enterprise Search using RAGHow to configure Bullhorn Redirect URI for creating a connectionHow to configure webhooks in HubSpotHow to configure webhooks in Thrive LearningHow to configure webhooks in Toast for UnifiedHow to Connect Anthropic to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Cohere to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Google Gemini to Real-Time SaaS Data with Unified.to MCP ServerHow to connect HiBob (Bob) to Unified with OAuth 2.0How to Connect LLMs to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect OpenAI to Real-Time SaaS Data with Unified.to MCP ServerHow to Connect Zoom and Zoom PhoneHow to create a Connection In Microsoft TeamsHow to create a token-based connection in HighlevelHow to Create a Unified.to Connection to HighLevelHow to Create a Xero Connection in Unified.toHow to create and configure webhooksHow to create Connection with HubspotHow to customize portal URLs for Stripe and GoCardlessHow to filter webhook eventsHow-to Get a Private Support Channel for Your Unified IntegrationHow to get help fromHow to get your 8x8 Connect API Key and Account ID: Step-by-step guideHow to get your ADP Workforce Now Oauth2 client ID, Oauth2 client secret, Oauth2 PEM certificate and Oauth2 private key: Step-by-step guideHow to get your Amazon S3 AWS Region, AWS S3 Key and AWS S3 Secret: Step-by-step guideHow to get your Ashby API Key: Step-by-step guideHow to get your Brex API token: Step-by-step guideHow to get your Bullhorn OAuth2 Client ID, OAuth2 Client Secret, API Username and API Password: Step-by-step guideHow to get your Ceridian Dayforce Username, Password and Client Namespace: Step-by-step guideHow to get your Crelate API key: Step-by-step guideHow to get your Dashlane API Key: Step-by-step guideHow to get your Deel Access Token: Step-by-step guideHow to get your Dialpad API Key: Step-by-step guideHow to get your Discord OAuth 2 credentials and bot tokenHow to get your ELMO client ID and client secret: Step-by-step guideHow to get your Gainsight Client ID, Client Secret and Gainsight API Domain: Step-by-step guideHow to get your Greenhouse API Key and Job board token: Step-by-step guideHow to get your Helpscout API Key: Step-by-step guideHow to get your HiBob Service User ID and Service User Token: Step-by-step guideHow to get your HighLevel API Key and Location ID: Step-by-step guideHow to get your HubSpot developer key and OAuth 2 credentials (Legacy Apps)How to get your Humaans API Key: Step-by-step guideHow to get your iCIMS API Username, API Password and Customer ID: Step-by-step guideHow to get your JobDiva Client ID, Username/email and Password: Step-by-step guideHow to get your Jobvite API Key, API Key Secret and Email: Step-by-step guideHow to get your Lever API Key: Step-by-step guideHow to get your Loxo Agency slug, API Key and Agency ID: Step-by-step guideHow to get your Microsoft Active Directory / Entra ID Client ID, Client Secret and Tenant ID: Step-by-step guideHow to get your Microsoft Azure AD OAuth 2 credentialsHow to get your OAuth 2 credentials for GmailHow to get your OAuth 2 credentials for Microsoft Dynamics 365How to get your OAuth 2 credentials in PipeDriveHow to get your OpenAI API Key: Step-by-step guideHow to get your Paycom SID/Username and Token/Password: Step-by-step guideHow to get your PCRecruiter Username, Password, Database ID, App Key and App ID: Step-by-step guideHow to get your SAP SuccessFactors (OpenID Connect) Username, Password, Client ID, Client Secret, Dependency Name, IAS Host and API URL: Step-by-step guideHow to get your SAP SuccessFactors Username, Company ID, Password and API URL: Step-by-step guideHow to get your Shopify Admin API access token and Store ID: Step-by-step guideHow to get your Wayfair Client ID, Client Secret and Vendor Encrypted Key: Step-by-step guideHow to get your Workable API Token and Subdomain: Step-by-step guideHow to get your yotpo APP Key / Store ID and Secret Key: Step-by-step guideHow to Handle Attachments in Invoice, Bill and Credit MemoHow to migrate or import your integrations into Unified.toHow to obtain your GitHub OAuth2 credentialsHow to Power Claude with Live Customer Data Using Unified MCPHow to receive assessment orders from an ATS with Unified.toHow to register a Google developer app and get OAuth 2 credentialsHow to register a Salesforce developer app and get OAuth 2 credentialsHow to register a Slack developer account and get OAuth 2 credentialsHow to Register a Workday Developer App and Get OAUTH2 CredentialsHow to Register a Workday Developer App and Get OAUTH2/ SOAP CredentialsHow to Register a ZendeskSell Developer App and Get OAUTH2 CredentialsHow to Register a Zoho Developer App and Get OAUTH2 CredentialsHow to Register an ADP Developer App and Get OAUTH2 CredentialsHow to Register an Atlassian Developer App and Get OAUTH2 CredentialsHow to Register your Facebook OAuth2 ApplicationHow to Register your Google Ads OAuth2 ApplicationHow to Register your MetaAds OAuth2 applicationHow To Request & Write Raw Integration DataHow to Retrieve Microsoft Dynamics 365 Business Central CredentialsHow to set up a custom API URL with a CNAMEHow to Set Up a Google Meet Meeting Bot with UnifiedHow to set up a HiBob marketplace installHow to Set Up a Microsoft Teams Bot with UnifiedHow to Set Up a Microsoft Teams Meeting Bot with UnifiedHow to Set Up a Zoom Meeting Bot with UnifiedHow to set up and configure NotionHow to set up Google Business Profile API access and get OAuth 2 credentialsHow to Set Up LinkedIn Webhooks with UnifiedHow to set up native webhooks for QuickBooks Online with UnifiedHow to set up Slack webhooks using event subscriptionsHow to set up Telegram (bot) with Unified.toHow to set up your scopes in HubSpotHow to setup a Freshbooks developer appHow to setup a TikTok Shop applicationHow to Setup AWS Assume Role for AWS Secret ManagerHow to setup Oracle JD EdwardsHow to Setup Quickbooks DesktopHow to setup Sage 100 with Unified.toHow to test webhooks in the Synthetic Data (Sandbox) environmentHow to troubleshoot unhealthy connectionsHow to troubleshoot unhealthy webhooksHow to use SCIM with the Unified APIHow to use the Passthrough APIHow to Use Unified.to's Generative AI API with OpenAI and ClaudeHow to use User Provisioning and Verification with UnifiedHow virtual webhook retry and recovery worksIntegration set-up guide for LeverManaging custom validation rules in SalesforceNetSuite Authentication Setup for UnifiedNotice of Deprecation of Fields and Objects (Nov 2025)Oracle HCM / Taleo OAuth Credentials GuideRetrieval-Augmented Generation (RAG)SalesForce (External Client Apps) on Multiple OrganizationsSAML Single-Sign-OnScaling MCP Tools with Anthropic's (& OpenAI's) Defer LoadingSet Environments for your Unified.to WorkspaceSetting up a Slack Bot Connection with Unified.toSetting up OAuth 2 Credentials for Greenhouse's APIsTrello Connection Guide in UnifiedUnderstanding OAuth2 Authorization flowsUnderstanding Response Time Headers in the Unified APIUnified Assessment API: Embed Assessments Inside ATS PlatformsUnified's MCP ServerUnified MCP Server with LangChain and LangGraphUnlock real-time data with virtual webhooksUse Unified to sign in your users into your applicationVincere OAuth Setup Guide for UnifiedWorkable: Creating candidates and attaching them to jobsWorkday vs Workday Legacy — Why Unified.to Supports BothWorking with hierarchical tree data in Storage, Messaging, and KMS APIs
Are we missing anything? Let us know
Was this page helpful?