Try it free

Zoom Workplace extension

  • Latest Dynatrace
  • Extension
  • Published Aug 20, 2026

Coming soon

Monitor Zoom Workplace meeting quality, availability, and user license capacity by ingesting metrics and structured logs from the Zoom REST API into Dynatrace.

Get started

Overview

The extension polls five Zoom REST API v2 endpoints and, per collection cycle:

  • Collects meeting activity: Live meeting count, per-meeting participant counts, and average meeting duration from the account-wide meeting list.
  • Collects per-participant call quality: Audio and video bitrate, latency, jitter, and packet loss, plus Zoom-client CPU usage, by fanning out one QoS call per live meeting.
  • Collects Zoom Room health: Availability, per-component hardware health, and open issue counts.
  • Collects user and phone inventory: Users by license type, department, and status, plus Zoom Phone devices by site and connectivity.
  • Builds Smartscape topology: ZOOM_ACCOUNT, ZOOM_ROOM, and ZOOM_PHONE_DEVICE nodes with their is_part_of edges on Smartscape on Grail.
  • Streams detail to Grail: Per-meeting, per-participant, and per-room-issue records as structured logs.
  • Visualizes the data: Four dashboards split into a Live track and a Trends track.
  • Detects problems: Seven pre-built alert templates.
  • Monitors itself: An optional self_monitoring feature set reports Zoom API success/failure counts and rate-limit hits as sfm.zoom.* metrics.

The five endpoints it calls:

Data groupEndpointCollection tierRate-limit class usedFeature set

Meeting overview

GET /metrics/meetings

Real time

Resource-intensive

default

Meeting participant QoS

GET /metrics/meetings/{meetingId}/participants/qos

Real time

Heavy

meeting_audio_qos, meeting_video_qos, participant_cpu_usage

Zoom Room health

GET /metrics/zoomrooms

Real time

Resource-intensive

zoom_room_health

User & license inventory

GET /users

Standard

Medium

user_license_capacity

Phone device inventory

GET /phone/devices

Standard

Medium

phone_device_status

The meeting QoS call is also made (independently of those three feature sets) whenever the meeting & participant activity logs option is on.

Five endpoints, but more than five calls per cycle: GET /users is issued three times (once each for active, inactive, and pending, because Zoom does not accept status=All), GET /phone/devices twice (assigned and unassigned), and the QoS endpoint once per live meeting. Every page of a paginated response counts as a separate call as well.

Use cases

  • Live meeting operations: See how many meetings and participants are active right now, and how long meetings are running, broken down by host license type and department.
  • Meeting-quality troubleshooting: Pinpoint the exact participant, meeting, location, network type, and Zoom data center behind choppy audio or frozen video, using packet loss, latency, jitter, and bitrate per direction.
  • Endpoint-side diagnosis: Determine whether a poor meeting experience comes from the network or from an overloaded participant device, using per-participant Zoom-client CPU usage.
  • Zoom Room fleet management: Detect rooms that are offline, degraded, or reporting a failing microphone, camera, controller, or bandwidth issue before the next meeting is scheduled in them.
  • License and capacity governance: Track user distribution across Basic / Licensed / Unassigned seats and active / inactive / pending states for seat reclamation and renewal planning.
  • Zoom Phone fleet health: Identify handsets that have dropped off the network, by site and assignee.
  • Extension health: Confirm the extension is collecting from Zoom cleanly, and see rate-limit pressure building before it turns into missing data.

Requirements

  • A Zoom Pro, Business, or Enterprise account. Business+ is recommended because the Dashboard APIs this extension depends on are gated by plan, and higher tiers carry higher rate limits.

  • Admin-level access to the Zoom App Marketplace to create a Server-to-Server OAuth app, with these scopes:

    OAuth scopeNeeded for

    dashboard:read:list_meetings:admin

    Meeting overview (default). Always required because the extension's fastcheck probes this endpoint

    dashboard:read:list_meeting_participants_qos:admin

    Meeting QoS and participant CPU, and the participant activity logs

    dashboard:read:list_zoomrooms:admin

    Zoom Room health

    user:read:list_users:admin

    User license & account capacity

    phone:read:list_devices:admin

    Phone device status

  • A Dynatrace ActiveGate running the Extensions Execution Controller (minEECVersion 1.313.0), with outbound HTTPS access to zoom.us (token endpoint) and api.zoom.us (API). A proxy can be configured if direct access is not available.

  • A Dynatrace environment on version 1.345.0 or later (minDynatraceVersion), which is also what the Smartscape 2.0 node/edge extraction requires.

