wxcli 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. wxcli/__init__.py +4 -0
  2. wxcli/_playbook/.claude/agents/migration-advisor.md +239 -0
  3. wxcli/_playbook/.claude/agents/wxc-calling-builder.md +946 -0
  4. wxcli/_playbook/.claude/rules/cleanup.md +29 -0
  5. wxcli/_playbook/.claude/rules/cucm-migration.md +58 -0
  6. wxcli/_playbook/.claude/rules/org-health.md +14 -0
  7. wxcli/_playbook/.claude/settings.json +8 -0
  8. wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +515 -0
  9. wxcli/_playbook/.claude/skills/call-control/SKILL.md +747 -0
  10. wxcli/_playbook/.claude/skills/configure-features/SKILL.md +623 -0
  11. wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +627 -0
  12. wxcli/_playbook/.claude/skills/contact-center/SKILL.md +1181 -0
  13. wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +820 -0
  14. wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +443 -0
  15. wxcli/_playbook/.claude/skills/device-platform/SKILL.md +407 -0
  16. wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +757 -0
  17. wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +790 -0
  18. wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +638 -0
  19. wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +528 -0
  20. wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +708 -0
  21. wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +365 -0
  22. wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +520 -0
  23. wxcli/_playbook/.claude/skills/org-health/SKILL.md +159 -0
  24. wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +421 -0
  25. wxcli/_playbook/.claude/skills/query-live/SKILL.md +183 -0
  26. wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +223 -0
  27. wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +44 -0
  28. wxcli/_playbook/.claude/skills/query-live/domains/features.md +169 -0
  29. wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +93 -0
  30. wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +146 -0
  31. wxcli/_playbook/.claude/skills/query-live/domains/routing.md +124 -0
  32. wxcli/_playbook/.claude/skills/reporting/SKILL.md +501 -0
  33. wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +1628 -0
  34. wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +251 -0
  35. wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +290 -0
  36. wxcli/_playbook/.claude/skills/teardown/SKILL.md +214 -0
  37. wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +379 -0
  38. wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +475 -0
  39. wxcli/_playbook/CLAUDE.md +373 -0
  40. wxcli/_playbook/docs/reference/CLAUDE.md +25 -0
  41. wxcli/_playbook/docs/reference/admin-apps-data.md +643 -0
  42. wxcli/_playbook/docs/reference/admin-audit-security.md +322 -0
  43. wxcli/_playbook/docs/reference/admin-hybrid.md +383 -0
  44. wxcli/_playbook/docs/reference/admin-identity-scim.md +1007 -0
  45. wxcli/_playbook/docs/reference/admin-licensing.md +414 -0
  46. wxcli/_playbook/docs/reference/admin-org-management.md +586 -0
  47. wxcli/_playbook/docs/reference/admin-partner.md +357 -0
  48. wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +1229 -0
  49. wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +835 -0
  50. wxcli/_playbook/docs/reference/archive/wxcadm-core.md +743 -0
  51. wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +1305 -0
  52. wxcli/_playbook/docs/reference/archive/wxcadm-features.md +849 -0
  53. wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +938 -0
  54. wxcli/_playbook/docs/reference/archive/wxcadm-person.md +1255 -0
  55. wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +1262 -0
  56. wxcli/_playbook/docs/reference/authentication.md +965 -0
  57. wxcli/_playbook/docs/reference/call-control.md +1205 -0
  58. wxcli/_playbook/docs/reference/call-features-additional.md +2541 -0
  59. wxcli/_playbook/docs/reference/call-features-major.md +1320 -0
  60. wxcli/_playbook/docs/reference/call-routing.md +2304 -0
  61. wxcli/_playbook/docs/reference/contact-center-analytics.md +1049 -0
  62. wxcli/_playbook/docs/reference/contact-center-core.md +1614 -0
  63. wxcli/_playbook/docs/reference/contact-center-journey.md +457 -0
  64. wxcli/_playbook/docs/reference/contact-center-routing.md +1138 -0
  65. wxcli/_playbook/docs/reference/devices-core.md +1869 -0
  66. wxcli/_playbook/docs/reference/devices-dect.md +1150 -0
  67. wxcli/_playbook/docs/reference/devices-platform.md +467 -0
  68. wxcli/_playbook/docs/reference/devices-workspaces.md +1426 -0
  69. wxcli/_playbook/docs/reference/emergency-services.md +1122 -0
  70. wxcli/_playbook/docs/reference/location-calling-core.md +2037 -0
  71. wxcli/_playbook/docs/reference/location-calling-media.md +1334 -0
  72. wxcli/_playbook/docs/reference/location-recording-advanced.md +1482 -0
  73. wxcli/_playbook/docs/reference/meetings-content.md +473 -0
  74. wxcli/_playbook/docs/reference/meetings-core.md +903 -0
  75. wxcli/_playbook/docs/reference/meetings-infrastructure.md +899 -0
  76. wxcli/_playbook/docs/reference/meetings-settings.md +850 -0
  77. wxcli/_playbook/docs/reference/messaging-bots.md +1091 -0
  78. wxcli/_playbook/docs/reference/messaging-spaces.md +695 -0
  79. wxcli/_playbook/docs/reference/person-call-settings-behavior.md +1639 -0
  80. wxcli/_playbook/docs/reference/person-call-settings-handling.md +1394 -0
  81. wxcli/_playbook/docs/reference/person-call-settings-media.md +1898 -0
  82. wxcli/_playbook/docs/reference/person-call-settings-permissions.md +1329 -0
  83. wxcli/_playbook/docs/reference/provisioning.md +1366 -0
  84. wxcli/_playbook/docs/reference/reporting-analytics.md +1318 -0
  85. wxcli/_playbook/docs/reference/self-service-call-settings.md +1020 -0
  86. wxcli/_playbook/docs/reference/virtual-lines.md +1132 -0
  87. wxcli/_playbook/docs/reference/webhooks-events.md +1444 -0
  88. wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +953 -0
  89. wxcli/_version.py +24 -0
  90. wxcli/auth.py +137 -0
  91. wxcli/commands/__init__.py +0 -0
  92. wxcli/commands/_registry.py +181 -0
  93. wxcli/commands/activation_email.py +103 -0
  94. wxcli/commands/admin_recordings.py +585 -0
  95. wxcli/commands/analytics.py +105 -0
  96. wxcli/commands/announcement_playlists.py +219 -0
  97. wxcli/commands/announcements.py +519 -0
  98. wxcli/commands/archive_users.py +36 -0
  99. wxcli/commands/attachment_actions.py +60 -0
  100. wxcli/commands/audit_events.py +83 -0
  101. wxcli/commands/authorizations.py +113 -0
  102. wxcli/commands/auto_attendant.py +642 -0
  103. wxcli/commands/broadworks_billing_reports.py +126 -0
  104. wxcli/commands/broadworks_enterprises.py +160 -0
  105. wxcli/commands/broadworks_subscribers.py +319 -0
  106. wxcli/commands/broadworks_workspaces.py +108 -0
  107. wxcli/commands/call_controls.py +1304 -0
  108. wxcli/commands/call_park.py +494 -0
  109. wxcli/commands/call_pickup.py +229 -0
  110. wxcli/commands/call_queue.py +1878 -0
  111. wxcli/commands/call_recording.py +707 -0
  112. wxcli/commands/call_routing.py +1610 -0
  113. wxcli/commands/call_settings_for_me_phase_5.py +212 -0
  114. wxcli/commands/caller_reputation.py +169 -0
  115. wxcli/commands/calling_service.py +305 -0
  116. wxcli/commands/cc_address_book.py +770 -0
  117. wxcli/commands/cc_agent_greetings.py +242 -0
  118. wxcli/commands/cc_agent_summaries.py +39 -0
  119. wxcli/commands/cc_agent_wellbeing.py +216 -0
  120. wxcli/commands/cc_agents.py +425 -0
  121. wxcli/commands/cc_ai_assistant.py +55 -0
  122. wxcli/commands/cc_ai_feature.py +294 -0
  123. wxcli/commands/cc_audio_files.py +149 -0
  124. wxcli/commands/cc_auto_csat.py +311 -0
  125. wxcli/commands/cc_aux_code.py +458 -0
  126. wxcli/commands/cc_business_hour.py +353 -0
  127. wxcli/commands/cc_call_monitoring.py +228 -0
  128. wxcli/commands/cc_callbacks.py +194 -0
  129. wxcli/commands/cc_campaign.py +212 -0
  130. wxcli/commands/cc_captures.py +39 -0
  131. wxcli/commands/cc_contact_list.py +169 -0
  132. wxcli/commands/cc_contact_number.py +295 -0
  133. wxcli/commands/cc_data_sources.py +235 -0
  134. wxcli/commands/cc_desktop_layout.py +380 -0
  135. wxcli/commands/cc_desktop_profile.py +322 -0
  136. wxcli/commands/cc_dial_number.py +511 -0
  137. wxcli/commands/cc_dial_plan.py +347 -0
  138. wxcli/commands/cc_dnc.py +101 -0
  139. wxcli/commands/cc_entry_point.py +545 -0
  140. wxcli/commands/cc_ewt.py +51 -0
  141. wxcli/commands/cc_flow.py +477 -0
  142. wxcli/commands/cc_global_vars.py +430 -0
  143. wxcli/commands/cc_holiday_list.py +335 -0
  144. wxcli/commands/cc_journey.py +1261 -0
  145. wxcli/commands/cc_legacy_flows.py +49 -0
  146. wxcli/commands/cc_multimedia_profile.py +436 -0
  147. wxcli/commands/cc_notification.py +51 -0
  148. wxcli/commands/cc_outdial_ani.py +604 -0
  149. wxcli/commands/cc_overrides.py +341 -0
  150. wxcli/commands/cc_queue.py +1083 -0
  151. wxcli/commands/cc_queue_stats.py +55 -0
  152. wxcli/commands/cc_realtime.py +51 -0
  153. wxcli/commands/cc_resource_collection.py +312 -0
  154. wxcli/commands/cc_search.py +46 -0
  155. wxcli/commands/cc_site.py +400 -0
  156. wxcli/commands/cc_skill.py +350 -0
  157. wxcli/commands/cc_skill_profile.py +289 -0
  158. wxcli/commands/cc_subscriptions.py +426 -0
  159. wxcli/commands/cc_summaries.py +130 -0
  160. wxcli/commands/cc_tasks.py +844 -0
  161. wxcli/commands/cc_team.py +325 -0
  162. wxcli/commands/cc_user_profiles.py +349 -0
  163. wxcli/commands/cc_users.py +701 -0
  164. wxcli/commands/cc_work_types.py +363 -0
  165. wxcli/commands/cdr.py +89 -0
  166. wxcli/commands/classifications.py +38 -0
  167. wxcli/commands/cleanup.py +1427 -0
  168. wxcli/commands/client_settings.py +72 -0
  169. wxcli/commands/conference.py +328 -0
  170. wxcli/commands/configure.py +72 -0
  171. wxcli/commands/converged_recordings.py +347 -0
  172. wxcli/commands/converged_recordings_export.py +310 -0
  173. wxcli/commands/cq_playlists.py +42 -0
  174. wxcli/commands/cucm.py +2794 -0
  175. wxcli/commands/cucm_config.py +129 -0
  176. wxcli/commands/customer_assist.py +373 -0
  177. wxcli/commands/data_sources.py +227 -0
  178. wxcli/commands/dect_devices.py +787 -0
  179. wxcli/commands/device_configurations.py +77 -0
  180. wxcli/commands/device_dynamic_settings.py +320 -0
  181. wxcli/commands/device_settings.py +1489 -0
  182. wxcli/commands/devices.py +280 -0
  183. wxcli/commands/domains.py +142 -0
  184. wxcli/commands/ecm.py +178 -0
  185. wxcli/commands/emergency_services.py +827 -0
  186. wxcli/commands/events.py +83 -0
  187. wxcli/commands/external_voicemail.py +52 -0
  188. wxcli/commands/groups.py +206 -0
  189. wxcli/commands/guest_management.py +76 -0
  190. wxcli/commands/hds.py +340 -0
  191. wxcli/commands/hot_desk.py +67 -0
  192. wxcli/commands/hot_desking_members.py +118 -0
  193. wxcli/commands/hot_desking_portal.py +124 -0
  194. wxcli/commands/hunt_group.py +577 -0
  195. wxcli/commands/hybrid_clusters.py +71 -0
  196. wxcli/commands/hybrid_connectors.py +67 -0
  197. wxcli/commands/identity_org.py +159 -0
  198. wxcli/commands/init_playbook.py +155 -0
  199. wxcli/commands/licenses.py +106 -0
  200. wxcli/commands/live_monitoring.py +40 -0
  201. wxcli/commands/location_call_handling.py +577 -0
  202. wxcli/commands/location_schedules.py +341 -0
  203. wxcli/commands/location_settings.py +1297 -0
  204. wxcli/commands/location_voicemail.py +494 -0
  205. wxcli/commands/locations.py +336 -0
  206. wxcli/commands/meeting_captions.py +110 -0
  207. wxcli/commands/meeting_chats.py +63 -0
  208. wxcli/commands/meeting_invitees.py +234 -0
  209. wxcli/commands/meeting_messages.py +28 -0
  210. wxcli/commands/meeting_participants.py +278 -0
  211. wxcli/commands/meeting_polls.py +111 -0
  212. wxcli/commands/meeting_preferences.py +515 -0
  213. wxcli/commands/meeting_qa.py +78 -0
  214. wxcli/commands/meeting_qualities.py +43 -0
  215. wxcli/commands/meeting_reports.py +101 -0
  216. wxcli/commands/meeting_session_types.py +105 -0
  217. wxcli/commands/meeting_site.py +57 -0
  218. wxcli/commands/meeting_slido.py +44 -0
  219. wxcli/commands/meeting_summaries.py +92 -0
  220. wxcli/commands/meeting_tracking_codes.py +233 -0
  221. wxcli/commands/meeting_transcripts.py +230 -0
  222. wxcli/commands/meetings.py +1997 -0
  223. wxcli/commands/memberships.py +164 -0
  224. wxcli/commands/messages.py +213 -0
  225. wxcli/commands/mode_management.py +244 -0
  226. wxcli/commands/my_call_settings.py +3577 -0
  227. wxcli/commands/numbers.py +405 -0
  228. wxcli/commands/operating_modes.py +410 -0
  229. wxcli/commands/org_contacts.py +284 -0
  230. wxcli/commands/org_health_cli.py +55 -0
  231. wxcli/commands/org_settings.py +71 -0
  232. wxcli/commands/organizations.py +83 -0
  233. wxcli/commands/paging_group.py +257 -0
  234. wxcli/commands/partner_admins.py +141 -0
  235. wxcli/commands/partner_reports.py +188 -0
  236. wxcli/commands/partner_tags.py +216 -0
  237. wxcli/commands/people.py +279 -0
  238. wxcli/commands/person_call_settings.py +71 -0
  239. wxcli/commands/pstn.py +280 -0
  240. wxcli/commands/recording_report.py +154 -0
  241. wxcli/commands/report_templates.py +38 -0
  242. wxcli/commands/reports.py +144 -0
  243. wxcli/commands/resource_group_memberships.py +160 -0
  244. wxcli/commands/resource_groups.py +67 -0
  245. wxcli/commands/roles.py +63 -0
  246. wxcli/commands/room_tabs.py +160 -0
  247. wxcli/commands/rooms.py +225 -0
  248. wxcli/commands/scim_bulk.py +46 -0
  249. wxcli/commands/scim_groups.py +246 -0
  250. wxcli/commands/scim_schemas.py +82 -0
  251. wxcli/commands/scim_users.py +283 -0
  252. wxcli/commands/security_audit.py +54 -0
  253. wxcli/commands/service_apps.py +51 -0
  254. wxcli/commands/single_number_reach.py +209 -0
  255. wxcli/commands/team_memberships.py +155 -0
  256. wxcli/commands/teams.py +153 -0
  257. wxcli/commands/ucm_profile.py +42 -0
  258. wxcli/commands/update.py +219 -0
  259. wxcli/commands/user_settings.py +5116 -0
  260. wxcli/commands/video_mesh.py +1090 -0
  261. wxcli/commands/virtual_extensions.py +502 -0
  262. wxcli/commands/virtual_line_settings.py +2072 -0
  263. wxcli/commands/webhooks.py +176 -0
  264. wxcli/commands/wholesale_billing_reports.py +147 -0
  265. wxcli/commands/wholesale_provisioning.py +523 -0
  266. wxcli/commands/workspace_locations.py +339 -0
  267. wxcli/commands/workspace_metrics.py +103 -0
  268. wxcli/commands/workspace_personalization.py +70 -0
  269. wxcli/commands/workspace_settings.py +3347 -0
  270. wxcli/commands/workspaces.py +279 -0
  271. wxcli/commands/xapi.py +114 -0
  272. wxcli/config.py +139 -0
  273. wxcli/errors.py +77 -0
  274. wxcli/main.py +210 -0
  275. wxcli/migration/CLAUDE.md +106 -0
  276. wxcli/migration/__init__.py +1 -0
  277. wxcli/migration/advisory/CLAUDE.md +196 -0
  278. wxcli/migration/advisory/__init__.py +46 -0
  279. wxcli/migration/advisory/advisor.py +107 -0
  280. wxcli/migration/advisory/advisory_patterns.py +2552 -0
  281. wxcli/migration/advisory/recommendation_rules.py +835 -0
  282. wxcli/migration/cucm/CLAUDE.md +74 -0
  283. wxcli/migration/cucm/__init__.py +5 -0
  284. wxcli/migration/cucm/connection.py +265 -0
  285. wxcli/migration/cucm/discovery.py +225 -0
  286. wxcli/migration/cucm/extractors/__init__.py +1 -0
  287. wxcli/migration/cucm/extractors/announcements.py +92 -0
  288. wxcli/migration/cucm/extractors/base.py +90 -0
  289. wxcli/migration/cucm/extractors/device_profiles.py +98 -0
  290. wxcli/migration/cucm/extractors/devices.py +193 -0
  291. wxcli/migration/cucm/extractors/e911.py +103 -0
  292. wxcli/migration/cucm/extractors/features.py +309 -0
  293. wxcli/migration/cucm/extractors/helpers.py +73 -0
  294. wxcli/migration/cucm/extractors/informational.py +295 -0
  295. wxcli/migration/cucm/extractors/locations.py +221 -0
  296. wxcli/migration/cucm/extractors/moh.py +100 -0
  297. wxcli/migration/cucm/extractors/remote_destinations.py +96 -0
  298. wxcli/migration/cucm/extractors/routing.py +493 -0
  299. wxcli/migration/cucm/extractors/shared_lines.py +146 -0
  300. wxcli/migration/cucm/extractors/templates.py +229 -0
  301. wxcli/migration/cucm/extractors/tier4.py +173 -0
  302. wxcli/migration/cucm/extractors/users.py +240 -0
  303. wxcli/migration/cucm/extractors/voicemail.py +243 -0
  304. wxcli/migration/cucm/extractors/workspaces.py +88 -0
  305. wxcli/migration/cucm/unity_connection.py +304 -0
  306. wxcli/migration/execute/CLAUDE.md +372 -0
  307. wxcli/migration/execute/__init__.py +303 -0
  308. wxcli/migration/execute/batch.py +277 -0
  309. wxcli/migration/execute/dependency.py +483 -0
  310. wxcli/migration/execute/engine.py +964 -0
  311. wxcli/migration/execute/handlers.py +2232 -0
  312. wxcli/migration/execute/planner.py +1939 -0
  313. wxcli/migration/execute/runtime.py +571 -0
  314. wxcli/migration/export/CLAUDE.md +49 -0
  315. wxcli/migration/export/__init__.py +8 -0
  316. wxcli/migration/export/csv_export.py +126 -0
  317. wxcli/migration/export/deployment_plan.py +479 -0
  318. wxcli/migration/export/json_export.py +60 -0
  319. wxcli/migration/models.py +941 -0
  320. wxcli/migration/phone_models.py +50 -0
  321. wxcli/migration/preflight/CLAUDE.md +52 -0
  322. wxcli/migration/preflight/__init__.py +89 -0
  323. wxcli/migration/preflight/checks.py +911 -0
  324. wxcli/migration/preflight/runner.py +293 -0
  325. wxcli/migration/rate_limiter.py +144 -0
  326. wxcli/migration/report/CLAUDE.md +245 -0
  327. wxcli/migration/report/__init__.py +7 -0
  328. wxcli/migration/report/appendix.py +2437 -0
  329. wxcli/migration/report/assembler.py +183 -0
  330. wxcli/migration/report/charts.py +263 -0
  331. wxcli/migration/report/executive.py +776 -0
  332. wxcli/migration/report/explainer.py +704 -0
  333. wxcli/migration/report/helpers.py +74 -0
  334. wxcli/migration/report/ingest.py +152 -0
  335. wxcli/migration/report/notice_templates.py +192 -0
  336. wxcli/migration/report/score.py +375 -0
  337. wxcli/migration/report/styles.py +1052 -0
  338. wxcli/migration/report/user_diff.py +1052 -0
  339. wxcli/migration/report/user_notice.py +425 -0
  340. wxcli/migration/state.py +139 -0
  341. wxcli/migration/store.py +860 -0
  342. wxcli/migration/transform/CLAUDE.md +107 -0
  343. wxcli/migration/transform/__init__.py +12 -0
  344. wxcli/migration/transform/analysis_pipeline.py +453 -0
  345. wxcli/migration/transform/analyzers/__init__.py +142 -0
  346. wxcli/migration/transform/analyzers/css_permission.py +189 -0
  347. wxcli/migration/transform/analyzers/css_routing.py +335 -0
  348. wxcli/migration/transform/analyzers/device_compatibility.py +122 -0
  349. wxcli/migration/transform/analyzers/dn_ambiguity.py +131 -0
  350. wxcli/migration/transform/analyzers/duplicate_user.py +221 -0
  351. wxcli/migration/transform/analyzers/extension_conflict.py +173 -0
  352. wxcli/migration/transform/analyzers/feature_approximation.py +227 -0
  353. wxcli/migration/transform/analyzers/layout_overflow.py +174 -0
  354. wxcli/migration/transform/analyzers/location_ambiguity.py +184 -0
  355. wxcli/migration/transform/analyzers/missing_data.py +300 -0
  356. wxcli/migration/transform/analyzers/selective_call_handling.py +394 -0
  357. wxcli/migration/transform/analyzers/shared_line.py +170 -0
  358. wxcli/migration/transform/analyzers/voicemail_compatibility.py +267 -0
  359. wxcli/migration/transform/analyzers/workspace_license.py +212 -0
  360. wxcli/migration/transform/cross_reference.py +1136 -0
  361. wxcli/migration/transform/cucm_pattern.py +246 -0
  362. wxcli/migration/transform/decisions.py +301 -0
  363. wxcli/migration/transform/e164.py +145 -0
  364. wxcli/migration/transform/engine.py +256 -0
  365. wxcli/migration/transform/mappers/CLAUDE.md +123 -0
  366. wxcli/migration/transform/mappers/__init__.py +76 -0
  367. wxcli/migration/transform/mappers/announcement_mapper.py +122 -0
  368. wxcli/migration/transform/mappers/base.py +190 -0
  369. wxcli/migration/transform/mappers/button_template_mapper.py +186 -0
  370. wxcli/migration/transform/mappers/call_forwarding_mapper.py +228 -0
  371. wxcli/migration/transform/mappers/call_settings_mapper.py +144 -0
  372. wxcli/migration/transform/mappers/css_mapper.py +868 -0
  373. wxcli/migration/transform/mappers/dect_mapper.py +367 -0
  374. wxcli/migration/transform/mappers/device_layout_mapper.py +289 -0
  375. wxcli/migration/transform/mappers/device_mapper.py +227 -0
  376. wxcli/migration/transform/mappers/device_profile_mapper.py +190 -0
  377. wxcli/migration/transform/mappers/device_settings_mapper.py +464 -0
  378. wxcli/migration/transform/mappers/e911_mapper.py +129 -0
  379. wxcli/migration/transform/mappers/ecbn_mapper.py +263 -0
  380. wxcli/migration/transform/mappers/executive_assistant_mapper.py +156 -0
  381. wxcli/migration/transform/mappers/feature_mapper.py +1179 -0
  382. wxcli/migration/transform/mappers/line_mapper.py +310 -0
  383. wxcli/migration/transform/mappers/location_mapper.py +235 -0
  384. wxcli/migration/transform/mappers/moh_mapper.py +114 -0
  385. wxcli/migration/transform/mappers/monitoring_mapper.py +221 -0
  386. wxcli/migration/transform/mappers/receptionist_mapper.py +245 -0
  387. wxcli/migration/transform/mappers/routing_mapper.py +821 -0
  388. wxcli/migration/transform/mappers/snr_mapper.py +201 -0
  389. wxcli/migration/transform/mappers/softkey_mapper.py +205 -0
  390. wxcli/migration/transform/mappers/user_mapper.py +264 -0
  391. wxcli/migration/transform/mappers/voicemail_group_mapper.py +286 -0
  392. wxcli/migration/transform/mappers/voicemail_mapper.py +514 -0
  393. wxcli/migration/transform/mappers/workspace_mapper.py +464 -0
  394. wxcli/migration/transform/normalizers.py +2008 -0
  395. wxcli/migration/transform/pattern_converter.py +106 -0
  396. wxcli/migration/transform/pipeline.py +271 -0
  397. wxcli/migration/transform/rules.py +255 -0
  398. wxcli/org_health/CLAUDE.md +63 -0
  399. wxcli/org_health/__init__.py +7 -0
  400. wxcli/org_health/analyze.py +93 -0
  401. wxcli/org_health/checks.py +458 -0
  402. wxcli/org_health/collector.py +62 -0
  403. wxcli/org_health/models.py +78 -0
  404. wxcli/org_health/report.py +300 -0
  405. wxcli/output.py +101 -0
  406. wxcli-1.2.0.dist-info/METADATA +505 -0
  407. wxcli-1.2.0.dist-info/RECORD +413 -0
  408. wxcli-1.2.0.dist-info/WHEEL +5 -0
  409. wxcli-1.2.0.dist-info/entry_points.txt +2 -0
  410. wxcli-1.2.0.dist-info/licenses/LICENSE +191 -0
  411. wxcli-1.2.0.dist-info/scm_file_list.json +751 -0
  412. wxcli-1.2.0.dist-info/scm_version.json +8 -0
  413. wxcli-1.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,850 @@
