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,643 @@
1
+ <!-- Updated by playbook session 2026-03-19 -->
2
+
3
+ # Admin: Apps, Data & Resources
4
+
5
+ Service apps, authorizations, user lifecycle operations, recordings management, data sources, and resource groups.
6
+
7
+ ## Sources
8
+
9
+ - `specs/webex-admin.json` -- OpenAPI 3.0 spec (admin/org management APIs)
10
+ - [Webex Service App documentation](https://developer.webex.com/docs/service-apps)
11
+ - [Webex Data Sources API](https://developer.webex.com/docs/api/v1/data-sources)
12
+ - [Webex Resource Groups API](https://developer.webex.com/docs/api/v1/resource-groups)
13
+
14
+ ---
15
+
16
+ ## Table of Contents
17
+
18
+ 1. [Service Apps & Authorizations](#1-service-apps--authorizations)
19
+ 2. [User Lifecycle](#2-user-lifecycle)
20
+ 3. [Recordings (Admin)](#3-recordings-admin)
21
+ 4. [Data & Compliance](#4-data--compliance)
22
+
23
+ ---
24
+
25
+ ## Required Scopes
26
+
27
+ | Scope | Purpose |
28
+ |-------|---------|
29
+ | `spark:applications_token` | Create service app access tokens. The admin must have authorized the service app in Control Hub first. |
30
+ | `spark-admin:people_write` | Initiate bulk activation email resend jobs. |
31
+ | `spark-admin:people_read` | List authorizations, archive user lookup. |
32
+ | `spark-admin:datasource_read` | List and retrieve data sources and schemas. |
33
+ | `spark-admin:datasource_write` | Create, update, and delete data sources. |
34
+ | `spark-admin:resource_groups_read` | List resource groups and memberships. |
35
+ | `spark-admin:resource_group_memberships_write` | Update resource group memberships. |
36
+ | `spark-compliance:recordings_read` | List recordings as compliance officer. |
37
+ | `spark-admin:recordings_read` | List recordings as admin. |
38
+ | `spark-admin:recordings_write` | Delete, move to recycle bin, restore, purge recordings. |
39
+ | `spark-admin:classifications_read` | List space classifications. |
40
+
41
+ ---
42
+
43
+ ## 1. Service Apps & Authorizations
44
+
45
+ ### Overview
46
+
47
+ Service apps are machine-to-machine integrations that act on behalf of an organization without a user context. An admin authorizes the service app in Control Hub, then the app exchanges its credentials for a short-lived access token scoped to the target org.
48
+
49
+ > **Creating a service app?** There is no API for registration — it must be done manually. See [authentication.md → Creating & Registering a Service App](authentication.md#creating--registering-a-service-app) for the full step-by-step guide covering developer portal registration, Control Hub authorization, and token generation.
50
+
51
+ Authorizations track which OAuth integrations and service apps have been granted access to a user or organization. The `authorizations` group lets admins audit and revoke these grants.
52
+
53
+ ### CLI Commands
54
+
55
+ #### service-apps
56
+
57
+ | Command | Description | Key Options |
58
+ |---------|-------------|-------------|
59
+ | `service-apps create` | Create a service app access token | `APPLICATION_ID` (arg), `--client-id`, `--client-secret`, `--target-org-id` (all required) |
60
+
61
+ #### authorizations
62
+
63
+ | Command | Description | Key Options |
64
+ |---------|-------------|-------------|
65
+ | `authorizations list` | List authorizations for a user | `--person-id`, `--person-email` |
66
+ | `authorizations show` | Get expiration status for the current token | (no required options) |
67
+ | `authorizations delete` | Delete all authorizations for a client ID in the org | `--client-id` (required), `--force` |
68
+ | `authorizations delete-authorizations` | Delete a specific authorization by ID | `AUTHORIZATION_ID` (arg), `--force` |
69
+
70
+ ### CLI Examples
71
+
72
+ ```bash
73
+ # Create a service app access token
74
+ wxcli service-apps create APP_ID_HERE \
75
+ --client-id "C1234567890abcdef" \
76
+ --client-secret "secret_here" \
77
+ --target-org-id "Y2lzY29zcGFyazovL3VzL09SR..."
78
+
79
+ # List authorizations for a specific user
80
+ wxcli authorizations list --person-email user@example.com
81
+
82
+ # Check token expiration status
83
+ wxcli authorizations show
84
+
85
+ # Revoke all authorizations for a client ID (destructive)
86
+ wxcli authorizations delete --client-id "C1234567890abcdef" --force
87
+
88
+ # Delete a specific authorization
89
+ wxcli authorizations delete-authorizations AUTH_ID_HERE --force
90
+ ```
91
+
92
+ ### Raw HTTP Fallback
93
+
94
+ #### Create Service App Token
95
+
96
+ ```
97
+ POST https://webexapis.com/v1/applications/{applicationId}/token
98
+ ```
99
+
100
+ ```bash
101
+ curl -X POST "https://webexapis.com/v1/applications/{applicationId}/token" \
102
+ -H "Authorization: Bearer $TOKEN" \
103
+ -H "Content-Type: application/json" \
104
+ -d '{
105
+ "clientId": "C1234567890abcdef",
106
+ "clientSecret": "secret_here",
107
+ "targetOrgId": "Y2lzY29zcGFyazovL3VzL09SR..."
108
+ }'
109
+ ```
110
+
111
+ #### List Authorizations
112
+
113
+ ```
114
+ GET https://webexapis.com/v1/authorizations?personEmail=user@example.com
115
+ ```
116
+
117
+ #### Delete Authorization by Client ID
118
+
119
+ ```
120
+ DELETE https://webexapis.com/v1/authorizations?clientId=C1234567890abcdef
121
+ ```
122
+
123
+ #### Get Token Expiration Status
124
+
125
+ ```
126
+ GET https://webexapis.com/v1/authorizations/tokenStatus
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 2. User Lifecycle
132
+
133
+ ### Overview
134
+
135
+ These groups manage user onboarding (activation emails), offboarding (archive lookup), and temporary guest accounts for Webex spaces.
136
+
137
+ The activation email job is an asynchronous bulk operation: you initiate it, then poll for status and errors. Archive users retrieves data for users who have been removed from the org. Guest management creates temporary identities for external participants.
138
+
139
+ ### CLI Commands
140
+
141
+ #### activation-email
142
+
143
+ | Command | Description | Key Options |
144
+ |---------|-------------|-------------|
145
+ | `activation-email create` | Initiate a bulk activation email resend job | `ORG_ID` (arg) |
146
+ | `activation-email list` | Get bulk job status | `ORG_ID` (arg), `JOB_ID` (arg) |
147
+ | `activation-email list-errors` | Get bulk job errors | `ORG_ID` (arg), `JOB_ID` (arg), `--max` |
148
+
149
+ #### archive-users
150
+
151
+ | Command | Description | Key Options |
152
+ |---------|-------------|-------------|
153
+ | `archive-users show` | Get archived user data | `ORG_ID` (arg), `USERUUID` (arg) |
154
+
155
+ #### guest-management
156
+
157
+ | Command | Description | Key Options |
158
+ |---------|-------------|-------------|
159
+ | `guest-management create` | Create a guest user | `--subject` (required), `--display-name` (required) |
160
+ | `guest-management list` | Get guest count for the org | (no required options) |
161
+
162
+ ### CLI Examples
163
+
164
+ ```bash
165
+ # Initiate bulk activation email resend
166
+ wxcli activation-email create "Y2lzY29zcGFyazovL3VzL09SR..."
167
+
168
+ # Poll for job status (use the jobId from the create response)
169
+ wxcli activation-email list "Y2lzY29zcGFyazovL3VzL09SR..." "JOB_ID_HERE"
170
+
171
+ # Check for errors in the job
172
+ wxcli activation-email list-errors "Y2lzY29zcGFyazovL3VzL09SR..." "JOB_ID_HERE"
173
+
174
+ # Look up an archived user
175
+ wxcli archive-users show "Y2lzY29zcGFyazovL3VzL09SR..." "USER_UUID_HERE"
176
+
177
+ # Create a guest
178
+ wxcli guest-management create \
179
+ --subject "ext-vendor-12345" \
180
+ --display-name "Jane Vendor"
181
+
182
+ # Get guest count
183
+ wxcli guest-management list
184
+ ```
185
+
186
+ ### Async Job Pattern (activation-email)
187
+
188
+ The activation email workflow follows the standard Webex async job pattern:
189
+
190
+ 1. **Initiate:** `activation-email create ORG_ID` returns a job ID.
191
+ 2. **Poll:** `activation-email list ORG_ID JOB_ID` until status shows completion.
192
+ 3. **Check errors:** `activation-email list-errors ORG_ID JOB_ID` to see which users failed.
193
+
194
+ This is the same pattern used by other bulk Webex operations (number management, user CSV import, etc.).
195
+
196
+ ### Raw HTTP Fallback
197
+
198
+ #### Initiate Bulk Activation Email
199
+
200
+ ```
201
+ POST https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail
202
+ ```
203
+
204
+ #### Get Job Status
205
+
206
+ ```
207
+ GET https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail/{jobId}
208
+ ```
209
+
210
+ #### Get Job Errors
211
+
212
+ ```
213
+ GET https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail/{jobId}/errors
214
+ ```
215
+
216
+ #### Get Archived User
217
+
218
+ ```
219
+ GET https://webexapis.com/v1/orgs/{orgId}/archivedUsers/{useruuid}
220
+ ```
221
+
222
+ #### Create Guest
223
+
224
+ ```
225
+ POST https://webexapis.com/v1/guests
226
+ Content-Type: application/json
227
+
228
+ {
229
+ "subject": "ext-vendor-12345",
230
+ "displayName": "Jane Vendor"
231
+ }
232
+ ```
233
+
234
+ #### Get Guest Count
235
+
236
+ ```
237
+ GET https://webexapis.com/v1/guests/count
238
+ ```
239
+
240
+ ---
241
+
242
+ ## 3. Recordings (Admin)
243
+
244
+ ### Overview
245
+
246
+ The `admin-recordings` group provides org-wide recording management for administrators and compliance officers. This covers listing, viewing details, soft-deleting (moving to recycle bin), restoring, permanently purging, sharing, and working with group recordings.
247
+
248
+ **Important distinction:** Both `admin-recordings` (admin spec) and `recordings` (calling spec) operate on the Webex recordings API. Use `admin-recordings` for org-wide admin and compliance operations: admin-scoped listing across all users, recycle bin management (move/restore/purge), and compliance officer access. Use `recordings` for user-scoped recording access. See [reporting-analytics.md](reporting-analytics.md) for CDR and call recording report details.
249
+
250
+ ### CLI Commands
251
+
252
+ #### Listing & Details
253
+
254
+ | Command | Description | Key Options |
255
+ |---------|-------------|-------------|
256
+ | `admin-recordings list` | List recordings (user scope) | `--from`, `--to`, `--meeting-id`, `--host-email`, `--site-url`, `--topic`, `--format` (MP4/ARF), `--service-type`, `--status` (available/deleted/purged) |
257
+ | `admin-recordings list-recordings-admin` | List recordings for an admin or compliance officer | `--from`, `--to`, `--meeting-id`, `--site-url`, `--topic`, `--format`, `--service-type`, `--status` |
258
+ | `admin-recordings show` | Get recording details | `RECORDING_ID` (arg), `--host-email` |
259
+ | `admin-recordings list-recordings-group` | List group recordings | `--person-id`, `--from`, `--to`, `--site-url`, `--topic`, `--format`, `--service-type` |
260
+ | `admin-recordings show-recordings` | Get group recording details | `RECORDING_ID` (arg), `--person-id` |
261
+
262
+ #### Lifecycle Management
263
+
264
+ | Command | Description | Key Options |
265
+ |---------|-------------|-------------|
266
+ | `admin-recordings create` | Move recordings into the recycle bin (soft-delete) | `--host-email`, `--site-url`, `--json-body` |
267
+ | `admin-recordings create-restore` | Restore recordings from recycle bin | `--host-email`, `--restore-all/--no-restore-all`, `--site-url`, `--json-body` |
268
+ | `admin-recordings create-purge` | Permanently purge recordings from recycle bin | `--host-email`, `--purge-all/--no-purge-all`, `--site-url`, `--json-body` |
269
+ | `admin-recordings delete` | Delete a recording by admin (hard delete) | `RECORDING_ID` (arg), `--force` |
270
+ | `admin-recordings delete-recordings` | Delete a recording (with host-email context) | `RECORDING_ID` (arg), `--host-email`, `--force` |
271
+
272
+ #### Sharing
273
+
274
+ | Command | Description | Key Options |
275
+ |---------|-------------|-------------|
276
+ | `admin-recordings create-access-list-recordings` | Share a recording by ID | `RECORDING_ID` (arg), `--host-email`, `--send-email/--no-send-email`, `--json-body` |
277
+ | `admin-recordings create-access-list-recordings-1` | Share a recording by link | `--host-email`, `--web-share-link`, `--send-email/--no-send-email`, `--json-body` |
278
+
279
+ ### CLI Examples
280
+
281
+ ```bash
282
+ # List all recordings for compliance (admin-scoped, last 30 days)
283
+ wxcli admin-recordings list-recordings-admin \
284
+ --from "2026-02-17T00:00:00Z" \
285
+ --to "2026-03-19T00:00:00Z" \
286
+ --status available
287
+
288
+ # List recordings for a specific host
289
+ wxcli admin-recordings list --host-email user@example.com
290
+
291
+ # Get recording details
292
+ wxcli admin-recordings show RECORDING_ID_HERE
293
+
294
+ # Soft-delete recordings to recycle bin (requires JSON body with recording IDs)
295
+ wxcli admin-recordings create \
296
+ --host-email user@example.com \
297
+ --json-body '{"recordingIds": ["rec_id_1", "rec_id_2"]}'
298
+
299
+ # Restore all recordings from recycle bin for a host
300
+ wxcli admin-recordings create-restore \
301
+ --host-email user@example.com \
302
+ --restore-all
303
+
304
+ # Permanently purge all recycle bin recordings for a host
305
+ wxcli admin-recordings create-purge \
306
+ --host-email user@example.com \
307
+ --purge-all
308
+
309
+ # Hard-delete a specific recording (admin)
310
+ wxcli admin-recordings delete RECORDING_ID_HERE --force
311
+
312
+ # Share a recording with email notification
313
+ wxcli admin-recordings create-access-list-recordings RECORDING_ID_HERE \
314
+ --host-email host@example.com \
315
+ --send-email \
316
+ --json-body '{"accessList": [{"email": "recipient@example.com", "displayName": "Recipient"}]}'
317
+
318
+ # List group recordings for a person
319
+ wxcli admin-recordings list-recordings-group --person-id PERSON_ID_HERE
320
+ ```
321
+
322
+ ### Recording Lifecycle States
323
+
324
+ Recordings move through three states:
325
+
326
+ | State | Description | Recoverable? |
327
+ |-------|-------------|--------------|
328
+ | `available` | Active, accessible recording | N/A |
329
+ | `deleted` | In the recycle bin (soft-deleted) | Yes, via `create-restore` |
330
+ | `purged` | Permanently deleted from recycle bin | No |
331
+
332
+ Use `--status` on list commands to filter by state.
333
+
334
+ ### Raw HTTP Fallback
335
+
336
+ #### List Recordings (Admin/Compliance)
337
+
338
+ ```
339
+ GET https://webexapis.com/v1/admin/recordings?from=2026-02-17T00:00:00Z&to=2026-03-19T00:00:00Z&status=available
340
+ ```
341
+
342
+ #### Move to Recycle Bin
343
+
344
+ ```
345
+ POST https://webexapis.com/v1/recordings/softDelete
346
+ Content-Type: application/json
347
+
348
+ {
349
+ "hostEmail": "user@example.com",
350
+ "recordingIds": ["rec_id_1", "rec_id_2"]
351
+ }
352
+ ```
353
+
354
+ #### Restore from Recycle Bin
355
+
356
+ ```
357
+ POST https://webexapis.com/v1/recordings/restore
358
+ Content-Type: application/json
359
+
360
+ {
361
+ "hostEmail": "user@example.com",
362
+ "restoreAll": true
363
+ }
364
+ ```
365
+
366
+ #### Purge from Recycle Bin
367
+
368
+ ```
369
+ POST https://webexapis.com/v1/recordings/purge
370
+ Content-Type: application/json
371
+
372
+ {
373
+ "hostEmail": "user@example.com",
374
+ "purgeAll": true
375
+ }
376
+ ```
377
+
378
+ #### Delete Recording (Admin)
379
+
380
+ ```
381
+ DELETE https://webexapis.com/v1/admin/recordings/{recordingId}
382
+ ```
383
+
384
+ #### Share a Recording
385
+
386
+ ```
387
+ POST https://webexapis.com/v1/recordings/{recordingId}/accessList
388
+ Content-Type: application/json
389
+
390
+ {
391
+ "hostEmail": "host@example.com",
392
+ "sendEmail": true,
393
+ "accessList": [{"email": "recipient@example.com", "displayName": "Recipient"}]
394
+ }
395
+ ```
396
+
397
+ #### Share by Link
398
+
399
+ ```
400
+ POST https://webexapis.com/v1/recordings/shareLink
401
+ Content-Type: application/json
402
+
403
+ {
404
+ "webShareLink": "https://site.webex.com/...",
405
+ "sendEmail": true
406
+ }
407
+ ```
408
+
409
+ ---
410
+
411
+ ## 4. Data & Compliance
412
+
413
+ ### Overview
414
+
415
+ This section covers data exchange infrastructure (data sources), content classification (space classifications), hybrid services resource allocation (resource groups and memberships), and report template discovery.
416
+
417
+ Data sources define endpoints where Webex sends data via JWT-authenticated webhooks. Resource groups control how hybrid services (calendar, calling, messaging) are distributed across on-premises connector clusters. Classifications label Webex spaces for data loss prevention (DLP) policy enforcement.
418
+
419
+ ### CLI Commands
420
+
421
+ #### data-sources
422
+
423
+ | Command | Description | Key Options |
424
+ |---------|-------------|-------------|
425
+ | `data-sources create` | Register a new data source | `--audience`, `--nonce`, `--schema-id`, `--subject`, `--token-lifetime-minutes`, `--url` |
426
+ | `data-sources list` | List all data sources | (no required options) |
427
+ | `data-sources list-schemas` | List available data source schemas | (no required options) |
428
+ | `data-sources show` | Get details of a specific schema | `SCHEMA_ID` (arg) |
429
+ | `data-sources show-data-sources` | Get details of a specific data source | `DATA_SOURCE_ID` (arg) |
430
+ | `data-sources update` | Update a data source | `DATA_SOURCE_ID` (arg), `--audience`, `--nonce`, `--schema-id`, `--subject`, `--token-lifetime-minutes`, `--url`, `--status`, `--error-message` |
431
+ | `data-sources delete` | Delete a data source | `DATA_SOURCE_ID` (arg), `--force` |
432
+
433
+ #### classifications
434
+
435
+ | Command | Description | Key Options |
436
+ |---------|-------------|-------------|
437
+ | `classifications list` | List space classifications for the org | (no required options) |
438
+
439
+ #### resource-groups
440
+
441
+ | Command | Description | Key Options |
442
+ |---------|-------------|-------------|
443
+ | `resource-groups list` | List resource groups | (no required options) |
444
+ | `resource-groups show` | Get resource group details | `RESOURCE_GROUP_ID` (arg) |
445
+
446
+ #### resource-group-memberships
447
+
448
+ | Command | Description | Key Options |
449
+ |---------|-------------|-------------|
450
+ | `resource-group-memberships list` | List memberships | `--license-id`, `--person-id`, `--person-org-id`, `--status` (pending/activated/error) |
451
+ | `resource-group-memberships list-v2` | List memberships (v2, with type filter) | `--license-id`, `--id`, `--status`, `--type` (User/Workspace) |
452
+ | `resource-group-memberships show` | Get membership details | `RESOURCE_GROUP_MEMBERSHIP_ID` (arg) |
453
+ | `resource-group-memberships update` | Update a membership | `RESOURCE_GROUP_MEMBERSHIP_ID` (arg), `--resource-group-id`, `--license-id`, `--person-id`, `--person-org-id`, `--status` |
454
+
455
+ #### report-templates
456
+
457
+ | Command | Description | Key Options |
458
+ |---------|-------------|-------------|
459
+ | `report-templates show` | List available report templates | (no required options) |
460
+
461
+ ### CLI Examples
462
+
463
+ ```bash
464
+ # List available data source schemas
465
+ wxcli data-sources list-schemas
466
+
467
+ # Register a new data source
468
+ wxcli data-sources create \
469
+ --schema-id "SCHEMA_ID_HERE" \
470
+ --url "https://myapp.example.com/webhook" \
471
+ --audience "my-app" \
472
+ --subject "data-feed" \
473
+ --nonce "unique-nonce-value" \
474
+ --token-lifetime-minutes "60"
475
+
476
+ # List all registered data sources
477
+ wxcli data-sources list
478
+
479
+ # Get data source details
480
+ wxcli data-sources show-data-sources DS_ID_HERE
481
+
482
+ # Update a data source (disable it)
483
+ wxcli data-sources update DS_ID_HERE --status "disabled" --error-message "Maintenance window"
484
+
485
+ # Delete a data source
486
+ wxcli data-sources delete DS_ID_HERE --force
487
+
488
+ # List space classifications
489
+ wxcli classifications list
490
+
491
+ # List resource groups
492
+ wxcli resource-groups list
493
+
494
+ # Get resource group details
495
+ wxcli resource-groups show RG_ID_HERE
496
+
497
+ # List resource group memberships filtered by status
498
+ wxcli resource-group-memberships list --status activated
499
+
500
+ # List v2 memberships filtered by type
501
+ wxcli resource-group-memberships list-v2 --type User --status activated
502
+
503
+ # Move a user to a different resource group
504
+ wxcli resource-group-memberships update MEMBERSHIP_ID_HERE \
505
+ --resource-group-id "NEW_RG_ID" \
506
+ --status activated
507
+
508
+ # List available report templates
509
+ wxcli report-templates show
510
+ ```
511
+
512
+ ### Data Source Registration Flow
513
+
514
+ 1. **Discover schemas:** `data-sources list-schemas` to find the schema ID for the data type you want (e.g., CDR events, compliance events).
515
+ 2. **Register:** `data-sources create` with the schema ID, your webhook URL, and JWT parameters.
516
+ 3. **Verify:** `data-sources show-data-sources DS_ID` to confirm registration and check status.
517
+ 4. **Maintain:** `data-sources update DS_ID --status disabled` to pause, or `data-sources delete DS_ID` to remove.
518
+
519
+ ### Resource Group Assignment Flow
520
+
521
+ Resource groups are used in hybrid services deployments to control which on-premises cluster handles which users:
522
+
523
+ 1. **List groups:** `resource-groups list` to see available clusters.
524
+ 2. **Check memberships:** `resource-group-memberships list --license-id LICENSE_ID` to see current assignments.
525
+ 3. **Reassign:** `resource-group-memberships update MEMBERSHIP_ID --resource-group-id NEW_GROUP_ID` to move a user to a different cluster.
526
+
527
+ ### Raw HTTP Fallback
528
+
529
+ #### Data Sources
530
+
531
+ ```
532
+ # List schemas
533
+ GET https://webexapis.com/v1/dataSources/schemas
534
+
535
+ # Get schema details
536
+ GET https://webexapis.com/v1/dataSources/schemas/{schemaId}
537
+
538
+ # List all data sources
539
+ GET https://webexapis.com/v1/dataSources
540
+
541
+ # Get data source details
542
+ GET https://webexapis.com/v1/dataSources/{dataSourceId}
543
+
544
+ # Register data source
545
+ POST https://webexapis.com/v1/dataSources
546
+ Content-Type: application/json
547
+
548
+ {
549
+ "schemaId": "schema_id",
550
+ "url": "https://myapp.example.com/webhook",
551
+ "audience": "my-app",
552
+ "subject": "data-feed",
553
+ "nonce": "unique-nonce-value",
554
+ "tokenLifetimeMinutes": 60
555
+ }
556
+
557
+ # Update data source
558
+ PUT https://webexapis.com/v1/dataSources/{dataSourceId}
559
+
560
+ # Delete data source
561
+ DELETE https://webexapis.com/v1/dataSources/{dataSourceId}
562
+ ```
563
+
564
+ #### Classifications
565
+
566
+ ```
567
+ GET https://webexapis.com/v1/classifications
568
+ ```
569
+
570
+ #### Resource Groups
571
+
572
+ ```
573
+ # List resource groups
574
+ GET https://webexapis.com/v1/resourceGroups
575
+
576
+ # Get resource group details
577
+ GET https://webexapis.com/v1/resourceGroups/{resourceGroupId}
578
+ ```
579
+
580
+ #### Resource Group Memberships
581
+
582
+ ```
583
+ # List memberships
584
+ GET https://webexapis.com/v1/resourceGroup/memberships?status=activated
585
+
586
+ # List memberships v2
587
+ GET https://webexapis.com/v1/resourceGroup/memberships/v2?type=User&status=activated
588
+
589
+ # Get membership details
590
+ GET https://webexapis.com/v1/resourceGroup/memberships/{resourceGroupMembershipId}
591
+
592
+ # Update membership
593
+ PUT https://webexapis.com/v1/resourceGroup/memberships/{resourceGroupMembershipId}
594
+ Content-Type: application/json
595
+
596
+ {
597
+ "resourceGroupId": "new_group_id",
598
+ "licenseId": "license_id",
599
+ "personId": "person_id",
600
+ "personOrgId": "org_id",
601
+ "status": "activated"
602
+ }
603
+ ```
604
+
605
+ #### Report Templates
606
+
607
+ ```
608
+ GET https://webexapis.com/v1/report/templates
609
+ ```
610
+
611
+ For calling-specific report creation and download, see [reporting-analytics.md](reporting-analytics.md).
612
+
613
+ ---
614
+
615
+ ## Gotchas
616
+
617
+ 1. **`activation-email create` is an async job.** The response returns a job ID, not immediate confirmation. You must poll with `activation-email list` until the job completes, then check `activation-email list-errors` for failures. There is no webhook notification for job completion.
618
+
619
+ 2. **`authorizations delete` is destructive and org-wide.** It revokes ALL authorizations for the given client ID across the entire organization. There is no undo. Always use `authorizations list` first to understand the blast radius before deleting.
620
+
621
+ 3. **Service app tokens are short-lived.** The token returned by `service-apps create` expires quickly (typically minutes, not hours). Your automation must handle token refresh by calling `service-apps create` again before expiration. The admin must have pre-authorized the service app in Control Hub -- the CLI cannot perform that step.
622
+
623
+ 4. **Client secret and refresh token are shown only once.** When registering a service app on developer.webex.com, the client secret is displayed only at creation time. Similarly, when generating tokens after admin authorization, the refresh token is shown only once. Copy both immediately and store securely. If lost, you must regenerate credentials (client secret) or re-authorize and generate new tokens (refresh token).
624
+
625
+ 5. **`admin-recordings create` is a soft-delete, not a true create.** Despite the command name (`create` maps to POST), this moves recordings into the recycle bin. It does not create a recording. The `--json-body` must include the `recordingIds` array. Similarly, `create-restore` and `create-purge` are POST operations that restore from or permanently delete the recycle bin.
626
+
627
+ 6. **Two delete commands for recordings.** `admin-recordings delete` (admin hard-delete by recording ID) vs `admin-recordings delete-recordings` (delete with host-email context). The former is admin-only; the latter can specify a host email for user-context deletion.
628
+
629
+ 7. **`report-templates show` actually lists templates.** The command is named `show` (maps to GET on a list endpoint) but returns all available report templates, not a single template. Use this to discover template IDs, then use `reports` commands from the calling spec to create and download reports.
630
+
631
+ 8. **Data source `--token-lifetime-minutes` controls JWT expiry.** The token Webex creates for authenticating to your webhook URL expires after this many minutes. Set it long enough to avoid gaps in data delivery, but short enough for security. Must be refreshed before expiration by updating the data source.
632
+
633
+ 9. **Resource group memberships v1 vs v2.** `list-v2` adds the `--type` filter (User/Workspace) and `--id` filter that v1 lacks. Prefer `list-v2` for new implementations.
634
+
635
+ 10. **`admin-recordings list` vs `list-recordings-admin`.** Both list recordings, but `list` is user-scoped (uses `--host-email`) while `list-recordings-admin` is admin/compliance-scoped (searches across all users in the org without requiring a host email).
636
+
637
+ ---
638
+
639
+ ## See Also
640
+
641
+ - **[reporting-analytics.md](reporting-analytics.md)** -- CDR, report creation/download, call quality metrics, and queue/AA statistics. The `report-templates show` command here discovers template IDs; use `reports` commands from that doc to create and download reports.
642
+ - **[authentication.md](authentication.md)** -- OAuth flows, service app authorization, token scopes. Service apps require admin pre-authorization in Control Hub before `service-apps create` can issue tokens.
643
+ - **[webhooks-events.md](webhooks-events.md)** -- Webhook event subscriptions. Data sources are a different mechanism (JWT-authenticated push to your endpoint) but serve a similar purpose of delivering Webex data to external systems.