Only the meeting-overview scope is validated at activation time. The other four degrade at runtime. If a scope is missing, that endpoint returns 403, the extension logs it and reports a non-OK endpoint status for that feature set, and the rest of the collection keeps working.

Compatibility information

This extension works with the Zoom REST API v2 and delivers complete, out-of-the-box observability for the following Zoom data groups:

  • Meetings
  • Meeting participant QoS
  • Zoom Rooms
  • Users & licenses
  • Phone devices

For these data groups, everything is ready to use from the moment a monitoring configuration is saved. Metrics, dashboards, alerts, and Smartscape topology are all populated for you.

Which data groups reach Dynatrace is determined by the feature sets you enable and the OAuth scopes you grant, not by the extension, so you always stay in control of what you collect and what it costs in Zoom API calls.

This extension also has the following constraints:

  • Remote (ActiveGate) activation only. There is no OneAgent/local activation path.
  • Python 3.10 or later on the ActiveGate.
  • One monitoring configuration per environment. The activation schema is multiObject: false with tenant scope, so a single Dynatrace environment monitors a single Zoom account.
  • Rate-limit pacing is pinned to Zoom's Pro plan limits (see Rate limiting and error handling). On a Business+ account, this is conservative, because the extension will simply be slower than it is allowed to be, not incorrect.
  • The Zoom API exposes no bulk, multi-meeting QoS call. Per-participant quality therefore costs one Heavy-class request per live meeting per cycle, which is why those feature sets are opt-in.

Activation and setup

Activation has four parts. Activate the extension from Dynatrace Hub, create the Zoom OAuth app, create the monitoring configuration, and verify that data is flowing. The prerequisites are listed under Requirements.

1. Activate the extension

Activate the Zoom Workplace extension in the Hub app. Upon activation, the extension deploys all its assets, including metric collection code, metric and topology definitions, the OpenPipeline settings, dashboards and alert templates.

The OpenPipeline metrics source is bound to this extension (sourceType: extension, source: com.dynatrace.extension.zoom-workplace) and statically routed to the Zoom Smartscape Metrics Pipeline. There is no dynamic route to add by hand. The zoom.* metrics reach the Smartscape pipeline automatically as soon as the extension starts reporting.

Once activated, everything that ships with the extension (the dashboards, the alert templates, and the OpenPipeline pipeline) is listed on the extension's Content page.

2. Create the Zoom Server-to-Server OAuth app

All five collection groups share a single Zoom Server-to-Server OAuth app. Create it once:

  1. Sign in to the Zoom App Marketplace as an account admin.
  2. Choose Develop > Build App.
  3. Select Server-to-Server OAuth and choose Create.
  4. Give the app a name (for example, Dynatrace Zoom Extension) and choose Create.
  5. On the App Credentials tab, copy the Account ID, Client ID, and Client Secret.
  6. On the Information tab, fill in the required company and developer contact fields.
  7. On the Scopes tab, choose Add Scopes and add every scope listed under Requirements that matches the feature sets you intend to enable.
  8. On the Activation tab, choose Activate your app.

3. Create the monitoring configuration

Add a monitoring configuration, choose the ActiveGate group that will run it, and fill in the fields below.

Authentication

FieldRequiredDescription

Zoom Account ID (account_id)

Yes

Account ID from the OAuth app's App Credentials tab.

Use credential vault (useCredentialVault)

No

When on, the Client ID and Client Secret are read from a Dynatrace credential vault entry instead of being typed in. Default: off.

Vault credentials (credentialVaultId)

Only when the vault is used

A USERNAME_PASSWORD credential whose username is the OAuth Client ID and whose password is the OAuth Client Secret.

OAuth Client ID (client_id)

Only when the vault is not used

Client ID from the OAuth app.

OAuth Client Secret (client_secret)

Only when the vault is not used

Client Secret from the OAuth app. Stored as a secret and used only in the HTTP Basic header of the token request. Never written to the log.

Collection intervals

FieldDefaultRangeApplies to

Real time interval (real_time_interval)

60 s

30-300

GET /metrics/meetings, the per-meeting QoS fan-out, and GET /metrics/zoomrooms

Standard interval (standard_interval)

300 s

60-3600

GET /users and GET /phone/devices