1
+ # Meetings: Settings, Preferences, and Administration
2
+
3
+ Reference for Webex Meetings settings and preferences management. Covers the 34 commands across 8 CLI groups that an IT admin or meeting host uses to manage meeting preferences, session types, tracking codes, site settings, polls, Q&A, reports, and Slido compliance events. Sourced from the Webex Meetings API (OpenAPI spec: `specs/webex-meetings.json`).
4
+
5
+ ## Sources
6
+
7
+ - OpenAPI spec: `specs/webex-meetings.json`
8
+ - [developer.webex.com Meeting Preferences API](https://developer.webex.com/docs/api/v1/meeting-preferences)
9
+ - [developer.webex.com Tracking Codes API](https://developer.webex.com/docs/api/v1/tracking-codes)
10
+
11
+ ---
12
+
13
+ ## Token Type Matrix
14
+
15
+ | Operation | User Token | Admin Token | Notes |
16
+ |-----------|-----------|-------------|-------|
17
+ | Meeting preferences (get/update) | Yes (own) | Yes (any user via `userEmail`) | Default: operates on authenticated user |
18
+ | Sites list/update default | Yes (own) | Yes (any user via `userEmail`) | |
19
+ | PMR options (get/update) | Yes (own) | Yes (any user via `userEmail`) | |
20
+ | Batch refresh PMR IDs | No | Yes | Admin-only endpoint under `/admin/` |
21
+ | Session types (site) | No | Yes | Admin-only |
22
+ | Session types (user) | No | Yes | Admin-only |
23
+ | Tracking codes (site CRUD) | No | Yes | Admin-only |
24
+ | Tracking codes (user get/update) | No | Yes | Admin-only |
25
+ | Site common settings | No | Yes | Admin-only |
26
+ | Meeting polls/results | Yes (host or attendee) | Yes (with admin scopes) | Read-only |
27
+ | Meeting Q&A | Yes (host or attendee) | Yes (with admin scopes) | Read-only |
28
+ | Meeting reports | No | Yes | Requires siteUrl |
29
+ | Slido compliance events | No | Yes | Requires Slido Secure Premium license |
30
+
31
+ ---
32
+
33
+ ## Table of Contents
34
+
35
+ 1. [Meeting Preferences](#1-meeting-preferences)
36
+ 2. [Session Types](#2-session-types)
37
+ 3. [Tracking Codes](#3-tracking-codes)
38
+ 4. [Site Settings](#4-site-settings)
39
+ 5. [Meeting Polls](#5-meeting-polls)
40
+ 6. [Meeting Q&A](#6-meeting-qa)
41
+ 7. [Meeting Reports](#7-meeting-reports)
42
+ 8. [Slido Compliance](#8-slido-compliance)
43
+ 9. [Raw HTTP Endpoints](#9-raw-http-endpoints)
44
+ 10. [Gotchas](#10-gotchas)
45
+ 11. [See Also](#11-see-also)
46
+
47
+ ---
48
+
49
+ ## 1. Meeting Preferences
50
+
51
+ **CLI group:** `meeting-preferences`
52
+ **API base:** `https://webexapis.com/v1/meetingPreferences`
53
+
54
+ Meeting preferences control audio/video settings, scheduling options, delegate access, site selection, and Personal Meeting Room (PMR) configuration for individual users. All preference endpoints operate on the authenticated user by default; admins can target another user via `--user-email`.
55
+
56
+ ### Commands
57
+
58
+ | Command | CLI | HTTP Method | What It Does |
59
+ |---------|-----|------------|-------------|
60
+ | Get all preferences | `wxcli meeting-preferences list-meeting-preferences` | GET /meetingPreferences | Get complete meeting preference details |
61
+ | Get audio options | `wxcli meeting-preferences show` | GET /meetingPreferences/audio | Get audio preferences (call-in, VoIP, toll-free) |
62
+ | Update audio options | `wxcli meeting-preferences update` | PUT /meetingPreferences/audio | Update audio preferences |
63
+ | Get video options | `wxcli meeting-preferences list` | GET /meetingPreferences/video | Get video device preferences |
64
+ | Update video options | `wxcli meeting-preferences update-video` | PUT /meetingPreferences/video | Update video device preferences |
65
+ | Get scheduling options | `wxcli meeting-preferences list-scheduling-options` | GET /meetingPreferences/schedulingOptions | Get scheduling preferences (delegates, join-before-host) |
66
+ | Update scheduling options | `wxcli meeting-preferences update-scheduling-options` | PUT /meetingPreferences/schedulingOptions | Update scheduling preferences |
67
+ | Insert delegate emails | `wxcli meeting-preferences create-insert` | POST /meetingPreferences/schedulingOptions/delegateEmails/insert | Add delegate emails for scheduling |
68
+ | Delete delegate emails | `wxcli meeting-preferences create` | POST /meetingPreferences/schedulingOptions/delegateEmails/delete | Remove delegate emails |
69
+ | Get site list | `wxcli meeting-preferences list-sites` | GET /meetingPreferences/sites | List available Webex sites and default site |
70
+ | Update default site | `wxcli meeting-preferences update-sites` | PUT /meetingPreferences/sites | Change the user's default Webex site |
71
+ | Get PMR options | `wxcli meeting-preferences list-personal-meeting-room` | GET /meetingPreferences/personalMeetingRoom | Get Personal Meeting Room settings |
72
+ | Update PMR options | `wxcli meeting-preferences update-personal-meeting-room` | PUT /meetingPreferences/personalMeetingRoom | Update PMR settings (co-hosts, auto-lock, PIN) |
73
+ | Batch refresh PMR IDs | `wxcli meeting-preferences create-refresh-id` | POST /admin/meetingPreferences/personalMeetingRoom/refreshId | Batch refresh PMR IDs for multiple users (admin) |
74
+
75
+ ### Key Parameters
76
+
77
+ #### Common Parameters (all preference endpoints)
78
+
79
+ | Option | Description |
80
+ |--------|-------------|
81
+ | `--user-email EMAIL` | Email of the target user. Admin-only -- acts on behalf of the specified user |
82
+ | `--site-url URL` | URL of the Webex site to query. Defaults to the user's default site |
83
+
84
+ #### `meeting-preferences update` (Audio Options)
85
+
86
+ | Option | Description |
87
+ |--------|-------------|
88
+ | `--default-audio-type TEXT` | Default audio type: `voipOnly`, `phoneOnly`, `otherTeleconferenceService`, `none` |
89
+ | `--enabled-toll-free / --no-enabled-toll-free` | Enable/disable toll-free call-in numbers |
90
+ | `--enabled-global-call-in / --no-enabled-global-call-in` | Enable/disable global call-in numbers |
91
+ | `--enabled-auto-connection / --no-enabled-auto-connection` | Auto-connect to audio on join |
92
+ | `--audio-pin TEXT` | Audio PIN for call-in authentication |
93
+ | `--json-body JSON` | Full JSON body for nested fields (`officeNumber`, `mobileNumber`) |
94
+
95
+ #### `meeting-preferences update-video` (Video Options)
96
+
97
+ | Option | Description |
98
+ |--------|-------------|
99
+ | `--json-body JSON` | Required for video device array: `{"videoDevices": [{"deviceName": "...", "deviceAddress": "...", "isDefault": true}]}` |
100
+
101
+ #### `meeting-preferences update-scheduling-options` (Scheduling Options)
102
+
103
+ | Option | Description |
104
+ |--------|-------------|
105
+ | `--enabled-join-before-host / --no-enabled-join-before-host` | Allow attendees to join before host |
106
+ | `--join-before-host-minutes N` | Minutes before start that attendees can join (5, 10, 15) |
107
+ | `--enabled-auto-share-recording / --no-enabled-auto-share-recording` | Auto-share recording after meeting |
108
+ | `--enabled-webex-assistant-by-default / --no-enabled-webex-assistant-by-default` | Enable Webex Assistant by default |
109
+ | `--json-body JSON` | Full JSON body (includes `delegateEmails` array) |
110
+
111
+ #### `meeting-preferences create-insert` (Insert Delegate Emails)
112
+
113
+ | Option | Description |
114
+ |--------|-------------|
115
+ | `--json-body JSON` | Required: `{"emails": ["delegate1@example.com", "delegate2@example.com"]}` |
116
+
117
+ #### `meeting-preferences create` (Delete Delegate Emails)
118
+
119
+ | Option | Description |
120
+ |--------|-------------|
121
+ | `--json-body JSON` | Required: `{"emails": ["delegate1@example.com"]}` |
122
+
123
+ #### `meeting-preferences update-sites` (Update Default Site)
124
+
125
+ | Option | Description |
126
+ |--------|-------------|
127
+ | `--site-url URL` | URL of the site to set as default |
128
+ | `--default-site / --no-default-site` | Whether to set this as the default site (must be `true`) |
129
+
130
+ #### `meeting-preferences update-personal-meeting-room` (PMR Options)
131
+
132
+ | Option | Description |
133
+ |--------|-------------|
134
+ | `--topic TEXT` | PMR meeting topic/title |
135
+ | `--host-pin TEXT` | Host PIN |
136
+ | `--enabled-auto-lock / --no-enabled-auto-lock` | Auto-lock after host joins |
137
+ | `--auto-lock-minutes N` | Minutes after host joins to auto-lock (0, 5, 10, 15, 20) |
138
+ | `--enabled-notify-host / --no-enabled-notify-host` | Notify host when someone waits in lobby |
139
+ | `--support-co-host / --no-support-co-host` | Enable co-host capability |
140
+ | `--support-anyone-as-co-host / --no-support-anyone-as-co-host` | Allow any attendee to become co-host |
141
+ | `--allow-first-user-to-be-co-host / --no-allow-first-user-to-be-co-host` | First user to join becomes co-host |
142
+ | `--allow-authenticated-devices / --no-allow-authenticated-devices` | Allow authenticated video devices |
143
+ | `--json-body JSON` | Full JSON body (required for `coHosts` array) |
144
+
145
+ #### `meeting-preferences create-refresh-id` (Batch Refresh PMR IDs)
146
+
147
+ | Option | Description |
148
+ |--------|-------------|
149
+ | `--json-body JSON` | Required: `{"siteUrl": "site.webex.com", "personalMeetingRoomIds": [{"email": "user@example.com", "personalMeetingRoomId": "newId", "systemGenerated": true}]}` |
150
+
151
+ ### Raw HTTP
152
+
153
+ ```python
154
+ import requests
155
+
156
+ BASE = "https://webexapis.com/v1"
157
+ headers = {"Authorization": "Bearer TOKEN", "Content-Type": "application/json"}
158
+
159
+ # Get all meeting preferences
160
+ resp = requests.get(f"{BASE}/meetingPreferences",
161
+ headers=headers, params={"userEmail": "user@example.com"})
162
+ prefs = resp.json()
163
+ # Returns: {personalMeetingRoom, audio, video, schedulingOptions, sites, ...}
164
+
165
+ # Get audio options
166
+ resp = requests.get(f"{BASE}/meetingPreferences/audio", headers=headers)
167
+ audio = resp.json()
168
+ # Returns: {defaultAudioType, enabledTollFree, enabledGlobalCallIn, officeNumber, mobileNumber, ...}
169
+
170
+ # Update audio options
171
+ body = {
172
+ "defaultAudioType": "voipOnly",
173
+ "enabledTollFree": True,
174
+ "enabledGlobalCallIn": True,
175
+ "enabledAutoConnection": False
176
+ }
177
+ resp = requests.put(f"{BASE}/meetingPreferences/audio", headers=headers, json=body)
178
+
179
+ # Get video options
180
+ resp = requests.get(f"{BASE}/meetingPreferences/video", headers=headers)
181
+ # Returns: {videoDevices: [{deviceName, deviceAddress, isDefault}]}
182
+
183
+ # Get scheduling options
184
+ resp = requests.get(f"{BASE}/meetingPreferences/schedulingOptions", headers=headers)
185
+ # Returns: {enabledJoinBeforeHost, joinBeforeHostMinutes, enabledAutoShareRecording, delegateEmails, ...}
186
+
187
+ # Insert delegate emails
188
+ body = {"emails": ["delegate1@example.com", "delegate2@example.com"]}
189
+ resp = requests.post(f"{BASE}/meetingPreferences/schedulingOptions/delegateEmails/insert",
190
+ headers=headers, json=body)
191
+
192
+ # Delete delegate emails
193
+ body = {"emails": ["delegate1@example.com"]}
194
+ resp = requests.post(f"{BASE}/meetingPreferences/schedulingOptions/delegateEmails/delete",
195
+ headers=headers, json=body)
196
+ # Returns: 204 No Content
197
+
198
+ # Get site list
199
+ resp = requests.get(f"{BASE}/meetingPreferences/sites", headers=headers)
200
+ # Returns: {sites: [{siteUrl, default}]}
201
+
202
+ # Update default site
203
+ body = {"siteUrl": "mysite.webex.com"}
204
+ resp = requests.put(f"{BASE}/meetingPreferences/sites",
205
+ headers=headers, json=body, params={"defaultSite": "true"})
206
+
207
+ # Get PMR options
208
+ resp = requests.get(f"{BASE}/meetingPreferences/personalMeetingRoom", headers=headers)
209
+ # Returns: {topic, hostPin, personalMeetingRoomLink, sipAddress, telephony, coHosts, ...}
210
+
211
+ # Update PMR options
212
+ body = {
213
+ "topic": "Weekly Standup",
214
+ "hostPin": "123456",
215
+ "enabledAutoLock": True,
216
+ "autoLockMinutes": 5,
217
+ "supportCoHost": True
218
+ }
219
+ resp = requests.put(f"{BASE}/meetingPreferences/personalMeetingRoom", headers=headers, json=body)
220
+
221
+ # Batch refresh PMR IDs (admin only)
222
+ body = {
223
+ "siteUrl": "mysite.webex.com",
224
+ "personalMeetingRoomIds": [
225
+ {"email": "user1@example.com", "personalMeetingRoomId": "newpmr1", "systemGenerated": False},
226
+ {"email": "user2@example.com", "systemGenerated": True}
227
+ ]
228
+ }
229
+ resp = requests.post(f"{BASE}/admin/meetingPreferences/personalMeetingRoom/refreshId",
230
+ headers=headers, json=body)
231
+ ```
232
+
233
+ ---
234
+
235
+ ## 2. Session Types
236
+
237
+ **CLI group:** `meeting-session-types`
238
+ **API base:** `https://webexapis.com/v1/admin/meeting/config/sessionTypes` (site) and `.../userconfig/sessionTypes` (user)
239
+
240
+ Session types define meeting capabilities (MeetingCenter, EventCenter, TrainingCenter, SupportCenter, webinar, etc.) available at the site level and assigned to individual users. All session type endpoints are admin-only.
241
+
242
+ ### Commands
243
+
244
+ | Command | CLI | HTTP Method | What It Does |
245
+ |---------|-----|------------|-------------|
246
+ | List site session types | `wxcli meeting-session-types list` | GET /admin/meeting/config/sessionTypes | List session types available for a site |
247
+ | List user session types | `wxcli meeting-session-types list-session-types` | GET /admin/meeting/userconfig/sessionTypes | List session types assigned to a user |
248
+ | Update user session types | `wxcli meeting-session-types update` | PUT /admin/meeting/userconfig/sessionTypes | Assign session types to a user |
249
+
250
+ ### Key Parameters
251
+
252
+ #### `meeting-session-types list` (Site Session Types)
253
+
254
+ | Option | Description |
255
+ |--------|-------------|
256
+ | `--site-url URL` | URL of the Webex site. Defaults to admin's default site |
257
+
258
+ #### `meeting-session-types list-session-types` (User Session Types)
259
+
260
+ | Option | Description |
261
+ |--------|-------------|
262
+ | `--site-url URL` | URL of the Webex site |
263
+ | `--person-id ID` | Unique identifier for the user |
264
+ | `--email EMAIL` | Email of the user (passed as header) |
265
+
266
+ #### `meeting-session-types update` (Update User Session Types)
267
+
268
+ | Option | Description |
269
+ |--------|-------------|
270
+ | `--json-body JSON` | Required: `{"personId": "...", "email": "user@example.com", "siteUrl": "site.webex.com", "sessionTypeIds": ["1", "3", "120"]}` |
271
+
272
+ ### Raw HTTP
273
+
274
+ ```python
275
+ BASE = "https://webexapis.com/v1"
276
+
277
+ # List site session types
278
+ resp = requests.get(f"{BASE}/admin/meeting/config/sessionTypes",
279
+ headers=headers, params={"siteUrl": "mysite.webex.com"})
280
+ session_types = resp.json().get("items", [])
281
+ # Each item: {id, name, shortName, type, siteUrl}
282
+ # type values: "meeting", "privateMeeting", "TrainCenter", "EventCenter", "SupportCenter", "webinar"
283
+
284
+ # List user session types
285
+ resp = requests.get(f"{BASE}/admin/meeting/userconfig/sessionTypes",
286
+ headers=headers,
287
+ params={"siteUrl": "mysite.webex.com", "personId": "PERSON_ID"})
288
+ user_types = resp.json().get("items", [])
289
+ # Each item: {personId, email, siteUrl, sessionTypes: [{id, name, shortName, type}]}
290
+
291
+ # Update user session types
292
+ body = {
293
+ "personId": "PERSON_ID",
294
+ "email": "user@example.com",
295
+ "siteUrl": "mysite.webex.com",
296
+ "sessionTypeIds": ["1", "3", "120"]
297
+ }
298
+ resp = requests.put(f"{BASE}/admin/meeting/userconfig/sessionTypes",
299
+ headers=headers, json=body)
300
+ ```
301
+
302
+ ---
303
+
304
+ ## 3. Tracking Codes
305
+
306
+ **CLI group:** `meeting-tracking-codes`
307
+ **API base:** `https://webexapis.com/v1/admin/meeting/config/trackingCodes` (site-level) and `.../userconfig/trackingCodes` (user-level)
308
+
309
+ Tracking codes are custom metadata fields (e.g., department, project, cost center) that admins attach to meetings for reporting and compliance. Site-level tracking codes define the schema; user-level tracking codes set default values per user. All endpoints are admin-only.
310
+
311
+ ### Commands
312
+
313
+ | Command | CLI | HTTP Method | What It Does |
314
+ |---------|-----|------------|-------------|
315
+ | List tracking codes | `wxcli meeting-tracking-codes list` | GET /admin/meeting/config/trackingCodes | List site-level tracking code definitions |
316
+ | Create tracking code | `wxcli meeting-tracking-codes create` | POST /admin/meeting/config/trackingCodes | Create a new tracking code definition |
317
+ | Get tracking code | `wxcli meeting-tracking-codes show TRACKING_CODE_ID` | GET /admin/meeting/config/trackingCodes/{trackingCodeId} | Get a specific tracking code |
318
+ | Update tracking code | `wxcli meeting-tracking-codes update-tracking-codes TRACKING_CODE_ID` | PUT /admin/meeting/config/trackingCodes/{trackingCodeId} | Update a tracking code definition |
319
+ | Delete tracking code | `wxcli meeting-tracking-codes delete TRACKING_CODE_ID` | DELETE /admin/meeting/config/trackingCodes/{trackingCodeId} | Delete a tracking code |
320
+ | Get user tracking codes | `wxcli meeting-tracking-codes list-tracking-codes` | GET /admin/meeting/userconfig/trackingCodes | Get tracking code values for a user |
321
+ | Update user tracking codes | `wxcli meeting-tracking-codes update` | PUT /admin/meeting/userconfig/trackingCodes | Set tracking code values for a user |
322
+
323
+ ### Key Parameters
324
+
325
+ #### `meeting-tracking-codes list` (Site Tracking Codes)
326
+
327
+ | Option | Description |
328
+ |--------|-------------|
329
+ | `--site-url URL` | URL of the Webex site. Defaults to admin's preferred site |
330
+
331
+ #### `meeting-tracking-codes create` (Create Tracking Code)
332
+
333
+ | Option | Description |
334
+ |--------|-------------|
335
+ | `--json-body JSON` | Required. See example below |
336
+
337
+ Create body example:
338
+ ```json
339
+ {
340
+ "name": "Department",
341
+ "siteUrl": "mysite.webex.com",
342
+ "inputMode": "select",
343
+ "hostProfileCode": "optional",
344
+ "scheduleStartCodes": [
345
+ {"service": "MeetingCenter", "type": "required"},
346
+ {"service": "EventCenter", "type": "optional"}
347
+ ],
348
+ "options": [
349
+ {"value": "Engineering", "defaultValue": false},
350
+ {"value": "Sales", "defaultValue": true}
351
+ ]
352
+ }
353
+ ```
354
+
355
+ **`inputMode` values:** `text`, `select`, `editableSelect`, `hostProfileSelect`
356
+ **`hostProfileCode` values:** `optional`, `required`, `notUsed`, `adminSet`
357
+ **`scheduleStartCodes` type values:** `optional`, `required`, `notUsed`, `notApplicable`, `adminSet`
358
+
359
+ #### `meeting-tracking-codes show` / `meeting-tracking-codes delete`
360
+
361
+ | Option | Description |
362
+ |--------|-------------|
363
+ | `TRACKING_CODE_ID` | Positional argument -- the tracking code ID |
364
+ | `--site-url URL` | URL of the Webex site |
365
+
366
+ #### `meeting-tracking-codes list-tracking-codes` (User Tracking Codes)
367
+
368
+ | Option | Description |
369
+ |--------|-------------|
370
+ | `--site-url URL` | URL of the Webex site |
371
+ | `--person-id ID` | User's person ID (at least one of personId or email required) |
372
+ | `--email EMAIL` | User's email (passed as header) |
373
+
374
+ #### `meeting-tracking-codes update` (Update User Tracking Codes)
375
+
376
+ | Option | Description |
377
+ |--------|-------------|
378
+ | `--json-body JSON` | Required: `{"personId": "...", "email": "user@example.com", "siteUrl": "site.webex.com", "trackingCodes": [{"name": "Department", "value": "Engineering"}]}` |
379
+
380
+ ### Raw HTTP
381
+
382
+ ```python
383
+ BASE = "https://webexapis.com/v1"
384
+
385
+ # List site tracking codes
386
+ resp = requests.get(f"{BASE}/admin/meeting/config/trackingCodes",
387
+ headers=headers, params={"siteUrl": "mysite.webex.com"})
388
+ codes = resp.json().get("items", [])
389
+ # Each item: {id, name, siteUrl, inputMode, hostProfileCode, scheduleStartCodes, options}
390
+
391
+ # Create tracking code
392
+ body = {
393
+ "name": "CostCenter",
394
+ "siteUrl": "mysite.webex.com",
395
+ "inputMode": "select",
396
+ "hostProfileCode": "optional",
397
+ "scheduleStartCodes": [{"service": "MeetingCenter", "type": "required"}],
398
+ "options": [{"value": "CC100", "defaultValue": True}, {"value": "CC200", "defaultValue": False}]
399
+ }
400
+ resp = requests.post(f"{BASE}/admin/meeting/config/trackingCodes", headers=headers, json=body)
401
+
402
+ # Get a specific tracking code
403
+ resp = requests.get(f"{BASE}/admin/meeting/config/trackingCodes/{tracking_code_id}",
404
+ headers=headers, params={"siteUrl": "mysite.webex.com"})
405
+
406
+ # Delete a tracking code
407
+ resp = requests.delete(f"{BASE}/admin/meeting/config/trackingCodes/{tracking_code_id}",
408
+ headers=headers)
409
+
410
+ # Get user tracking codes
411
+ resp = requests.get(f"{BASE}/admin/meeting/userconfig/trackingCodes",
412
+ headers=headers,
413
+ params={"siteUrl": "mysite.webex.com", "personId": "PERSON_ID"})
414
+ # Returns: {personId, email, siteUrl, trackingCodes: [{name, id, value}]}
415
+
416
+ # Update user tracking codes
417
+ body = {
418
+ "personId": "PERSON_ID",
419
+ "email": "user@example.com",
420
+ "siteUrl": "mysite.webex.com",
421
+ "trackingCodes": [
422
+ {"name": "Department", "value": "Engineering"},
423
+ {"name": "CostCenter", "value": "CC100"}
424
+ ]
425
+ }
426
+ resp = requests.put(f"{BASE}/admin/meeting/userconfig/trackingCodes",
427
+ headers=headers, json=body)
428
+ ```
429
+
430
+ ---
431
+
432
+ ## 4. Site Settings
433
+
434
+ **CLI group:** `meeting-site`
435
+ **API base:** `https://webexapis.com/v1/admin/meeting/config/commonSettings`
436
+
437
+ Site-level common settings control security policies, scheduler defaults, telephony configuration, and meeting scheduling options for an entire Webex site. Admin-only. The update endpoint uses PATCH (partial update semantics) rather than PUT.
438
+
439
+ ### Commands
440
+
441
+ | Command | CLI | HTTP Method | What It Does |
442
+ |---------|-----|------------|-------------|
443
+ | Get site settings | `wxcli meeting-site show` | GET /admin/meeting/config/commonSettings | Get meeting common settings for a site |
444
+ | Update site settings | `wxcli meeting-site update` | PATCH /admin/meeting/config/commonSettings | Partially update meeting common settings |
445
+
446
+ ### Key Parameters
447
+
448
+ #### `meeting-site show`
449
+
450
+ | Option | Description |
451
+ |--------|-------------|
452
+ | `--site-url URL` | URL of the Webex site. Required |
453
+
454
+ #### `meeting-site update`
455
+
456
+ | Option | Description |
457
+ |--------|-------------|
458
+ | `--json-body JSON` | Required for nested settings structure. See example below |
459
+
460
+ Update body example (all fields optional -- PATCH semantics):
461
+ ```json
462
+ {
463
+ "siteOptions": {
464
+ "allowCustomPersonalRoomURL": true
465
+ },
466
+ "defaultSchedulerOptions": {
467
+ "VoIP": true,
468
+ "telephonySupport": "CallInAndCallBack",
469
+ "joinTeleconfNotPress1": false,
470
+ "entryAndExitTone": "Beep",
471
+ "tollFree": true
472
+ },
473
+ "securityOptions": {
474
+ "joinBeforeHost": true,
475
+ "audioBeforeHost": false,
476
+ "firstAttendeeAsPresenter": false,
477
+ "unlistAllMeetings": false,
478
+ "requireLoginBeforeAccess": true,
479
+ "allowMobileScreenCapture": true,
480
+ "requireStrongPassword": true,
481
+ "passwordCriteria": {
482
+ "minLength": 8,
483
+ "minNumeric": 1,
484
+ "minAlpha": 1,
485
+ "minSpecial": 1,
486
+ "mixedCase": true
487
+ }
488
+ },
489
+ "scheduleMeetingOptions": {
490
+ "emailReminders": true
491
+ }
492
+ }
493
+ ```
494
+
495
+ **`telephonySupport` values:** `None`, `CallInOnly`, `CallInAndCallBack`
496
+ **`entryAndExitTone` values:** `Beep`, `AnnounceNameOnly`, `AnnounceNameAndTone`, `NoTone`
497
+
498
+ The GET response includes an additional read-only `telephonyConfig` object with: `allowCallIn`, `allowCallBack`, `allowOtherTeleconf`, `allowTollFreeCallin`, `allowInternationalCallin`, `allowInternationalCallback`, `VoIP`.
499
+
500
+ ### Raw HTTP
501
+
502
+ ```python
503
+ BASE = "https://webexapis.com/v1"
504
+
505
+ # Get site common settings
506
+ resp = requests.get(f"{BASE}/admin/meeting/config/commonSettings",
507
+ headers=headers, params={"siteUrl": "mysite.webex.com"})
508
+ settings = resp.json()
509
+ # Returns: {siteOptions, defaultSchedulerOptions, telephonyConfig, securityOptions, scheduleMeetingOptions}
510
+
511
+ # Update site settings (PATCH -- partial update)
512
+ body = {
513
+ "securityOptions": {
514
+ "requireStrongPassword": True,
515
+ "passwordCriteria": {"minLength": 10, "minSpecial": 1}
516
+ }
517
+ }
518
+ resp = requests.patch(f"{BASE}/admin/meeting/config/commonSettings",
519
+ headers=headers, json=body,
520
+ params={"siteUrl": "mysite.webex.com"})
521
+ ```
522
+
523
+ ---
524
+
525
+ ## 5. Meeting Polls
526
+
527
+ **CLI group:** `meeting-polls`
528
+ **API base:** `https://webexapis.com/v1/meetings/polls` and `.../pollResults`
529
+
530
+ Read-only access to poll data from completed meeting instances. Retrieve poll questions, answer summaries, and individual respondent answers. Polls cannot be created or modified via API -- they are created during live meetings in the Webex client.
531
+
532
+ ### Commands
533
+
534
+ | Command | CLI | HTTP Method | What It Does |
535
+ |---------|-----|------------|-------------|
536
+ | List polls | `wxcli meeting-polls list-polls` | GET /meetings/polls | List polls from a meeting instance |
537
+ | Get poll results | `wxcli meeting-polls list` | GET /meetings/pollResults | Get poll results with answer summaries |
538
+ | List respondents | `wxcli meeting-polls list-respondents POLL_ID QUESTION_ID` | GET /meetings/polls/{pollId}/questions/{questionId}/respondents | List individual respondent answers |
539
+
540
+ ### Key Parameters
541
+
542
+ #### `meeting-polls list-polls` (List Polls)
543
+
544
+ | Option | Description |
545
+ |--------|-------------|
546
+ | `--meeting-id ID` | Required. Meeting instance ID (ended meetings only) |
547
+
548
+ #### `meeting-polls list` (Poll Results)
549
+
550
+ | Option | Description |
551
+ |--------|-------------|
552
+ | `--meeting-id ID` | Required. Meeting instance ID |
553
+ | `--max N` | Maximum number of respondents per poll (up to 100) |
554
+
555
+ #### `meeting-polls list-respondents` (Respondents)
556
+
557
+ | Option | Description |
558
+ |--------|-------------|
559
+ | `POLL_ID` | Positional argument -- the poll ID |
560
+ | `QUESTION_ID` | Positional argument -- the question ID |
561
+ | `--meeting-id ID` | Required. Meeting instance ID |
562
+ | `--max N` | Maximum number of respondents (up to 100) |
563
+
564
+ ### Raw HTTP
565
+
566
+ ```python
567
+ BASE = "https://webexapis.com/v1"
568
+
569
+ # List polls from a meeting
570
+ resp = requests.get(f"{BASE}/meetings/polls",
571
+ headers=headers, params={"meetingId": "MEETING_INSTANCE_ID"})
572
+ polls = resp.json().get("items", [])
573
+ # Each poll: {id, meetingId, email, displayName, personId, startTime, endTime, timerDuration,
574
+ # questions: [{id, order, title, type, options: [{order, value, isCorrect}]}]}
575
+ # Question types: "short", "long", "singleAnswer", "multipleAnswer"
576
+
577
+ # Get poll results (includes answer summaries and respondent data)
578
+ resp = requests.get(f"{BASE}/meetings/pollResults",
579
+ headers=headers, params={"meetingId": "MEETING_INSTANCE_ID", "max": 50})
580
+ results = resp.json().get("items", [])
581
+ # Each result: {id, meetingId, totalAttendees, totalRespondents,
582
+ # questions: [{id, title, type, answerSummary: [{value, totalRespondents, isCorrect}],
583
+ # respondents: {items: [{email, displayName, answers}]}}]}
584
+
585
+ # List respondents for a specific question
586
+ resp = requests.get(f"{BASE}/meetings/polls/{poll_id}/questions/{question_id}/respondents",
587
+ headers=headers, params={"meetingId": "MEETING_INSTANCE_ID", "max": 100})
588
+ respondents = resp.json().get("items", [])
589
+ # Each respondent: {email, displayName, answers: ["selected option 1", ...]}
590
+ ```
591
+
592
+ ---
593
+
594
+ ## 6. Meeting Q&A
595
+
596
+ **CLI group:** `meeting-qa`
597
+ **API base:** `https://webexapis.com/v1/meetings/q_and_a`
598
+
599
+ Read-only access to Q&A data from completed meeting instances. Retrieve questions asked during meetings and their answers.
600
+
601
+ ### Commands
602
+
603
+ | Command | CLI | HTTP Method | What It Does |
604
+ |---------|-----|------------|-------------|
605
+ | List Q&A | `wxcli meeting-qa list` | GET /meetings/q_and_a | List questions from a meeting instance |
606
+ | List answers | `wxcli meeting-qa list-answers QUESTION_ID` | GET /meetings/q_and_a/{questionId}/answers | List answers for a specific question |
607
+
608
+ ### Key Parameters
609
+
610
+ #### `meeting-qa list` (List Q&A)
611
+
612
+ | Option | Description |
613
+ |--------|-------------|
614
+ | `--meeting-id ID` | Required. Meeting instance ID (ended meetings only) |
615
+ | `--max N` | Maximum number of answers (up to 100) |
616
+
617
+ #### `meeting-qa list-answers` (List Answers)
618
+
619
+ | Option | Description |
620
+ |--------|-------------|
621
+ | `QUESTION_ID` | Positional argument -- the question ID |
622
+ | `--meeting-id ID` | Required. Meeting instance ID |
623
+ | `--max N` | Maximum number of answers (up to 100) |
624
+
625
+ ### Raw HTTP
626
+
627
+ ```python
628
+ BASE = "https://webexapis.com/v1"
629
+
630
+ # List Q&A from a meeting
631
+ resp = requests.get(f"{BASE}/meetings/q_and_a",
632
+ headers=headers, params={"meetingId": "MEETING_INSTANCE_ID", "max": 50})
633
+ questions = resp.json().get("items", [])
634
+ # Each question: {id, meetingId, question, email, displayName, totalAttendees, totalRespondents,
635
+ # answers: {items: [{email, displayName, personId, answer, answered}]}}
636
+
637
+ # List answers for a specific question
638
+ resp = requests.get(f"{BASE}/meetings/q_and_a/{question_id}/answers",
639
+ headers=headers, params={"meetingId": "MEETING_INSTANCE_ID", "max": 100})
640
+ answers = resp.json().get("items", [])
641
+ # Each answer: {email, displayName, personId, answer: ["answer text"], answered}
642
+ ```
643
+
644
+ ---
645
+
646
+ ## 7. Meeting Reports
647
+
648
+ **CLI group:** `meeting-reports`
649
+ **API base:** `https://webexapis.com/v1/meetingReports`
650
+
651
+ Meeting usage and attendee reports for site administrators. Returns meeting statistics, participant details, and telephony usage data for a specified date range. Admin-only.
652
+
653
+ ### Commands
654
+
655
+ | Command | CLI | HTTP Method | What It Does |
656
+ |---------|-----|------------|-------------|
657
+ | List usage reports | `wxcli meeting-reports list` | GET /meetingReports/usage | List meeting usage reports |
658
+ | List attendee reports | `wxcli meeting-reports list-attendees` | GET /meetingReports/attendees | List meeting attendee detail reports |
659
+
660
+ ### Key Parameters
661
+
662
+ #### `meeting-reports list` (Usage Reports)
663
+
664
+ | Option | Description |
665
+ |--------|-------------|
666
+ | `--site-url URL` | URL of the Webex site (recommended) |
667
+ | `--service-type TEXT` | Filter by service: `MeetingCenter` (default), `EventCenter`, `SupportCenter`, `TrainingCenter` |
668
+ | `--from DATETIME` | Start date/time (ISO 8601). Default: 7 days before `to` |
669
+ | `--to DATETIME` | End date/time (ISO 8601). Default: current time |
670
+ | `--max N` | Page size (1-1000) |
671
+
672
+ #### `meeting-reports list-attendees` (Attendee Reports)
673
+
674
+ | Option | Description |
675
+ |--------|-------------|
676
+ | `--site-url URL` | URL of the Webex site (recommended) |
677
+ | `--meeting-id ID` | Filter to a specific ended meeting instance |
678
+ | `--meeting-number TEXT` | Filter by meeting number |
679
+ | `--meeting-title TEXT` | Filter by meeting title |
680
+ | `--from DATETIME` | Start date/time (ISO 8601). Default: 7 days before `to` |
681
+ | `--to DATETIME` | End date/time (ISO 8601). Default: current time |
682
+ | `--max N` | Page size (1-1000) |
683
+
684
+ **Date range constraints:** The interval between `from` and `to` cannot exceed 30 days. `from` cannot be earlier than 90 days ago.
685
+
686
+ ### Raw HTTP
687
+
688
+ ```python
689
+ BASE = "https://webexapis.com/v1"
690
+
691
+ # List meeting usage reports
692
+ resp = requests.get(f"{BASE}/meetingReports/usage",
693
+ headers=headers,
694
+ params={
695
+ "siteUrl": "mysite.webex.com",
696
+ "serviceType": "MeetingCenter",
697
+ "from": "2026-03-01T00:00:00Z",
698
+ "to": "2026-03-28T00:00:00Z",
699
+ "max": 100
700
+ })
701
+ reports = resp.json().get("items", [])
702
+ # Each report: {meetingId, meetingNumber, meetingTitle, hostEmail, hostDisplayName,
703
+ # scheduledType, serviceType, start, end, peakAttendee,
704
+ # totalPeopleMinutes, totalParticipantsVoip, totalParticipantsCallIn,
705
+ # totalParticipantsCallOut, totalCallInMinutes, totalVoipMinutes,
706
+ # totalCallInTollFreeMinutes, totalRegistered, totalInvitee,
707
+ # totalCallOutDomestic, totalCallOutInternational, trackingCodes}
708
+
709
+ # List attendee reports
710
+ resp = requests.get(f"{BASE}/meetingReports/attendees",
711
+ headers=headers,
712
+ params={
713
+ "siteUrl": "mysite.webex.com",
714
+ "meetingId": "MEETING_INSTANCE_ID",
715
+ "from": "2026-03-01T00:00:00Z",
716
+ "to": "2026-03-28T00:00:00Z",
717
+ "max": 100
718
+ })
719
+ attendees = resp.json().get("items", [])
720
+ # Each attendee: {meetingId, meetingNumber, meetingTitle, email, displayName,
721
+ # joinedTime, leftTime, duration, participantType, invited,
722
+ # registered, company, phoneNumber, address1, city, state,
723
+ # country, zipCode, clientAgent}
724
+ ```
725
+
726
+ ---
727
+
728
+ ## 8. Slido Compliance
729
+
730
+ **CLI group:** `meeting-slido`
731
+ **API base:** `https://webexapis.com/v1/slido/compliance/events`
732
+
733
+ Read-only compliance event log for Slido interactions within Webex Meetings. Returns events such as poll responses, Q&A submissions, and session metadata for compliance and audit purposes. Requires a Slido Secure Premium license.
734
+
735
+ ### Commands
736
+
737
+ | Command | CLI | HTTP Method | What It Does |
738
+ |---------|-----|------------|-------------|
739
+ | List compliance events | `wxcli meeting-slido list` | GET /slido/compliance/events | List Slido compliance events |
740
+
741
+ ### Key Parameters
742
+
743
+ | Option | Description |
744
+ |--------|-------------|
745
+ | `--session-org-id ID` | Webex organization UUID |
746
+ | `--session-id ID` | Webex meeting instance ID (format: `{meetingSeriesId}_I_{conferenceId}`) |
747
+ | `--start TOKEN` | Pagination token (returned as `next` in response) |
748
+
749
+ ### Raw HTTP
750
+
751
+ ```python
752
+ BASE = "https://webexapis.com/v1"
753
+
754
+ # List Slido compliance events
755
+ resp = requests.get(f"{BASE}/slido/compliance/events",
756
+ headers=headers,
757
+ params={"sessionOrgId": "ORG_UUID", "sessionId": "MEETING_INSTANCE_ID"})
758
+ events = resp.json()
759
+ # Returns: {next, items: [{userId, sessionOrgId, sessionId, createdAtMs,
760
+ # data: {type, sessionId, anonymityEnabled, createdAtMs, modifiedAtMs, isDeleted}}]}
761
+ # Event data types: "session", "poll", "question", "answer", "reply", etc.
762
+
763
+ # Paginate through events
764
+ next_token = events.get("next")
765
+ if next_token:
766
+ resp = requests.get(f"{BASE}/slido/compliance/events",
767
+ headers=headers,
768
+ params={"sessionOrgId": "ORG_UUID", "start": next_token})
769
+ ```
770
+
771
+ ---
772
+
773
+ ## 9. Raw HTTP Endpoints
774
+
775
+ All 34 endpoints across the 8 CLI groups, for quick reference.
776
+
777
+ | # | Method | Path | CLI Group | CLI Command | Description |
778
+ |---|--------|------|-----------|-------------|-------------|
779
+ | 1 | GET | /meetingPreferences | meeting-preferences | `list-meeting-preferences` | Get all meeting preferences |
780
+ | 2 | GET | /meetingPreferences/audio | meeting-preferences | `show` | Get audio options |
781
+ | 3 | PUT | /meetingPreferences/audio | meeting-preferences | `update` | Update audio options |
782
+ | 4 | GET | /meetingPreferences/video | meeting-preferences | `list` | Get video options |
783
+ | 5 | PUT | /meetingPreferences/video | meeting-preferences | `update-video` | Update video options |
784
+ | 6 | GET | /meetingPreferences/schedulingOptions | meeting-preferences | `list-scheduling-options` | Get scheduling options |
785
+ | 7 | PUT | /meetingPreferences/schedulingOptions | meeting-preferences | `update-scheduling-options` | Update scheduling options |
786
+ | 8 | POST | /meetingPreferences/schedulingOptions/delegateEmails/insert | meeting-preferences | `create-insert` | Insert delegate emails |
787
+ | 9 | POST | /meetingPreferences/schedulingOptions/delegateEmails/delete | meeting-preferences | `create` | Delete delegate emails |
788
+ | 10 | GET | /meetingPreferences/sites | meeting-preferences | `list-sites` | Get site list |
789
+ | 11 | PUT | /meetingPreferences/sites | meeting-preferences | `update-sites` | Update default site |
790
+ | 12 | GET | /meetingPreferences/personalMeetingRoom | meeting-preferences | `list-personal-meeting-room` | Get PMR options |
791
+ | 13 | PUT | /meetingPreferences/personalMeetingRoom | meeting-preferences | `update-personal-meeting-room` | Update PMR options |
792
+ | 14 | POST | /admin/meetingPreferences/personalMeetingRoom/refreshId | meeting-preferences | `create-refresh-id` | Batch refresh PMR IDs |
793
+ | 15 | GET | /admin/meeting/config/sessionTypes | meeting-session-types | `list` | List site session types |
794
+ | 16 | GET | /admin/meeting/userconfig/sessionTypes | meeting-session-types | `list-session-types` | List user session types |
795
+ | 17 | PUT | /admin/meeting/userconfig/sessionTypes | meeting-session-types | `update` | Update user session types |
796
+ | 18 | GET | /admin/meeting/config/trackingCodes | meeting-tracking-codes | `list` | List site tracking codes |
797
+ | 19 | POST | /admin/meeting/config/trackingCodes | meeting-tracking-codes | `create` | Create tracking code |
798
+ | 20 | GET | /admin/meeting/config/trackingCodes/{trackingCodeId} | meeting-tracking-codes | `show` | Get tracking code |
799
+ | 21 | PUT | /admin/meeting/config/trackingCodes/{trackingCodeId} | meeting-tracking-codes | `update-tracking-codes` | Update tracking code |
800
+ | 22 | DELETE | /admin/meeting/config/trackingCodes/{trackingCodeId} | meeting-tracking-codes | `delete` | Delete tracking code |
801
+ | 23 | GET | /admin/meeting/userconfig/trackingCodes | meeting-tracking-codes | `list-tracking-codes` | Get user tracking codes |
802
+ | 24 | PUT | /admin/meeting/userconfig/trackingCodes | meeting-tracking-codes | `update` | Update user tracking codes |
803
+ | 25 | GET | /admin/meeting/config/commonSettings | meeting-site | `show` | Get site common settings |
804
+ | 26 | PATCH | /admin/meeting/config/commonSettings | meeting-site | `update` | Update site common settings |
805
+ | 27 | GET | /meetings/polls | meeting-polls | `list-polls` | List meeting polls |
806
+ | 28 | GET | /meetings/pollResults | meeting-polls | `list` | Get meeting poll results |
807
+ | 29 | GET | /meetings/polls/{pollId}/questions/{questionId}/respondents | meeting-polls | `list-respondents` | List poll respondents |
808
+ | 30 | GET | /meetings/q_and_a | meeting-qa | `list` | List meeting Q&A |
809
+ | 31 | GET | /meetings/q_and_a/{questionId}/answers | meeting-qa | `list-answers` | List Q&A answers |
810
+ | 32 | GET | /meetingReports/usage | meeting-reports | `list` | List usage reports |
811
+ | 33 | GET | /meetingReports/attendees | meeting-reports | `list-attendees` | List attendee reports |
812
+ | 34 | GET | /slido/compliance/events | meeting-slido | `list` | List Slido compliance events |
813
+
814
+ ---
815
+
816
+ ## 10. Gotchas
817
+
818
+ 1. **Preferences endpoints default to the authenticated user.** Pass `--user-email` to act on behalf of another user. This requires admin-level scopes (`meeting:admin_preferences_read`, `meeting:admin_preferences_write`). Without admin scopes, the parameter is silently ignored and the API operates on the caller.
819
+
820
+ 2. **`create` in meeting-preferences actually deletes delegate emails.** The CLI command `wxcli meeting-preferences create` maps to `POST /meetingPreferences/schedulingOptions/delegateEmails/delete`. This is a confusing auto-generated name because the generator maps all POST endpoints to `create`. To add delegates, use `create-insert` instead.
821
+
822
+ 3. **`create-refresh-id` is an admin-only batch endpoint.** It lives under `/admin/meetingPreferences/...` and refreshes PMR IDs for multiple users at once. Requires an admin token. The `personalMeetingRoomId` field in the request can be set to a custom value, or `systemGenerated: true` will auto-generate a new ID.
823
+
824
+ 4. **Session types and tracking codes are admin-only.** All endpoints under `/admin/meeting/config/` and `/admin/meeting/userconfig/` require admin-level scopes. User tokens return 403.
825
+
826
+ 5. **Site settings use PATCH not PUT.** The `meeting-site update` command sends a PATCH request, meaning you only need to include the fields you want to change. Other fields are preserved. This differs from most Webex API update endpoints which use PUT (full replacement).
827
+
828
+ 6. **Poll and Q&A data are read-only.** You can retrieve poll results and Q&A content after a meeting ends, but you cannot create, modify, or delete polls or Q&A via the API. Polls are created in the Webex client during a live meeting.
829
+
830
+ 7. **Reports require `siteUrl` in practice.** While `siteUrl` is technically optional for reports, omitting it defaults to the admin's default site, which may not be the site you want to query. Always specify `siteUrl` for predictable results.
831
+
832
+ 8. **Report date range is capped at 30 days, max 90 days ago.** The interval between `from` and `to` cannot exceed 30 days, and `from` cannot be earlier than 90 days before the current date. For longer historical queries, make multiple requests with sliding date windows.
833
+
834
+ 9. **Slido compliance events require Slido Secure Premium license.** Without this license, the endpoint returns 403. The `sessionId` format is `{meetingSeriesId}_I_{conferenceId}`, not a standard Webex meeting ID.
835
+
836
+ 10. **Tracking codes can be mapped (one-way migration).** Admins can switch a site from classic tracking codes to mapped tracking codes in Control Hub. This is a one-time irreversible operation. After mapping, the tracking codes API returns mapped attributes, and create/update operations are blocked during or after the mapping process.
837
+
838
+ 11. **User session types and tracking codes use `email` as a header, not a query parameter.** The `email` parameter for `/admin/meeting/userconfig/sessionTypes` and `/admin/meeting/userconfig/trackingCodes` is passed as a request header, not a query string parameter. The CLI handles this correctly, but when making raw HTTP calls, set the `email` header explicitly.
839
+
840
+ 12. **`meetingId` for polls, Q&A, and attendee reports must be an ended meeting instance ID.** Meeting series IDs, scheduled meeting IDs, and personal room meeting IDs are not supported. Only IDs of completed (ended) meeting instances work.
841
+
842
+ ---
843
+
844
+ ## 11. See Also
845
+
846
+ - [`meetings-core.md`](meetings-core.md) — Meeting CRUD, templates, controls, registrants, interpreters, breakouts, surveys
847
+ - [`meetings-content.md`](meetings-content.md) — Transcripts, captions, chats, summaries, meeting messages
848
+ - [`meetings-infrastructure.md`](meetings-infrastructure.md) — Video Mesh (clusters, nodes, health, utilization), participants, invitees
849
+ - [`authentication.md`](authentication.md) -- Token types, scopes, OAuth flows (meeting-specific admin scopes: `meeting:admin_preferences_read/write`, `meeting:admin_config_read/write`)
850
+ - [`reporting-analytics.md`](reporting-analytics.md) -- CDR, call quality, and queue statistics (Webex Calling reports, complementary to meeting reports)