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,903 @@
1
+ # Meetings: Core API — Schedule, Manage, and Control Meetings
2
+
3
+ Reference for the Webex Meetings core API. Covers the 46 commands in the `meetings` CLI group that a user or admin uses to create, schedule, manage, and control Webex meetings, webinars, and events. Includes meeting lifecycle, templates, controls, registration, interpreters, breakout sessions, surveys, and invitation sources. 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 Meetings API](https://developer.webex.com/docs/api/v1/meetings)
9
+
10
+ ---
11
+
12
+ ## Token Type Matrix
13
+
14
+ Check this matrix before running any meetings command. The wrong token type will produce a 403 or empty results.
15
+
16
+ | Operation | User Token | Admin Token | Notes |
17
+ |-----------|-----------|-------------|-------|
18
+ | Meeting CRUD (user endpoints) | Yes | No (use admin endpoints) | User sees only their own meetings |
19
+ | Meeting CRUD (admin endpoints) | No | Yes | Admin can query any user's meetings via `--host-email` |
20
+ | Join a meeting | Yes | No | Generates join/start links for the authenticated user |
21
+ | End a meeting | Yes | Yes (with `--host-email`) | Only the host or admin can end |
22
+ | Meeting controls | Yes (host only) | No | Lock, recording start/pause |
23
+ | Templates | Yes | Yes (with `--host-email`) | Templates are site-specific |
24
+ | Registration & registrants | Yes (host only) | Yes (with `--host-email`) | Only applies to webinar-type meetings |
25
+ | Interpreters | Yes (host only) | Yes (with `--host-email`) | Simultaneous interpretation setup |
26
+ | Breakout sessions | Yes (host only) | Yes (with `--host-email`) | Must be configured before meeting starts |
27
+ | Surveys | Yes | Yes (with `--host-email`) | Results available only after meeting ends |
28
+ | Session types | Yes | Yes (with `--host-email`) | Read-only; configured at site level |
29
+ | Tracking codes | Yes | Yes (with `--host-email`) | Read-only via meetings group; admin CRUD in meetings-settings |
30
+
31
+ ---
32
+
33
+ ## Table of Contents
34
+
35
+ 1. [Meeting Data Model](#1-meeting-data-model)
36
+ 2. [Meeting CRUD](#2-meeting-crud)
37
+ 3. [Meeting Lifecycle](#3-meeting-lifecycle)
38
+ 4. [Meeting Templates](#4-meeting-templates)
39
+ 5. [Meeting Controls](#5-meeting-controls)
40
+ 6. [Registration and Registrants](#6-registration-and-registrants)
41
+ 7. [Interpreters and Simultaneous Interpretation](#7-interpreters-and-simultaneous-interpretation)
42
+ 8. [Breakout Sessions](#8-breakout-sessions)
43
+ 9. [Surveys](#9-surveys)
44
+ 10. [Invitation Sources](#10-invitation-sources)
45
+ 11. [Session Types and Tracking Codes](#11-session-types-and-tracking-codes)
46
+ 12. [Raw HTTP Endpoints](#12-raw-http-endpoints)
47
+ 13. [Gotchas](#13-gotchas)
48
+ 14. [See Also](#14-see-also)
49
+
50
+ ---
51
+
52
+ ## 1. Meeting Data Model
53
+
54
+ A meeting object returned by the API contains these key fields:
55
+
56
+ ```
57
+ Meeting
58
+ ├── id Unique meeting ID
59
+ ├── meetingSeriesId Series ID (for recurring meetings)
60
+ ├── scheduledMeetingId Scheduled instance ID
61
+ ├── meetingNumber Numeric meeting number (used for dialing in)
62
+ ├── title Meeting title
63
+ ├── agenda Meeting agenda/description
64
+ ├── start / end ISO 8601 start and end times
65
+ ├── timezone Timezone for the meeting
66
+ ├── state active | inactive | ended | missed | expired
67
+ ├── meetingType meetingSeries | scheduledMeeting | meeting (instance)
68
+ ├── scheduledType meeting | webinar | personalRoomMeeting
69
+ ├── hostEmail / hostDisplayName Meeting host
70
+ ├── hostUserId Host's Webex user ID
71
+ ├── password Meeting password
72
+ ├── webLink Join link
73
+ ├── sipAddress SIP URI for video endpoints
74
+ ├── dialInIpAddress IP for H.323/SIP dial-in
75
+ ├── telephony PSTN dial-in numbers
76
+ ├── recurrence Recurrence rule (RFC 5545 RRULE)
77
+ ├── meetingOptions Chat, file transfer, video, polling settings
78
+ ├── attendeePrivileges Share, annotate, remote control permissions
79
+ ├── registration Registration settings (webinar)
80
+ ├── simultaneousInterpretation Interpreter settings
81
+ ├── trackingCodes Array of tracking code name/value pairs
82
+ ├── integrationTags External integration keys
83
+ ├── has* flags hasRecording, hasChat, hasTranscription, etc.
84
+ └── links Related resource links
85
+ ```
86
+
87
+ **Meeting ID types:** The `meetingId` parameter accepts three different ID types, and behavior changes depending on which is used:
88
+ - **Series ID** (`meetingSeriesId`) — represents the entire recurring series
89
+ - **Scheduled meeting ID** (`scheduledMeetingId`) — a specific occurrence in the series
90
+ - **Meeting instance ID** (`id`) — the actual meeting instance (only exists after meeting starts)
91
+
92
+ **Scheduled types:**
93
+ - `meeting` — standard Webex meeting
94
+ - `webinar` — webinar with registration, panelists, and attendee roles
95
+ - `personalRoomMeeting` — personal meeting room (PMR) meeting
96
+
97
+ ---
98
+
99
+ ## 2. Meeting CRUD
100
+
101
+ **CLI group:** `meetings`
102
+ **API base:** `https://webexapis.com/v1/meetings`
103
+
104
+ ### Commands
105
+
106
+ | Command | CLI | HTTP Method | What It Does |
107
+ |---------|-----|------------|-------------|
108
+ | List meetings | `wxcli meetings list-meetings` | GET /meetings | List meetings for the authenticated user |
109
+ | Create meeting | `wxcli meetings create-meetings` | POST /meetings | Schedule a new meeting |
110
+ | Show meeting | `wxcli meetings show-meetings MEETING_ID` | GET /meetings/{meetingId} | Get meeting details |
111
+ | Update meeting (full) | `wxcli meetings update-meetings MEETING_ID` | PUT /meetings/{meetingId} | Replace all meeting fields |
112
+ | Update meeting (partial) | `wxcli meetings update-meetings-1 MEETING_ID` | PATCH /meetings/{meetingId} | Update only specified fields |
113
+ | Delete meeting | `wxcli meetings delete-meetings MEETING_ID` | DELETE /meetings/{meetingId} | Cancel/delete a meeting |
114
+ | List meetings (admin) | `wxcli meetings list-meetings-admin` | GET /admin/meetings | List any user's meetings (admin token) |
115
+ | Show meeting (admin) | `wxcli meetings show-meetings-admin MEETING_ID` | GET /admin/meetings/{meetingId} | Get any meeting's details (admin token) |
116
+
117
+ ### Key Parameters
118
+
119
+ #### `meetings list-meetings`
120
+
121
+ | Option | Description |
122
+ |--------|-------------|
123
+ | `--meeting-number TEXT` | Filter by meeting number |
124
+ | `--web-link TEXT` | Filter by meeting join link (URL-encoded) |
125
+ | `--room-id TEXT` | Filter by associated Webex space ID |
126
+ | `--meeting-series-id TEXT` | Filter by series ID |
127
+ | `--meeting-type meetingSeries\|scheduledMeeting\|meeting` | Filter by meeting type |
128
+ | `--state active\|inactive\|ended\|missed\|expired` | Filter by state (default: all future meetings) |
129
+ | `--scheduled-type meeting\|webinar\|personalRoomMeeting` | Filter by scheduled type |
130
+ | `--is-modified` | Filter to modified scheduled meetings only |
131
+ | `--has-chat` | Filter to ended meetings with chat logs |
132
+ | `--has-recording` | Filter to ended meetings with recordings |
133
+ | `--has-transcription` | Filter to ended meetings with transcripts |
134
+ | `--has-summary` | Filter to ended meetings with AI summaries |
135
+ | `--has-closed-caption` | Filter to ended meetings with closed captions |
136
+ | `--has-polls` | Filter to ended meetings with polls |
137
+ | `--has-qa` | Filter to ended meetings with Q&A |
138
+ | `--has-slido` | Filter to ended meetings with Slido interactions |
139
+ | `--from DATETIME` | Start of time range (ISO 8601) |
140
+ | `--to DATETIME` | End of time range (ISO 8601) |
141
+ | `--host-email EMAIL` | Admin: query another user's meetings |
142
+ | `--site-url URL` | Webex site to query (default: user's default site) |
143
+ | `--current` | Return only the current scheduled meeting in a series |
144
+ | `--integration-tag TEXT` | Filter by integration application tag |
145
+ | `--max N` | API-level page size (up to 100) |
146
+ | `--output table\|json` | Output format |
147
+
148
+ #### `meetings create-meetings`
149
+
150
+ | Option | Required | Description |
151
+ |--------|:--------:|-------------|
152
+ | `--title TEXT` | Yes | Meeting title |
153
+ | `--start DATETIME` | Yes | Start time (ISO 8601) |
154
+ | `--end DATETIME` | Yes | End time (ISO 8601) |
155
+ | `--timezone TEXT` | No | Timezone (default: host's timezone) |
156
+ | `--agenda TEXT` | No | Meeting description/agenda |
157
+ | `--password TEXT` | No | Meeting password (auto-generated if omitted) |
158
+ | `--scheduled-type meeting\|webinar` | No | Meeting or webinar (default: meeting) |
159
+ | `--recurrence TEXT` | No | RFC 5545 RRULE for recurring meetings |
160
+ | `--template-id TEXT` | No | Apply a meeting template |
161
+ | `--session-type-id TEXT` | No | Session type (from list-session-types) |
162
+ | `--host-email EMAIL` | No | Admin: schedule on behalf of another user |
163
+ | `--site-url URL` | No | Webex site (default: host's default site) |
164
+ | `--invitees JSON` | No | Array of invitee objects (email, displayName, coHost) |
165
+ | `--send-email` | No | Send email invitations to invitees |
166
+ | `--enabled-join-before-host` | No | Allow attendees to join before host |
167
+ | `--join-before-host-minutes N` | No | Minutes before start that attendees can join |
168
+ | `--enabled-auto-record-meeting` | No | Auto-record the meeting |
169
+ | `--enabled-breakout-sessions` | No | Enable breakout session capability |
170
+ | `--enabled-webcast-view` | No | Enable webcast view for webinars |
171
+ | `--room-id TEXT` | No | Associate with a Webex space |
172
+ | `--json-body JSON` | No | Full JSON body (overrides all other options) |
173
+
174
+ #### `meetings update-meetings` (PUT — full replace)
175
+
176
+ Same options as `create-meetings`. All fields must be provided; omitted fields revert to defaults.
177
+
178
+ #### `meetings update-meetings-1` (PATCH — partial update)
179
+
180
+ Same options as `create-meetings`. Only provided fields are updated; omitted fields remain unchanged.
181
+
182
+ #### `meetings list-meetings-admin` / `meetings show-meetings-admin`
183
+
184
+ These admin endpoints accept the same filtering options as their user-level counterparts, plus:
185
+
186
+ | Option | Description |
187
+ |--------|-------------|
188
+ | `--host-email EMAIL` | Required for admin queries — specifies which user's meetings to list |
189
+
190
+ ### Raw HTTP
191
+
192
+ ```python
193
+ import requests
194
+
195
+ BASE = "https://webexapis.com/v1"
196
+ headers = {"Authorization": f"Bearer {token}"}
197
+
198
+ # List future meetings
199
+ resp = requests.get(f"{BASE}/meetings", headers=headers,
200
+ params={"from": "2026-03-01T00:00:00Z", "to": "2026-04-01T00:00:00Z"})
201
+ meetings = resp.json().get("items", [])
202
+ # Each item: {"id", "title", "start", "end", "meetingNumber", "webLink", "state", ...}
203
+
204
+ # Create a meeting
205
+ body = {
206
+ "title": "Weekly Standup",
207
+ "start": "2026-04-01T09:00:00-05:00",
208
+ "end": "2026-04-01T09:30:00-05:00",
209
+ "timezone": "America/Chicago",
210
+ "sendEmail": True,
211
+ "invitees": [
212
+ {"email": "alice@example.com", "coHost": True},
213
+ {"email": "bob@example.com"}
214
+ ]
215
+ }
216
+ resp = requests.post(f"{BASE}/meetings", headers=headers, json=body)
217
+ meeting_id = resp.json().get("id")
218
+
219
+ # Get meeting details
220
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}", headers=headers)
221
+
222
+ # Patch a meeting (partial update)
223
+ resp = requests.patch(f"{BASE}/meetings/{meeting_id}", headers=headers,
224
+ json={"title": "Updated Standup", "agenda": "Sprint review added"})
225
+
226
+ # Delete a meeting
227
+ resp = requests.delete(f"{BASE}/meetings/{meeting_id}", headers=headers)
228
+
229
+ # Admin: list another user's meetings
230
+ resp = requests.get(f"{BASE}/admin/meetings", headers=headers,
231
+ params={"hostEmail": "user@example.com", "from": "2026-03-01T00:00:00Z",
232
+ "to": "2026-04-01T00:00:00Z"})
233
+ ```
234
+
235
+ ### Gotchas
236
+
237
+ - **`update-meetings` (PUT) is a full replace.** Every field you omit reverts to its default. Use `update-meetings-1` (PATCH) for partial updates.
238
+ - **`list-meetings` defaults to future meetings only.** To see past meetings, you must provide `--from` and `--to`.
239
+ - **`state` filter only applies to certain meeting types.** For example, `ended` only applies to meeting instances, not series.
240
+ - **Creating a recurring meeting** uses RFC 5545 RRULE syntax: `--recurrence "FREQ=WEEKLY;COUNT=10;BYDAY=MO"`.
241
+
242
+ ---
243
+
244
+ ## 3. Meeting Lifecycle
245
+
246
+ Commands for joining, ending, and reassigning meetings.
247
+
248
+ ### Commands
249
+
250
+ | Command | CLI | HTTP Method | What It Does |
251
+ |---------|-----|------------|-------------|
252
+ | Join meeting | `wxcli meetings create-join` | POST /meetings/join | Generate a join link for a meeting |
253
+ | End meeting | `wxcli meetings create-end MEETING_ID` | POST /meetings/{meetingId}/end | End an active meeting |
254
+ | Reassign host | `wxcli meetings create-reassign-host` | POST /meetings/reassignHost | Move all meetings from one host to another |
255
+
256
+ ### Key Parameters
257
+
258
+ #### `meetings create-join`
259
+
260
+ | Option | Description |
261
+ |--------|-------------|
262
+ | `--meeting-id TEXT` | Join by meeting ID (use one of meetingId, meetingNumber, or webLink) |
263
+ | `--meeting-number TEXT` | Join by meeting number |
264
+ | `--web-link TEXT` | Join by meeting join link |
265
+ | `--email TEXT` | Email of the user joining |
266
+ | `--display-name TEXT` | Display name for the joining user |
267
+ | `--password TEXT` | Meeting password (required if meeting is password-protected) |
268
+ | `--expiration-minutes N` | Link expiration time in minutes |
269
+ | `--host-email TEXT` | Admin: join on behalf of another user |
270
+ | `--join-directly` | Join directly without lobby |
271
+ | `--registration-id TEXT` | Registration ID for webinar registrants |
272
+ | `--json-body JSON` | Full JSON body |
273
+
274
+ #### `meetings create-reassign-host`
275
+
276
+ | Option | Description |
277
+ |--------|-------------|
278
+ | `--current-host-email EMAIL` | Current host email (meetings will be moved FROM this user) |
279
+ | `--new-host-email EMAIL` | New host email (meetings will be moved TO this user) |
280
+
281
+ ### Raw HTTP
282
+
283
+ ```python
284
+ BASE = "https://webexapis.com/v1"
285
+
286
+ # Join a meeting by meeting number
287
+ body = {
288
+ "meetingNumber": "1234567890",
289
+ "password": "Pa$$w0rd",
290
+ "email": "user@example.com",
291
+ "displayName": "John Doe"
292
+ }
293
+ resp = requests.post(f"{BASE}/meetings/join", headers=headers, json=body)
294
+ join_link = resp.json().get("joinLink")
295
+ start_link = resp.json().get("startLink") # Only returned for hosts
296
+
297
+ # End an active meeting
298
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/end", headers=headers)
299
+
300
+ # Reassign all meetings to a new host
301
+ body = {
302
+ "currentHostEmail": "leaving@example.com",
303
+ "newHostEmail": "replacement@example.com"
304
+ }
305
+ resp = requests.post(f"{BASE}/meetings/reassignHost", headers=headers, json=body)
306
+ ```
307
+
308
+ ### Gotchas
309
+
310
+ - **`create-join` can use meetingId, meetingNumber, or webLink** — exactly one must be provided.
311
+ - **`create-join` returns different links for hosts vs attendees.** Hosts get both `joinLink` and `startLink`; attendees only get `joinLink`.
312
+ - **`create-end` only works on active (in-progress) meetings.** Calling it on a scheduled or ended meeting returns an error.
313
+ - **`create-reassign-host` moves ALL meetings** from the current host to the new host. There is no per-meeting reassignment via this endpoint.
314
+
315
+ ---
316
+
317
+ ## 4. Meeting Templates
318
+
319
+ Templates define default meeting settings (audio options, attendee privileges, meeting options) that can be applied when creating meetings.
320
+
321
+ ### Commands
322
+
323
+ | Command | CLI | HTTP Method | What It Does |
324
+ |---------|-----|------------|-------------|
325
+ | List templates | `wxcli meetings list-templates` | GET /meetings/templates | List available meeting templates |
326
+ | Show template | `wxcli meetings show TEMPLATE_ID` | GET /meetings/templates/{templateId} | Get template details |
327
+
328
+ ### Key Parameters
329
+
330
+ #### `meetings list-templates`
331
+
332
+ | Option | Description |
333
+ |--------|-------------|
334
+ | `--template-type TEXT` | Filter by template type |
335
+ | `--locale TEXT` | Locale for template names |
336
+ | `--is-default` | Filter to default templates only |
337
+ | `--is-standard` | Filter to standard (system) templates only |
338
+ | `--host-email EMAIL` | Admin: list templates available to another user |
339
+
340
+ #### `meetings show TEMPLATE_ID`
341
+
342
+ | Option | Description |
343
+ |--------|-------------|
344
+ | `--host-email EMAIL` | Admin: get template for another user |
345
+
346
+ ### Raw HTTP
347
+
348
+ ```python
349
+ BASE = "https://webexapis.com/v1"
350
+
351
+ # List available templates
352
+ resp = requests.get(f"{BASE}/meetings/templates", headers=headers)
353
+ templates = resp.json().get("items", [])
354
+
355
+ # Get template details (includes full meeting defaults)
356
+ resp = requests.get(f"{BASE}/meetings/templates/{template_id}", headers=headers)
357
+ template = resp.json()
358
+ # Returns: meeting settings, meetingOptions, attendeePrivileges, trackingCodes, etc.
359
+ ```
360
+
361
+ ---
362
+
363
+ ## 5. Meeting Controls
364
+
365
+ Real-time controls for an active meeting. Only the meeting host can use these.
366
+
367
+ ### Commands
368
+
369
+ | Command | CLI | HTTP Method | What It Does |
370
+ |---------|-----|------------|-------------|
371
+ | Show controls | `wxcli meetings show-controls` | GET /meetings/controls | Get lock and recording status |
372
+ | Update controls | `wxcli meetings update` | PUT /meetings/controls | Lock/unlock meeting, start/pause recording |
373
+
374
+ ### Key Parameters
375
+
376
+ #### `meetings show-controls`
377
+
378
+ | Option | Description |
379
+ |--------|-------------|
380
+ | `--meeting-id TEXT` | Meeting ID of the active meeting |
381
+
382
+ #### `meetings update` (meeting controls)
383
+
384
+ | Option | Description |
385
+ |--------|-------------|
386
+ | `--meeting-id TEXT` | Meeting ID of the active meeting (query parameter) |
387
+ | `--locked` | Lock or unlock the meeting |
388
+ | `--recording-started` | Start or stop recording |
389
+ | `--recording-paused` | Pause or resume recording |
390
+
391
+ ### Raw HTTP
392
+
393
+ ```python
394
+ BASE = "https://webexapis.com/v1"
395
+
396
+ # Get meeting control status
397
+ resp = requests.get(f"{BASE}/meetings/controls", headers=headers,
398
+ params={"meetingId": meeting_id})
399
+ # Returns: {"locked": false, "recordingStarted": false, "recordingPaused": false}
400
+
401
+ # Lock the meeting and start recording
402
+ resp = requests.put(f"{BASE}/meetings/controls", headers=headers,
403
+ params={"meetingId": meeting_id},
404
+ json={"locked": True, "recordingStarted": True})
405
+ ```
406
+
407
+ ### Gotchas
408
+
409
+ - **Only works on active (in-progress) meetings.** Returns an error if the meeting has not started or has already ended.
410
+ - **Only the host can control the meeting.** Co-hosts may have limited control depending on site settings.
411
+ - **`recordingStarted` and `recordingPaused` are independent.** You can pause a recording without stopping it.
412
+
413
+ ---
414
+
415
+ ## 6. Registration and Registrants
416
+
417
+ Registration forms and registrant management for webinar-type meetings. These endpoints only apply when the meeting has registration enabled (typically webinars).
418
+
419
+ ### Registration Form Commands
420
+
421
+ | Command | CLI | HTTP Method | What It Does |
422
+ |---------|-----|------------|-------------|
423
+ | Get form | `wxcli meetings list-registration MEETING_ID` | GET /meetings/{meetingId}/registration | Get the registration form configuration |
424
+ | Update form | `wxcli meetings update-registration MEETING_ID` | PUT /meetings/{meetingId}/registration | Configure registration form fields |
425
+ | Delete form | `wxcli meetings delete MEETING_ID` | DELETE /meetings/{meetingId}/registration | Remove registration form |
426
+
427
+ ### Registrant Commands
428
+
429
+ | Command | CLI | HTTP Method | What It Does |
430
+ |---------|-----|------------|-------------|
431
+ | List registrants | `wxcli meetings list-registrants MEETING_ID` | GET /meetings/{meetingId}/registrants | List all registrants |
432
+ | Register one | `wxcli meetings create MEETING_ID` | POST /meetings/{meetingId}/registrants | Register a single person |
433
+ | Batch register | `wxcli meetings create-bulk-insert MEETING_ID` | POST /meetings/{meetingId}/registrants/bulkInsert | Register multiple people at once |
434
+ | Show registrant | `wxcli meetings show-registrants MEETING_ID REGISTRANT_ID` | GET /meetings/{meetingId}/registrants/{registrantId} | Get registrant details |
435
+ | Update registrant | `wxcli meetings create-registrants MEETING_ID REGISTRANT_ID` | POST /meetings/{meetingId}/registrants/{registrantId} | Update registrant status |
436
+ | Delete registrant | `wxcli meetings delete-registrants MEETING_ID REGISTRANT_ID` | DELETE /meetings/{meetingId}/registrants/{registrantId} | Remove a registrant |
437
+ | Query registrants | `wxcli meetings create-query MEETING_ID` | POST /meetings/{meetingId}/registrants/query | Query registrants with filters |
438
+ | Batch approve | `wxcli meetings create-approve MEETING_ID` | POST /meetings/{meetingId}/registrants/approve | Approve multiple registrants |
439
+ | Batch reject | `wxcli meetings create-reject MEETING_ID` | POST /meetings/{meetingId}/registrants/reject | Reject multiple registrants |
440
+ | Batch cancel | `wxcli meetings create-cancel MEETING_ID` | POST /meetings/{meetingId}/registrants/cancel | Cancel multiple registrations |
441
+ | Batch delete | `wxcli meetings create-bulk-delete MEETING_ID` | POST /meetings/{meetingId}/registrants/bulkDelete | Delete multiple registrants |
442
+
443
+ ### Key Parameters
444
+
445
+ #### `meetings update-registration`
446
+
447
+ | Option | Description |
448
+ |--------|-------------|
449
+ | `--auto-accept-request` | Automatically approve registrants (no manual review) |
450
+ | `--max-register-num N` | Maximum number of registrants allowed |
451
+ | `--require-first-name` | Require first name on the form |
452
+ | `--require-last-name` | Require last name on the form |
453
+ | `--require-email` | Require email on the form |
454
+ | `--require-company-name` | Require company name |
455
+ | `--require-job-title` | Require job title |
456
+ | `--require-work-phone` | Require work phone number |
457
+ | `--require-address-1` | Require address line 1 |
458
+ | `--require-city` | Require city |
459
+ | `--require-state` | Require state/province |
460
+ | `--require-zip-code` | Require postal code |
461
+ | `--require-country-region` | Require country/region |
462
+ | `--host-email EMAIL` | Admin: configure for another user's meeting |
463
+ | `--json-body JSON` | Full JSON body (required for customizedQuestions and rules) |
464
+
465
+ #### `meetings create` (register a single registrant)
466
+
467
+ | Option | Description |
468
+ |--------|-------------|
469
+ | `--first-name TEXT` | Registrant's first name |
470
+ | `--last-name TEXT` | Registrant's last name |
471
+ | `--email TEXT` | Registrant's email |
472
+ | `--send-email` | Send confirmation email |
473
+ | `--json-body JSON` | Full JSON body (for custom question answers) |
474
+
475
+ ### Raw HTTP
476
+
477
+ ```python
478
+ BASE = "https://webexapis.com/v1"
479
+
480
+ # Get registration form
481
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/registration", headers=headers)
482
+
483
+ # Update registration form with custom questions
484
+ body = {
485
+ "autoAcceptRequest": True,
486
+ "maxRegisterNum": 500,
487
+ "requireFirstName": "required",
488
+ "requireLastName": "required",
489
+ "requireEmail": "required",
490
+ "requireCompanyName": "required",
491
+ "customizedQuestions": [
492
+ {"question": "What is your role?", "type": "singleLineTextBox", "required": True}
493
+ ]
494
+ }
495
+ resp = requests.put(f"{BASE}/meetings/{meeting_id}/registration", headers=headers, json=body)
496
+
497
+ # Register a person
498
+ body = {"firstName": "Jane", "lastName": "Doe", "email": "jane@example.com", "sendEmail": True}
499
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/registrants", headers=headers, json=body)
500
+ registrant_id = resp.json().get("id")
501
+
502
+ # Batch approve registrants
503
+ body = {"registrantIds": [registrant_id_1, registrant_id_2]}
504
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/registrants/approve", headers=headers, json=body)
505
+
506
+ # Query registrants by status
507
+ body = {"status": "pending"}
508
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/registrants/query", headers=headers, json=body)
509
+ ```
510
+
511
+ ### Gotchas
512
+
513
+ - **Registration only applies to webinar-type meetings.** Standard meetings do not support registration forms.
514
+ - **`create-registrants` (POST to `/{registrantId}`) is a status update, not a create.** Despite the CLI name, this updates an existing registrant's status (approve/reject/cancel).
515
+ - **`delete` (registration form) uses a bare command name** because it maps to `DELETE /meetings/{meetingId}/registration` — not to be confused with `delete-meetings` which deletes the meeting itself.
516
+ - **Batch operations (approve, reject, cancel, bulkDelete) accept arrays of registrant IDs** via `--json-body`.
517
+ - **Custom questions and rules require `--json-body`** — the CLI does not expose individual flags for nested question objects.
518
+
519
+ ---
520
+
521
+ ## 7. Interpreters and Simultaneous Interpretation
522
+
523
+ Manage interpreters for multilingual meetings. Interpreters provide real-time translation between language channels.
524
+
525
+ ### Commands
526
+
527
+ | Command | CLI | HTTP Method | What It Does |
528
+ |---------|-----|------------|-------------|
529
+ | List interpreters | `wxcli meetings list-interpreters MEETING_ID` | GET /meetings/{meetingId}/interpreters | List all interpreters for a meeting |
530
+ | Create interpreter | `wxcli meetings create-interpreters MEETING_ID` | POST /meetings/{meetingId}/interpreters | Add an interpreter |
531
+ | Show interpreter | `wxcli meetings show-interpreters MEETING_ID INTERPRETER_ID` | GET /meetings/{meetingId}/interpreters/{interpreterId} | Get interpreter details |
532
+ | Update interpreter | `wxcli meetings update-interpreters MEETING_ID INTERPRETER_ID` | PUT /meetings/{meetingId}/interpreters/{interpreterId} | Update interpreter assignment |
533
+ | Delete interpreter | `wxcli meetings delete-interpreters MEETING_ID INTERPRETER_ID` | DELETE /meetings/{meetingId}/interpreters/{interpreterId} | Remove an interpreter |
534
+ | Update SI settings | `wxcli meetings update-simultaneous-interpretation MEETING_ID` | PUT /meetings/{meetingId}/simultaneousInterpretation | Update overall SI configuration |
535
+
536
+ ### Key Parameters
537
+
538
+ #### `meetings create-interpreters`
539
+
540
+ | Option | Description |
541
+ |--------|-------------|
542
+ | `--email TEXT` | Interpreter's email address |
543
+ | `--display-name TEXT` | Interpreter's display name |
544
+ | `--language-code-1 TEXT` | First language code (e.g., "en") |
545
+ | `--language-code-2 TEXT` | Second language code (e.g., "es") |
546
+ | `--host-email EMAIL` | Admin: add interpreter to another user's meeting |
547
+ | `--send-email` | Send invitation email to the interpreter |
548
+
549
+ ### Raw HTTP
550
+
551
+ ```python
552
+ BASE = "https://webexapis.com/v1"
553
+
554
+ # List interpreters
555
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/interpreters", headers=headers)
556
+ interpreters = resp.json().get("items", [])
557
+
558
+ # Add an interpreter (English <-> Spanish)
559
+ body = {
560
+ "email": "interpreter@example.com",
561
+ "displayName": "Maria Garcia",
562
+ "languageCode1": "en",
563
+ "languageCode2": "es",
564
+ "sendEmail": True
565
+ }
566
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/interpreters", headers=headers, json=body)
567
+
568
+ # Update simultaneous interpretation settings
569
+ body = {"enabled": True}
570
+ resp = requests.put(f"{BASE}/meetings/{meeting_id}/simultaneousInterpretation",
571
+ headers=headers, json=body)
572
+ ```
573
+
574
+ ### Gotchas
575
+
576
+ - **Language codes use ISO 639-1 format** (e.g., "en", "es", "fr", "de", "zh", "ja").
577
+ - **Interpreters must be added before the meeting starts.** You cannot add interpreters to an active meeting via API.
578
+ - **`update-simultaneous-interpretation` controls the overall SI feature toggle** — it enables/disables SI for the meeting, separate from individual interpreter CRUD.
579
+
580
+ ---
581
+
582
+ ## 8. Breakout Sessions
583
+
584
+ Breakout sessions split a meeting into smaller sub-groups. They must be configured before the meeting starts.
585
+
586
+ ### Commands
587
+
588
+ | Command | CLI | HTTP Method | What It Does |
589
+ |---------|-----|------------|-------------|
590
+ | List breakout sessions | `wxcli meetings list-breakout-sessions MEETING_ID` | GET /meetings/{meetingId}/breakoutSessions | List all breakout sessions |
591
+ | Update breakout sessions | `wxcli meetings update-breakout-sessions MEETING_ID` | PUT /meetings/{meetingId}/breakoutSessions | Create or update breakout sessions |
592
+ | Delete breakout sessions | `wxcli meetings delete-breakout-sessions MEETING_ID` | DELETE /meetings/{meetingId}/breakoutSessions | Remove all breakout sessions |
593
+
594
+ ### Key Parameters
595
+
596
+ #### `meetings update-breakout-sessions`
597
+
598
+ | Option | Description |
599
+ |--------|-------------|
600
+ | `--host-email EMAIL` | Admin: configure for another user's meeting |
601
+ | `--send-email` | Send notification emails |
602
+ | `--json-body JSON` | Full JSON body with breakout session items (required) |
603
+
604
+ The `items` array in the JSON body defines the breakout sessions:
605
+
606
+ ```json
607
+ {
608
+ "items": [
609
+ {
610
+ "name": "Group A",
611
+ "invitees": ["alice@example.com", "bob@example.com"]
612
+ },
613
+ {
614
+ "name": "Group B",
615
+ "invitees": ["charlie@example.com", "dana@example.com"]
616
+ }
617
+ ],
618
+ "sendEmail": true
619
+ }
620
+ ```
621
+
622
+ ### Raw HTTP
623
+
624
+ ```python
625
+ BASE = "https://webexapis.com/v1"
626
+
627
+ # List breakout sessions
628
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/breakoutSessions", headers=headers)
629
+ sessions = resp.json().get("items", [])
630
+
631
+ # Create/update breakout sessions
632
+ body = {
633
+ "items": [
634
+ {"name": "Engineering", "invitees": ["eng1@example.com", "eng2@example.com"]},
635
+ {"name": "Marketing", "invitees": ["mkt1@example.com", "mkt2@example.com"]}
636
+ ],
637
+ "sendEmail": True
638
+ }
639
+ resp = requests.put(f"{BASE}/meetings/{meeting_id}/breakoutSessions", headers=headers, json=body)
640
+
641
+ # Delete all breakout sessions
642
+ resp = requests.delete(f"{BASE}/meetings/{meeting_id}/breakoutSessions", headers=headers)
643
+ ```
644
+
645
+ ### Gotchas
646
+
647
+ - **Breakout sessions must be configured before the meeting starts.** The API does not support creating breakout sessions during an active meeting.
648
+ - **`update-breakout-sessions` (PUT) is a full replace** — it replaces all existing breakout sessions with the provided set.
649
+ - **`delete-breakout-sessions` removes ALL breakout sessions** for the meeting. There is no per-session delete.
650
+ - **`enabledBreakoutSessions` must be `true` on the meeting** (set during create or update) for breakout sessions to work.
651
+ - **Breakout session configuration requires `--json-body`** because the items array is a nested structure.
652
+
653
+ ---
654
+
655
+ ## 9. Surveys
656
+
657
+ Retrieve meeting surveys and survey results. Surveys are configured in the Webex meeting client, not via API — these endpoints only read the survey definition and collect results after the meeting ends.
658
+
659
+ ### Commands
660
+
661
+ | Command | CLI | HTTP Method | What It Does |
662
+ |---------|-----|------------|-------------|
663
+ | Get survey | `wxcli meetings list-survey MEETING_ID` | GET /meetings/{meetingId}/survey | Get the survey definition for a meeting |
664
+ | List survey results | `wxcli meetings list-survey-results MEETING_ID` | GET /meetings/{meetingId}/surveyResults | List survey responses from attendees |
665
+ | Get survey links | `wxcli meetings create-survey-links MEETING_ID` | POST /meetings/{meetingId}/surveyLinks | Generate shareable survey links |
666
+
667
+ ### Key Parameters
668
+
669
+ #### `meetings list-survey-results`
670
+
671
+ | Option | Description |
672
+ |--------|-------------|
673
+ | `--meeting-id TEXT` | Meeting ID (required) |
674
+ | `--max N` | API-level page size |
675
+ | `--output table\|json` | Output format |
676
+
677
+ #### `meetings create-survey-links`
678
+
679
+ | Option | Description |
680
+ |--------|-------------|
681
+ | `--meeting-id TEXT` | Meeting ID (required) |
682
+ | `--host-email EMAIL` | Admin: generate links for another user's meeting |
683
+ | `--json-body JSON` | Full JSON body |
684
+
685
+ ### Raw HTTP
686
+
687
+ ```python
688
+ BASE = "https://webexapis.com/v1"
689
+
690
+ # Get survey definition
691
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/survey", headers=headers)
692
+ survey = resp.json()
693
+ # Returns: questions, options, survey settings
694
+
695
+ # List survey results (after meeting ends)
696
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/surveyResults", headers=headers)
697
+ results = resp.json().get("items", [])
698
+
699
+ # Generate survey links
700
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/surveyLinks", headers=headers)
701
+ links = resp.json()
702
+ ```
703
+
704
+ ### Gotchas
705
+
706
+ - **Survey results are only available after the meeting ends.** Querying during an active meeting returns empty results.
707
+ - **Surveys are configured in the Webex meeting client**, not via this API. These endpoints are read-only (survey definition) plus link generation.
708
+
709
+ ---
710
+
711
+ ## 10. Invitation Sources
712
+
713
+ Track where meeting invitations were sent from (e.g., calendar integrations, email clients). This is a tracking/analytics feature.
714
+
715
+ ### Commands
716
+
717
+ | Command | CLI | HTTP Method | What It Does |
718
+ |---------|-----|------------|-------------|
719
+ | List sources | `wxcli meetings list-invitation-sources MEETING_ID` | GET /meetings/{meetingId}/invitationSources | List invitation sources for a meeting |
720
+ | Create sources | `wxcli meetings create-invitation-sources MEETING_ID` | POST /meetings/{meetingId}/invitationSources | Record an invitation source |
721
+
722
+ ### Key Parameters
723
+
724
+ #### `meetings create-invitation-sources`
725
+
726
+ | Option | Description |
727
+ |--------|-------------|
728
+ | `--host-email EMAIL` | Admin: create for another user's meeting |
729
+ | `--person-id TEXT` | Person who sent the invitation |
730
+ | `--json-body JSON` | Full JSON body with items array |
731
+
732
+ ### Raw HTTP
733
+
734
+ ```python
735
+ BASE = "https://webexapis.com/v1"
736
+
737
+ # List invitation sources
738
+ resp = requests.get(f"{BASE}/meetings/{meeting_id}/invitationSources", headers=headers)
739
+ sources = resp.json().get("items", [])
740
+
741
+ # Record an invitation source
742
+ body = {
743
+ "personId": person_id,
744
+ "items": [{"sourceType": "email", "sourceId": "outlook"}]
745
+ }
746
+ resp = requests.post(f"{BASE}/meetings/{meeting_id}/invitationSources", headers=headers, json=body)
747
+ ```
748
+
749
+ ---
750
+
751
+ ## 11. Session Types and Tracking Codes
752
+
753
+ These are read-only configuration endpoints. Session types define what meeting capabilities are available (based on Webex site configuration). Tracking codes are metadata tags applied to meetings for reporting and compliance.
754
+
755
+ **Note:** Admin-level CRUD for session types and tracking codes is in the `meeting-config` and `meeting-user-config` CLI groups, documented in `meetings-settings.md`.
756
+
757
+ ### Commands
758
+
759
+ | Command | CLI | HTTP Method | What It Does |
760
+ |---------|-----|------------|-------------|
761
+ | List session types | `wxcli meetings list-session-types` | GET /meetings/sessionTypes | List available session types |
762
+ | Show session type | `wxcli meetings show-session-types SESSION_TYPE_ID` | GET /meetings/sessionTypes/{sessionTypeId} | Get session type details |
763
+ | List tracking codes | `wxcli meetings list` | GET /meetings/trackingCodes | List tracking codes for the site |
764
+
765
+ ### Key Parameters
766
+
767
+ #### `meetings list-session-types`
768
+
769
+ | Option | Description |
770
+ |--------|-------------|
771
+ | `--host-email EMAIL` | Admin: list session types for another user |
772
+ | `--site-url URL` | Webex site to query |
773
+
774
+ #### `meetings list` (tracking codes)
775
+
776
+ | Option | Description |
777
+ |--------|-------------|
778
+ | `--host-email EMAIL` | Admin: list tracking codes for another user |
779
+ | `--site-url URL` | Webex site to query |
780
+
781
+ ### Raw HTTP
782
+
783
+ ```python
784
+ BASE = "https://webexapis.com/v1"
785
+
786
+ # List session types
787
+ resp = requests.get(f"{BASE}/meetings/sessionTypes", headers=headers)
788
+ session_types = resp.json().get("items", [])
789
+ # Each item: {"id", "name", "type", "subType", ...}
790
+
791
+ # Get session type details
792
+ resp = requests.get(f"{BASE}/meetings/sessionTypes/{session_type_id}", headers=headers)
793
+
794
+ # List tracking codes
795
+ resp = requests.get(f"{BASE}/meetings/trackingCodes", headers=headers)
796
+ tracking_codes = resp.json().get("items", [])
797
+ # Each item: {"name", "value", ...}
798
+ ```
799
+
800
+ ### Gotchas
801
+
802
+ - **Session types are configured at the Webex site level.** You cannot create or modify session types via the meetings API — use the admin `meeting-config` group.
803
+ - **`meetings list` maps to tracking codes** (GET /meetings/trackingCodes), which can be confusing since `meetings list-meetings` maps to GET /meetings. Use `--help` to verify.
804
+ - **Tracking codes vary by site.** Different Webex sites in the same org may have different tracking codes configured.
805
+
806
+ ---
807
+
808
+ ## 12. Raw HTTP Endpoints
809
+
810
+ Complete table of all 46 endpoints in the `meetings` CLI group.
811
+
812
+ | HTTP Method | Path | CLI Command | Summary |
813
+ |-------------|------|-------------|---------|
814
+ | GET | /meetings | `list-meetings` | List Meetings |
815
+ | POST | /meetings | `create-meetings` | Create a Meeting |
816
+ | GET | /meetings/{meetingId} | `show-meetings` | Get a Meeting |
817
+ | PUT | /meetings/{meetingId} | `update-meetings` | Update a Meeting (full replace) |
818
+ | PATCH | /meetings/{meetingId} | `update-meetings-1` | Patch a Meeting (partial update) |
819
+ | DELETE | /meetings/{meetingId} | `delete-meetings` | Delete a Meeting |
820
+ | GET | /admin/meetings | `list-meetings-admin` | List Meetings By an Admin |
821
+ | GET | /admin/meetings/{meetingId} | `show-meetings-admin` | Get a Meeting By an Admin |
822
+ | POST | /meetings/join | `create-join` | Join a Meeting |
823
+ | POST | /meetings/{meetingId}/end | `create-end` | End a Meeting |
824
+ | POST | /meetings/reassignHost | `create-reassign-host` | Reassign Meetings to a New Host |
825
+ | GET | /meetings/templates | `list-templates` | List Meeting Templates |
826
+ | GET | /meetings/templates/{templateId} | `show` | Get a Meeting Template |
827
+ | GET | /meetings/controls | `show-controls` | Get Meeting Control Status |
828
+ | PUT | /meetings/controls | `update` | Update Meeting Control Status |
829
+ | GET | /meetings/{meetingId}/registration | `list-registration` | Get Registration Form |
830
+ | PUT | /meetings/{meetingId}/registration | `update-registration` | Update Meeting Registration Form |
831
+ | DELETE | /meetings/{meetingId}/registration | `delete` | Delete Meeting Registration Form |
832
+ | GET | /meetings/{meetingId}/registrants | `list-registrants` | List Meeting Registrants |
833
+ | POST | /meetings/{meetingId}/registrants | `create` | Register a Meeting Registrant |
834
+ | POST | /meetings/{meetingId}/registrants/bulkInsert | `create-bulk-insert` | Batch Register Meeting Registrants |
835
+ | GET | /meetings/{meetingId}/registrants/{registrantId} | `show-registrants` | Get Registrant Details |
836
+ | POST | /meetings/{meetingId}/registrants/{registrantId} | `create-registrants` | Batch Update Registrant Status |
837
+ | DELETE | /meetings/{meetingId}/registrants/{registrantId} | `delete-registrants` | Delete a Meeting Registrant |
838
+ | POST | /meetings/{meetingId}/registrants/query | `create-query` | Query Meeting Registrants |
839
+ | POST | /meetings/{meetingId}/registrants/approve | `create-approve` | Batch Approve Meeting Registrants |
840
+ | POST | /meetings/{meetingId}/registrants/reject | `create-reject` | Batch Reject Meeting Registrants |
841
+ | POST | /meetings/{meetingId}/registrants/cancel | `create-cancel` | Batch Cancel Meeting Registrants |
842
+ | POST | /meetings/{meetingId}/registrants/bulkDelete | `create-bulk-delete` | Batch Delete Meeting Registrants |
843
+ | GET | /meetings/{meetingId}/interpreters | `list-interpreters` | List Meeting Interpreters |
844
+ | POST | /meetings/{meetingId}/interpreters | `create-interpreters` | Create a Meeting Interpreter |
845
+ | GET | /meetings/{meetingId}/interpreters/{interpreterId} | `show-interpreters` | Get a Meeting Interpreter |
846
+ | PUT | /meetings/{meetingId}/interpreters/{interpreterId} | `update-interpreters` | Update a Meeting Interpreter |
847
+ | DELETE | /meetings/{meetingId}/interpreters/{interpreterId} | `delete-interpreters` | Delete a Meeting Interpreter |
848
+ | PUT | /meetings/{meetingId}/simultaneousInterpretation | `update-simultaneous-interpretation` | Update Simultaneous Interpretation |
849
+ | GET | /meetings/{meetingId}/breakoutSessions | `list-breakout-sessions` | List Meeting Breakout Sessions |
850
+ | PUT | /meetings/{meetingId}/breakoutSessions | `update-breakout-sessions` | Update Meeting Breakout Sessions |
851
+ | DELETE | /meetings/{meetingId}/breakoutSessions | `delete-breakout-sessions` | Delete Meeting Breakout Sessions |
852
+ | GET | /meetings/{meetingId}/survey | `list-survey` | Get a Meeting Survey |
853
+ | GET | /meetings/{meetingId}/surveyResults | `list-survey-results` | List Meeting Survey Results |
854
+ | POST | /meetings/{meetingId}/surveyLinks | `create-survey-links` | Get Meeting Survey Links |
855
+ | GET | /meetings/{meetingId}/invitationSources | `list-invitation-sources` | List Invitation Sources |
856
+ | POST | /meetings/{meetingId}/invitationSources | `create-invitation-sources` | Create Invitation Sources |
857
+ | GET | /meetings/sessionTypes | `list-session-types` | List Meeting Session Types |
858
+ | GET | /meetings/sessionTypes/{sessionTypeId} | `show-session-types` | Get a Meeting Session Type |
859
+ | GET | /meetings/trackingCodes | `list` | List Meeting Tracking Codes |
860
+
861
+ ---
862
+
863
+ ## 13. Gotchas
864
+
865
+ These issues span multiple meetings API surfaces. Check per-section Gotchas for endpoint-specific notes.
866
+
867
+ 1. **Admin endpoints (`/admin/meetings`) require an admin token; user endpoints require a user token.** Admin tokens cannot access `/meetings` (user-scoped). User tokens cannot access `/admin/meetings`. The admin endpoints mirror the user endpoints but accept `--host-email` to query any user's meetings.
868
+
869
+ 2. **`meetingId` can be a series ID, scheduled meeting ID, or meeting instance ID — behavior differs.** When you pass a series ID, the API returns the series-level data. When you pass a scheduled meeting ID, you get that specific occurrence. When you pass a meeting instance ID, you get the actual meeting that ran (with attendee counts, duration, etc.). Use `meetingType` to understand which type you received.
870
+
871
+ 3. **`list-meetings` defaults to returning future meetings only.** If you do not specify `--from` and `--to`, the API returns only upcoming scheduled meetings. To see historical meetings, you must explicitly provide a date range. The maximum range is 90 days per query.
872
+
873
+ 4. **`update-meetings` (PUT) replaces all fields; `update-meetings-1` (PATCH) updates only specified fields.** Always use PATCH for partial updates. PUT with missing fields will reset those fields to defaults, potentially removing invitees, agenda text, and other configuration.
874
+
875
+ 5. **`create-join` can join by meetingId, meetingNumber, or webLink — exactly one must be provided.** If you pass multiple, the API returns an error. The `webLink` value must be URL-encoded.
876
+
877
+ 6. **Registration and registrants only apply to webinar-type meetings.** Attempting to configure registration on a standard meeting type returns an error. Set `--scheduled-type webinar` when creating the meeting.
878
+
879
+ 7. **Breakout sessions must be created before the meeting starts.** The API does not support creating or modifying breakout sessions during an active meeting. Plan your breakout configuration during meeting scheduling.
880
+
881
+ 8. **Survey results are only available after the meeting ends.** The `list-survey-results` endpoint returns empty results for active or scheduled meetings. Similarly, `has*` filter flags (`--has-recording`, `--has-chat`, etc.) only apply to ended meeting instances.
882
+
883
+ 9. **The `--host-email` parameter is the admin override mechanism.** Admin-scoped endpoints require `--host-email` to specify which user's meetings to operate on. Without it, the API operates on the authenticated admin's own meetings (if they have a Webex Meetings license) or returns an error.
884
+
885
+ 10. **Passwords may be auto-generated.** If you do not provide `--password` when creating a meeting, the API generates one based on site password policy. The password is returned in the create response and in subsequent GET calls.
886
+
887
+ 11. **Recurring meeting operations.** When updating or deleting a recurring meeting using the series ID, the change applies to ALL future occurrences. To modify a single occurrence, use the scheduled meeting ID for that specific occurrence.
888
+
889
+ 12. **Site URL matters for multi-site orgs.** Organizations with multiple Webex sites (e.g., `site1.webex.com` and `site2.webex.com`) must specify `--site-url` to target the correct site. The default is the user's primary site.
890
+
891
+ 13. **CLI command name collisions.** Several commands have generic names (`list`, `create`, `delete`, `show`, `update`) that map to non-obvious endpoints. For example, `meetings list` maps to tracking codes (GET /meetings/trackingCodes), not meeting listing. `meetings delete` maps to registration form deletion. Always check `wxcli meetings <command> --help` to verify which endpoint a command targets.
892
+
893
+ ---
894
+
895
+ ## 14. See Also
896
+
897
+ - `meetings-content.md` — Meeting content: recordings, transcripts, closed captions, chat, polls, Q&A, summaries
898
+ - `meetings-settings.md` — Meeting preferences, site configuration, session types (admin CRUD), tracking codes (admin CRUD), common settings
899
+ - `meetings-infrastructure.md` — Meeting participants, invitees, reports, Video Mesh, Slido compliance
900
+ - [`admin-hybrid.md`](admin-hybrid.md) — Meeting quality metrics (`GET /meeting/qualities`), hybrid analytics
901
+ - [`admin-apps-data.md`](admin-apps-data.md) — Admin/group recordings, soft-delete/restore/purge, access lists
902
+ - [`authentication.md`](authentication.md) — Token types (user, admin), scopes, OAuth flows
903
+ - [`webhooks-events.md`](webhooks-events.md) — Webhook events for meeting lifecycle (meeting started, ended, participant joined/left)