A value outside its range, or one that is not a number, is logged and replaced with the default rather than failing the configuration. The self_monitoring metrics are flushed on a fixed 60-second cadence, independent of both intervals.

Options

FieldDefaultDescription

Enable meeting & participant activity logs (meeting_activity_logs)

true

Sends zoom.meeting.activity and zoom.participant.activity records to Grail. This independently drives the per-meeting QoS call. See the warning below.

Enable debug logging (debug_logging)

false

Raises the extension log level to DEBUG. Not intended to be left on in production.

Proxy (proxy)

not set

Optional address (must start with http:// or https://), username, password, and no_proxy exception list. A malformed address is logged and treated as "no proxy" rather than failing the cycle.

OAuth token URL (token_url)

https://zoom.us/oauth/token

For Zoom Workplace Gov accounts, use the Gov-specific token endpoint instead of the standard one.

API base URL (base_url)

https://api.zoom.us/v2

For Zoom Workplace Gov accounts, use the Gov-specific API base URL instead of the standard one.

meeting_activity_logs is not a display-only switch. When it is on, every real-time cycle calls GET /metrics/meetings/{meetingId}/participants/qos for each live meeting to source the participant log, even if meeting_audio_qos, meeting_video_qos, and participant_cpu_usage are all disabled. If you turned the QoS feature sets off to control API volume, turn this off as well. Zoom Room issue logs behave differently. They have no separate toggle and simply follow the zoom_room_health feature set, because that feature set already fetches the data they are built from.

Feature sets

Select the feature sets you want on the same configuration screen. default is always active. The rest are opt-in per monitoring configuration.

4. Verify

On save, the extension runs a pre-flight check (fastcheck) that:

  1. Confirms account_id, Client ID, and Client Secret are all present, including the case where the credential vault is selected but injected no username/password, which is reported as a distinct error instead of silently producing no data.
  2. Requests an OAuth token from the token URL using HTTP Basic authentication.
  3. Calls GET /metrics/meetings?type=live&page_size=1 with today's date as both from and to, as a lightweight validation call.

A green status on the monitoring configuration means all three passed. Data appears on the dashboards within one or two collection cycles.

Details

The Zoom Workplace extension collects metrics and topology for:

  • Zoom Account
  • Zoom Room
  • Zoom Phone Device

Metrics are reported under the zoom.* namespace and collected from the following feature sets (enable them per monitoring configuration during activation). The default feature set is always on and reports active meetings, per-meeting participant counts, and average meeting duration:

  • Zoom Room health (zoom_room_health): Room availability, per-component hardware health, and open issue counts
  • User license & account capacity (user_license_capacity): User inventory by license type, department, and activation status
  • Phone device status (phone_device_status): Zoom Phone device connectivity by site
  • Meeting audio QoS (meeting_audio_qos): Per-participant audio bitrate, latency, jitter, and packet loss
  • Meeting video QoS (meeting_video_qos): The same for video, plus resolution
  • Participant CPU usage (participant_cpu_usage): Per-participant Zoom-client CPU min/avg/max
  • Self monitoring (self_monitoring): Zoom API success/failure counts and rate-limit hits, reported as sfm.zoom.*

The extension is packaged with four dashboards, two Live pages (Rooms, and Users & Phone Devices) and two Trends pages (Meeting Quality, and API Monitoring), that serve as a starting point for data analysis, and with seven alert templates that ship inactive and can be enabled from the extension's Content page.

Rate limiting and error handling

Zoom enforces API rate limits at the account level, shared by every OAuth app and integration connected to that account, not per API key and not per app. The extension therefore paces itself proactively rather than waiting to be rejected.

Pacing

A single token-bucket registry is shared by every collector and every QoS worker thread, so it tracks the total request rate across the extension. It is sized for Zoom's Pro plan and deliberately runs at 80% of each published ceiling to leave margin for network timing:

API classPro-plan ceilingUsed by

Light

30 req/s

— (reserved)

Medium

20 req/s

GET /users, GET /phone/devices

Heavy

10 req/s

GET /metrics/meetings/{meetingId}/participants/qos

Resource-intensive

10 req/minute

GET /metrics/meetings, GET /metrics/zoomrooms

Resource-intensive is the strictest of the four, because it is a per-minute limit rather than a per-second one. Zoom also applies a daily cap shared between the Heavy and Resource-intensive classes (30,000 requests/day on Pro). That cap is not paced proactively, but handled reactively when Zoom reports it.

Handling active rate limits

When Zoom rate-limits anyway (because something else on the account is also making requests), the extension reads the X-RateLimit-Type header and reacts accordingly:

SituationHandling

429 with X-RateLimit-Type: QPS

Wait until X-RateLimit-Reset, or back off 1 s → 2 s → 4 s, and retry up to 3 times. If the computed wait would exceed 15 s, abort the call rather than block the cycle.

429 with X-RateLimit-Type: Daily-limit

Parse Retry-After (plain seconds, HTTP date, or ISO 8601 all accepted, defaulting to 1 hour if unparseable), arm a cooldown for that API class, and skip the network call entirely until it expires.

401 Unauthorized

Force a single token refresh and retry once. A second 401 is unrecoverable.

403 Forbidden

Fail immediately due to an insufficient OAuth scope. Not retried.

400 Bad Request

Fail immediately. Not retried.

404 Not Found

Skipped silently on the QoS call. This is the expected race when a meeting ends between the list call and the QoS call.

5xx / transport error

Retry up to 3 times, backing off 2 s → 4 s → 8 s.

Malformed JSON

Retry up to 3 times with the same backoff.

Failure handling

Every collector treats a failed endpoint as a skipped cycle rather than a crash. It logs the failure with a DEC: code, reports the appropriate endpoint status, and lets the next scheduled cycle try again.

Pagination

All five endpoints are cursor-paginated via next_page_token, which expires after 15 minutes. If a cycle's pagination exceeds that window, the extension restarts once from page 1. A restart that also exceeds it is reported as an error. Page sizes are 300 for meetings, rooms, users, and phone devices, and 10 for the QoS endpoint (Zoom's maximum).

QoS fan-out

Because Zoom exposes no bulk multi-meeting QoS call, each live meeting is fetched individually. A bounded pool of 8 workers drains this queue, paced against the shared Heavy bucket, and each meeting's results are reported and released as its fetch completes, so a large account's full QoS payload is never held in memory at once.

Which QoS sample is reported

Zoom returns user_qos in ascending time order, and the last element is the current, possibly still-incomplete minute. The extension reports the second-to-last element (the most recent fully elapsed minute) and stamps the metric at that sample's own timestamp rather than at collection wall-clock. A participant with fewer than two samples is skipped, and individual blank or unparseable QoS fields are skipped rather than reported as false zeros.

Smartscape on Grail

The extension models its estate twice, and both models are installed automatically.

Classic topology

Declared in extension.yaml and built directly from metric dimensions:

Entity typeDisplay nameID patternCreated from

zoom:account

Zoom Account

zoom_account_{account_id}

any zoom.* metric carrying account_id

zoom:room

Zoom Room

zoom_room_{room_id}

zoom.rooms

zoom:phone_device

Zoom Phone Device

zoom_phone_device_{device_id}

zoom.phone.devices

Both zoom:room and zoom:phone_device are related to zoom:account with a PART_OF relationship, mirroring how Zoom organizes its estate.

Smartscape 2.0

Built by the bundled Zoom Smartscape Metrics Pipeline, which extracts nodes and edges from the zoom.* metrics as they arrive, so the map stays live rather than static:

Node typeIdentified byNamed fromUpserted by

ZOOM_ACCOUNT

account_id

Zoom Account - {account_id}

zoom.meetings.active

ZOOM_ROOM

account_id + room_id

room_name

zoom.rooms

ZOOM_PHONE_DEVICE

account_id + device_id

display_name

zoom.phone.devices

Each Zoom Room and Zoom Phone Device node carries an is_part_of static edge to its Zoom Account node. Every zoom.* metric is also stamped with the Zoom Account node ID, and the room metrics (zoom.rooms, zoom.room.component.status) with the Zoom Room node ID, so metrics attach to the right node.

The account node is upserted from zoom.meetings.active, which belongs to the always-on default feature set, so the account node exists as long as the extension is reporting at all. Room and phone device nodes require their respective feature sets to be enabled.

To explore the topology, open the Smartscape app and filter for Zoom Account, Zoom Room, or Zoom Phone Device, then select an entity to walk its connections. Allow a few minutes after the first collection cycle.

Licensing and costs

There is no charge to use the extension. You are only charged for the data that the extension ingests.

The Zoom Workplace extension ingests metrics and structured logs. The extracted metrics consume Davis Data Units (DDUs) (Dynatrace classic license) or Metrics powered by Grail (DPS), according to your license model.

Dynatrace Platform Subscription

In the Dynatrace Platform Subscription, metric ingestion consumes Metrics powered by Grail according to the number of ingested metric data points.

The following formula provides approximate data points ingested per minute, assuming all feature sets are enabled and the default collection intervals.

(
( 3 unique meeting metrics * dimension combinations ) -- default (always on)
+ ( 5 unique audio QoS metrics * dimension combinations ) -- meeting_audio_qos
+ ( 5 unique video QoS metrics * dimension combinations ) -- meeting_video_qos
+ ( 3 unique CPU metrics * dimension combinations ) -- participant_cpu_usage
+ ( 3 unique Zoom Room metrics * dimension combinations ) -- zoom_room_health
+ ( 1 unique user metric * dimension combinations ) -- user_license_capacity (every 5 min)
+ ( 1 unique phone device metric * dimension combinations ) -- phone_device_status (every 5 min)
+ ( 3 unique self-monitoring metrics * dimension combinations ) -- self_monitoring
) * 60 minutes * 24 hours * 365 days data points per year

A "dimension combination" is a distinct set of values across a metric's dimensions. Omit any line for a feature set you don't enable.

In practice, each combination maps onto one real object (a meeting, participant, Zoom Room, user, or phone device) because every metric carries an identity dimension (meeting_id, participant_id, room_id, user_id, device_id). Only two dimensions multiply that count, direction (input/output) on the QoS metrics and component (six values) on zoom.room.component.status. So cost scales with the size of your live Zoom estate and how often you poll it, not with the number of metric keys or dimensions.

For the activity logs, regular consumption applies. See Log Analytics. Activity logs add one record per live meeting, one per participant with a QoS sample, and one per open Zoom Room issue, per real-time cycle.

Dynatrace classic license

In the classic licensing model, metric ingestion consumes Davis Data Units (DDUs) at the rate of .001 DDUs per metric data point. Multiply the above formula for annual data points by .001 to estimate annual DDU usage.

For the activity logs, regular consumption applies. See DDU consumption for Log Management and Analytics or DDUs for Log Monitoring Classic. Activity logs add one record per live meeting, one per participant with a QoS sample, and one per open Zoom Room issue, per real-time cycle.

DDUs consumed by this extension are eligible for the free tier included with every host.

DQL and logs

Beyond metrics, the extension sends three structured log streams to Grail. Logs carry the per-meeting, per-participant, and per-room-issue detail that would otherwise explode metric cardinality, and they stay queryable with DQL.

Log sourceOne record perEmitted byGated by

zoom.meeting.activity

live meeting, per real-time cycle

meeting list (GET /metrics/meetings)

meeting_activity_logs option

zoom.participant.activity

participant with a reportable QoS sample, per real-time cycle

QoS fan-out (GET /metrics/meetings/{meetingId}/participants/qos)

meeting_activity_logs option

zoom.room.issue

entry in a room's issues[] array, per real-time cycle

Zoom Room poll (GET /metrics/zoomrooms)

zoom_room_health feature set

Every record carries timestamp, log.source, event.type, content, dt.extension.name, and dt.extension.config.id, plus the fields below. zoom.meeting.activity and zoom.participant.activity records are flushed to the platform in batches of 1000 rather than accumulated for a whole cycle, so the log buffer never scales with the account's meeting × participant count. zoom.room.issue records are flushed once, at the end of the Zoom Room poll.

zoom.meeting.activity

event.type is meeting_sample.

FieldDescription

zoom.account_id

Zoom account ID

zoom.meeting_id

Meeting ID

zoom.host_dept

Host's department

zoom.user_type

Host's license type

zoom.participants

Participant count at sample time

zoom.audio_quality

Zoom's own audio quality rating for the meeting

zoom.video_quality

Zoom's own video quality rating for the meeting

zoom.participant.activity

event.type is participant_qos_sample.

Field groupFields

Identifiers

zoom.account_id, zoom.meeting_id, zoom.participant_ref

Client context

zoom.device, zoom.client, zoom.os, zoom.os_version, zoom.version, zoom.location, zoom.network_type, zoom.connection_type, zoom.data_center

Audio quality

zoom.audio.avg_loss, zoom.audio.max_loss, zoom.audio.latency, zoom.audio.jitter

Video quality

zoom.video.avg_loss, zoom.video.max_loss, zoom.video.latency, zoom.video.jitter

CPU

zoom.cpu.zoom_avg, zoom.cpu.zoom_max

Media socket breaks

zoom.audio.socket_break, zoom.video.socket_break, zoom.as.socket_break, zoom.command.socket_break

Diagnosis

zoom.health, zoom.issue_list, zoom.rc_reason (reconnect reason)

zoom.room.issue

event.type is room_issue.

FieldDescription

zoom.account_id

Zoom account ID

zoom.room_id, zoom.room_name, zoom.location

Which room

zoom.health_state

The room's normalized health state at sample time

zoom.issue

The raw issue text Zoom reported

Personally identifiable information

The activity logs deliberately exclude PII. user_name, email, ip_address, mac_addr, and pc_name are never written to zoom.participant.activity, and the meeting record carries the host's department and license type but not their name or email. Note that this is a property of the logs. The QoS metrics do carry a participant_name dimension, and zoom.meetings.participants carries a host dimension, because the dashboards and alerts identify who is affected.

The Live Rooms dashboard's Recent Room Issues tile reads zoom.room.issue directly. The other two streams are available for ad-hoc DQL in Notebooks.

FAQ

The extension is green but no Zoom entities appear.

The Zoom Account entity is built from zoom.meetings.active, which belongs to the always-on default feature set, but that metric is only reported when at least one meeting is live. On a quiet account, wait until a meeting starts. Zoom Room and Zoom Phone Device entities additionally require the zoom_room_health and phone_device_status feature sets. No OpenPipeline dynamic route needs to be created. The metrics source is statically routed to the Smartscape pipeline as part of activation.

The Meeting Quality dashboard is empty.

That dashboard needs meeting_audio_qos, meeting_video_qos, and participant_cpu_usage, all of which ship disabled because each costs one Heavy API call per live meeting. Enable them on the monitoring configuration. The dashboard's header tile states the same requirement.

The API Monitoring dashboard is empty.

It reads sfm.zoom.*, which is only collected while the self_monitoring feature set is enabled. Counting is skipped entirely when the feature set is off, so there is no back-fill after enabling it. Data starts at the next 60-second flush.

QoS metrics are missing for short meetings.

The extension reports the second-to-last user_qos sample (the most recent fully elapsed minute) and skips participants with fewer than two samples. A participant who has been in a meeting for less than roughly two QoS minutes produces no QoS metrics yet. This is deliberate, because the newest sample is the current, still-incomplete minute and would report artificially low values.

Some QoS fields are blank on the dashboard even though the participant is connected.

Zoom does not return every QoS field for every sampled minute. Fields it leaves empty are simply not reported, so a chart gap means "Zoom did not report this field for this minute", not "the value was 0". This is most visible on sparsely populated media fields.

Alert templates do not trigger.

Alert templates ship disabled. Enable the ones you want from the extension's Content > Alert template page. Enabling one adds it to Anomaly Detection. Then check two things. First, that the feature set the alert depends on is actually enabled. Second, that you have not raised real_time_interval or standard_interval without widening the templates' sliding windows. Each template evaluates one-minute buckets, so a longer poll interval leaves most buckets in the window empty.

The Live dashboards show averaged data for wider timeframes.

The Live pages open on a fixed 5-minute window on purpose, to show current state. Widening the timeframe makes their directory tables report an average across the whole selected range instead of the latest reading. Use the Trends dashboards for longer ranges.

Zoom rate limit errors occur.

Zoom's limits are account-wide and shared with every other integration on that account, so another tool can consume the quota. Enable self_monitoring and check sfm.zoom.api.rate_limit.hit, split by limit_type and api_class, on the API Monitoring dashboard. Daily-limit hits on the Heavy or Resource-intensive class almost always mean the QoS fan-out. See the next question. Note also that the extension's pacing is pinned to Pro-plan limits, so on a Business+ account it stays well under what you are entitled to.

How to limit cost and API volume?

In order of impact:

  1. Disable meeting_audio_qos, meeting_video_qos, and participant_cpu_usage, and turn off meeting_activity_logs. Otherwise the per-meeting QoS call still runs to source the participant logs.
  2. Raise real_time_interval toward its 300-second maximum, remembering to widen the alert templates' sliding windows to match.
  3. Raise standard_interval for the user and phone inventory, which rarely changes minute to minute.
  4. Disable feature sets whose entities you do not operate.
Related tags
PythonApplicationCloud infrastructureZoomInfrastructure Observability