twentythree-skills 1.0.0

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.
@@ -0,0 +1,1371 @@
1
+ ---
2
+ name: webinar
3
+ description: Create and manage live webinars (linked to API /live/*) — configure sessions, speakers, agenda, attachments, recordings, transcriptions, mail, and series.
4
+ ---
5
+
6
+ # TwentyThree Webinar Commands
7
+
8
+ > Webinars are live broadcast events. Every example uses `--json` for machine-readable output.
9
+ > CLI `webinar` maps to API `live` — see Terminology Notes at the bottom of this file.
10
+
11
+ > **There is no `webinar get` command.** To retrieve details for a specific webinar,
12
+ > use `twentythree webinar list --search "<title>" --json` or filter by status/ID client-side.
13
+ > The API does not expose a single-record GET; list + filter is the canonical pattern.
14
+
15
+ ## Prerequisites
16
+
17
+ Auth scope varies: **read** (list, metrics, clips, highlights, log, list-formats, recording status, most subtopic list commands), **write** (create, update, delete, repeat, upload-image, recording start/stop/split, speaker/series/mail/section/attachment/queued-video/transcription writes).
18
+ Run `twentythree auth credentials` if not already configured.
19
+ Verify: `twentythree auth status --json`
20
+
21
+ > For any flag not listed here, run `twentythree webinar <cmd> --agent` to get the complete flag list, types, and defaults.
22
+
23
+ ## Commands
24
+
25
+ ### webinar create
26
+
27
+ **Auth scope:** write **Side effects:** creates **Output:** key-value (id + admin_url)
28
+
29
+ After create, the CLI prints the new webinar ID and its admin URL. Capture `data.id` and `data.admin_url` from the `--json` response.
30
+
31
+ | Flag | Required | Default | Description |
32
+ |------|----------|---------|-------------|
33
+ | `--title` | yes | — | Title for the new webinar |
34
+ | `--description` | no | — | Description for the webinar |
35
+ | `--status` | no | — | Webinar status: `upcoming`, `live`, or `previous` |
36
+ | `--live-date` | no | — | Schedule date/time (ISO 8601) |
37
+ | `--draft` | no | false | Set as draft |
38
+ | `--publish` | no | false | Publish the webinar |
39
+
40
+ ```bash
41
+ # Create a basic upcoming webinar
42
+ twentythree webinar create --title "Q2 Town Hall" --json
43
+ # => { "data": { "id": "<webinar-id>", "admin_url": "..." } }
44
+
45
+ # Create and schedule with a live date
46
+ twentythree webinar create --title "Product Launch" --live-date "2026-05-15T16:00:00Z" --description "Our biggest product release yet" --json
47
+ ```
48
+
49
+ ---
50
+
51
+ ### webinar list
52
+
53
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Title, Status, Date, Private)
54
+
55
+ | Flag | Required | Default | Description |
56
+ |------|----------|---------|-------------|
57
+ | `--limit` | no | 20 | Maximum number of webinars to return |
58
+ | `--all` | no | false | Fetch all webinars across all pages (overrides --limit) |
59
+ | `--include-private` | no | false | Include private webinars in results |
60
+ | `--status` | no | — | Filter by status: `upcoming`, `live`, or `previous` |
61
+ | `--search` | no | — | Search webinars by keyword |
62
+
63
+ ```bash
64
+ # List upcoming webinars
65
+ twentythree webinar list --status upcoming --json
66
+
67
+ # Search for a webinar by title and include private
68
+ twentythree webinar list --search "Q2 Town Hall" --include-private --json
69
+ ```
70
+
71
+ ---
72
+
73
+ ### webinar update
74
+
75
+ **Auth scope:** write **Side effects:** updates **Output:** key-value
76
+
77
+ | Flag | Required | Default | Description |
78
+ |------|----------|---------|-------------|
79
+ | `--title` | no | — | New title for the webinar |
80
+ | `--description` | no | — | New description for the webinar |
81
+ | `--status` | no | — | Webinar status: `upcoming`, `live`, or `previous` |
82
+ | `--live-date` | no | — | Schedule date/time (ISO 8601) |
83
+ | `--draft` | no | — | Set as draft |
84
+ | `--publish` | no | — | Publish or unpublish the webinar |
85
+
86
+ ```bash
87
+ # Update title and description
88
+ twentythree webinar update <id> --title "New Title" --description "Updated description" --json
89
+
90
+ # Publish a draft webinar
91
+ twentythree webinar update <id> --publish --json
92
+ ```
93
+
94
+ ---
95
+
96
+ ### webinar delete
97
+
98
+ **Auth scope:** write **Side effects:** destructive **Output:** none
99
+
100
+ > **Warning: This action is destructive and cannot be undone.** The webinar and all associated data (recordings, speakers, mail, analytics) are permanently deleted from the workspace.
101
+
102
+ No additional flags — pass the webinar ID as a positional argument.
103
+
104
+ ```bash
105
+ # Delete a webinar (destructive — cannot be undone)
106
+ twentythree webinar delete <id> --json
107
+
108
+ # Example with a real ID
109
+ twentythree webinar delete 12345 --json
110
+ ```
111
+
112
+ ---
113
+
114
+ ### webinar repeat
115
+
116
+ **Auth scope:** write **Side effects:** creates **Output:** key-value (id + admin_url)
117
+
118
+ Duplicates a webinar and schedules the copy at a new date/time. After repeat, the CLI prints the new webinar ID and its admin URL.
119
+
120
+ | Flag | Required | Default | Description |
121
+ |------|----------|---------|-------------|
122
+ | `--date` | yes | — | Schedule date/time for the new webinar (ISO 8601) |
123
+
124
+ ```bash
125
+ # Schedule a repeat of a webinar
126
+ twentythree webinar repeat <id> --date "2026-06-01T16:00:00Z" --json
127
+ # => { "data": { "id": "<new-webinar-id>", "admin_url": "..." } }
128
+
129
+ # Schedule a weekly repeat
130
+ twentythree webinar repeat <id> --date "2026-05-22T16:00:00Z" --json
131
+ ```
132
+
133
+ ---
134
+
135
+ ### webinar metrics
136
+
137
+ **Auth scope:** read **Side effects:** none **Output:** table (Metric, Value)
138
+
139
+ No additional flags — pass the webinar ID as a positional argument.
140
+
141
+ ```bash
142
+ # Get metrics for a webinar
143
+ twentythree webinar metrics <id> --json
144
+
145
+ # Example with a real ID
146
+ twentythree webinar metrics 12345 --json
147
+ ```
148
+
149
+ ---
150
+
151
+ ### webinar clips
152
+
153
+ **Auth scope:** read **Side effects:** none **Output:** table (Video ID, Title, Duration, Type, Published, Views)
154
+
155
+ Clips become available after `webinar recording stop` — allow time for recording processing before calling this command.
156
+
157
+ No additional flags — pass the webinar ID as a positional argument.
158
+
159
+ ```bash
160
+ # List clips from a recorded webinar
161
+ twentythree webinar clips <id> --json
162
+
163
+ # Example with a real ID
164
+ twentythree webinar clips 12345 --json
165
+ ```
166
+
167
+ ---
168
+
169
+ ### webinar highlights
170
+
171
+ **Auth scope:** read **Side effects:** none **Output:** table (Type, Start, End, Absolute Start)
172
+
173
+ | Flag | Required | Default | Description |
174
+ |------|----------|---------|-------------|
175
+ | `--video-id` | no | — | Scope to a specific recording by video ID |
176
+
177
+ ```bash
178
+ # List all highlights for a webinar
179
+ twentythree webinar highlights <id> --json
180
+
181
+ # Scope highlights to a specific recording clip
182
+ twentythree webinar highlights <id> --video-id <video-id> --json
183
+ ```
184
+
185
+ ---
186
+
187
+ ### webinar log
188
+
189
+ **Auth scope:** read **Side effects:** none **Output:** table (Event, Start, End)
190
+
191
+ Returns the event log (chat/questions/registrations timeline) for a webinar.
192
+
193
+ No additional flags — pass the webinar ID as a positional argument.
194
+
195
+ ```bash
196
+ # Retrieve the event log
197
+ twentythree webinar log <id> --json
198
+
199
+ # Example with a real ID
200
+ twentythree webinar log 12345 --json
201
+ ```
202
+
203
+ ---
204
+
205
+ ### webinar list-formats
206
+
207
+ **Auth scope:** read **Side effects:** none **Output:** table (Key, Name)
208
+
209
+ No additional flags.
210
+
211
+ ```bash
212
+ # List available webinar formats
213
+ twentythree webinar list-formats --json
214
+
215
+ # Use the Key value when creating or updating webinar format settings
216
+ twentythree webinar list-formats --json
217
+ ```
218
+
219
+ ---
220
+
221
+ ### webinar upload-image
222
+
223
+ **Auth scope:** write **Side effects:** creates **Output:** none
224
+
225
+ > **Chunked upload is automatic.** `twentythree webinar upload-image <id> <file>` handles chunking internally.
226
+ > `--chunk-size` (default 5 MB) and `--concurrency` (default 5) are tunables.
227
+
228
+ | Flag | Required | Default | Description |
229
+ |------|----------|---------|-------------|
230
+ | `--type` | no | thumbnail | Image type: `thumbnail`, `preview`, or `before_webinar` |
231
+ | `--chunk-size` | no | 5242880 | Chunk size in bytes (default: 5 MB) |
232
+ | `--concurrency` | no | 5 | Number of chunks to upload in parallel |
233
+
234
+ ```bash
235
+ # Upload a thumbnail image
236
+ twentythree webinar upload-image <id> ./thumb.jpg --json
237
+
238
+ # Upload a before-webinar image with custom type
239
+ twentythree webinar upload-image <id> ./before.jpg --type before_webinar --json
240
+ ```
241
+
242
+ ---
243
+
244
+ ## Subtopic: webinar speaker
245
+
246
+ Speakers are presenters attached to a webinar. Commands cover list, add, update, remove, invite, and speaker-specific settings.
247
+
248
+ ### webinar speaker list
249
+
250
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Email, Role, Order)
251
+
252
+ | Flag | Required | Default | Description |
253
+ |------|----------|---------|-------------|
254
+ | `--token` | no | — | Webinar token (auto-looked up if omitted) |
255
+
256
+ ```bash
257
+ # List speakers for a webinar
258
+ twentythree webinar speaker list <id> --json
259
+
260
+ # Example with a real ID
261
+ twentythree webinar speaker list 12345 --json
262
+ ```
263
+
264
+ ---
265
+
266
+ ### webinar speaker add
267
+
268
+ **Auth scope:** write **Side effects:** creates **Output:** key-value
269
+
270
+ | Flag | Required | Default | Description |
271
+ |------|----------|---------|-------------|
272
+ | `--name` | no | — | Speaker name |
273
+ | `--email` | no | — | Speaker email |
274
+ | `--title` | no | — | Speaker title or job title |
275
+ | `--description` | no | — | Speaker bio or description |
276
+
277
+ ```bash
278
+ # Add a speaker with name and email
279
+ twentythree webinar speaker add <id> --name "Jane Doe" --email jane@example.com --json
280
+
281
+ # Add a speaker with full details
282
+ twentythree webinar speaker add <id> --name "John Smith" --email john@example.com --title "CTO" --description "Engineering lead" --json
283
+ ```
284
+
285
+ ---
286
+
287
+ ### webinar speaker add-from-speaker
288
+
289
+ **Auth scope:** write **Side effects:** creates **Output:** none
290
+
291
+ Adds a speaker from the workspace speaker library.
292
+
293
+ | Flag | Required | Default | Description |
294
+ |------|----------|---------|-------------|
295
+ | `--speaker-id` | no | — | Library speaker ID to add |
296
+
297
+ ```bash
298
+ # Add a speaker from the workspace library by ID
299
+ twentythree webinar speaker add-from-speaker <id> --speaker-id 99 --json
300
+
301
+ # First list library speakers to find the ID
302
+ twentythree webinar speaker library --json
303
+ ```
304
+
305
+ ---
306
+
307
+ ### webinar speaker add-from-user
308
+
309
+ **Auth scope:** write **Side effects:** creates **Output:** none
310
+
311
+ Adds a workspace user as a speaker on a webinar.
312
+
313
+ | Flag | Required | Default | Description |
314
+ |------|----------|---------|-------------|
315
+ | `--user-id` | no | — | User ID to add as speaker |
316
+
317
+ ```bash
318
+ # Add a workspace user as a speaker
319
+ twentythree webinar speaker add-from-user <id> --user-id 42 --json
320
+
321
+ # First list workspace users to find the user ID
322
+ twentythree webinar speaker add-from-user <id> --user-id <user-id> --json
323
+ ```
324
+
325
+ ---
326
+
327
+ ### webinar speaker update
328
+
329
+ **Auth scope:** write **Side effects:** updates **Output:** none
330
+
331
+ | Flag | Required | Default | Description |
332
+ |------|----------|---------|-------------|
333
+ | `--name` | no | — | Speaker name |
334
+ | `--email` | no | — | Speaker email |
335
+ | `--title` | no | — | Speaker title or job title |
336
+ | `--description` | no | — | Speaker bio or description |
337
+
338
+ ```bash
339
+ # Update a speaker's title and email
340
+ twentythree webinar speaker update <id> <speaker-id> --title "CEO" --email ceo@example.com --json
341
+
342
+ # Update speaker bio
343
+ twentythree webinar speaker update <id> <speaker-id> --description "Updated bio" --json
344
+ ```
345
+
346
+ ---
347
+
348
+ ### webinar speaker remove
349
+
350
+ **Auth scope:** write **Side effects:** destructive **Output:** none
351
+
352
+ No additional flags — pass webinar ID and speaker ID as positional arguments.
353
+
354
+ ```bash
355
+ # Remove a speaker from a webinar
356
+ twentythree webinar speaker remove <id> <speaker-id> --json
357
+
358
+ # Example with real IDs
359
+ twentythree webinar speaker remove 12345 9900 --json
360
+ ```
361
+
362
+ ---
363
+
364
+ ### webinar speaker set-avatar
365
+
366
+ **Auth scope:** write **Side effects:** updates **Output:** none
367
+
368
+ Uploads an avatar image for a speaker. Chunked upload is automatic.
369
+
370
+ | Flag | Required | Default | Description |
371
+ |------|----------|---------|-------------|
372
+ | `--chunk-size` | no | 5242880 | Chunk size in bytes (default: 5 MB) |
373
+ | `--concurrency` | no | 5 | Number of chunks to upload in parallel |
374
+
375
+ ```bash
376
+ # Upload an avatar image for a speaker
377
+ twentythree webinar speaker set-avatar <id> <speaker-id> ./avatar.jpg --json
378
+
379
+ # Upload with custom chunk size
380
+ twentythree webinar speaker set-avatar <id> <speaker-id> ./avatar.png --chunk-size 524288 --json
381
+ ```
382
+
383
+ ---
384
+
385
+ ### webinar speaker remove-avatar
386
+
387
+ **Auth scope:** write **Side effects:** destructive **Output:** none
388
+
389
+ No additional flags — pass webinar ID and speaker ID as positional arguments.
390
+
391
+ ```bash
392
+ # Remove the avatar image from a speaker
393
+ twentythree webinar speaker remove-avatar <id> <speaker-id> --json
394
+
395
+ # Example with real IDs
396
+ twentythree webinar speaker remove-avatar 12345 9900 --json
397
+ ```
398
+
399
+ ---
400
+
401
+ ### webinar speaker set-order
402
+
403
+ **Auth scope:** write **Side effects:** updates **Output:** none
404
+
405
+ | Flag | Required | Default | Description |
406
+ |------|----------|---------|-------------|
407
+ | `--speaker-id` | no | — | Speaker ID |
408
+ | `--order` | no | — | New display order (1-based) |
409
+
410
+ ```bash
411
+ # Set a speaker to appear first
412
+ twentythree webinar speaker set-order <id> --speaker-id <speaker-id> --order 1 --json
413
+
414
+ # Set a speaker to appear third
415
+ twentythree webinar speaker set-order <id> --speaker-id <speaker-id> --order 3 --json
416
+ ```
417
+
418
+ ---
419
+
420
+ ### webinar speaker send-invitation
421
+
422
+ **Auth scope:** write **Side effects:** updates **Output:** none
423
+
424
+ No additional flags — pass webinar ID and speaker ID as positional arguments.
425
+
426
+ ```bash
427
+ # Send an invitation to a speaker
428
+ twentythree webinar speaker send-invitation <id> <speaker-id> --json
429
+
430
+ # Example with real IDs
431
+ twentythree webinar speaker send-invitation 12345 9900 --json
432
+ ```
433
+
434
+ ---
435
+
436
+ ### webinar speaker library
437
+
438
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Email)
439
+
440
+ No additional flags.
441
+
442
+ ```bash
443
+ # List speakers in the workspace library
444
+ twentythree webinar speaker library --json
445
+
446
+ # Use to find speaker IDs for add-from-speaker
447
+ twentythree webinar speaker library --json
448
+ ```
449
+
450
+ ---
451
+
452
+ ### webinar speaker connection-types
453
+
454
+ **Auth scope:** read **Side effects:** none **Output:** table (Type, Label, Description)
455
+
456
+ No additional flags — pass the webinar ID as a positional argument.
457
+
458
+ ```bash
459
+ # List available speaker connection types
460
+ twentythree webinar speaker connection-types <id> --json
461
+
462
+ # Example with a real ID
463
+ twentythree webinar speaker connection-types 12345 --json
464
+ ```
465
+
466
+ ---
467
+
468
+ ### webinar speaker request-guest
469
+
470
+ **Auth scope:** write **Side effects:** creates **Output:** none
471
+
472
+ No additional flags — pass webinar ID and speaker ID as positional arguments.
473
+
474
+ ```bash
475
+ # Request a speaker as a guest
476
+ twentythree webinar speaker request-guest <id> <speaker-id> --json
477
+
478
+ # Example with real IDs
479
+ twentythree webinar speaker request-guest 12345 9900 --json
480
+ ```
481
+
482
+ ---
483
+
484
+ ### webinar speaker cancel-guest-request
485
+
486
+ **Auth scope:** write **Side effects:** destructive **Output:** none
487
+
488
+ No additional flags — pass webinar ID and speaker ID as positional arguments.
489
+
490
+ ```bash
491
+ # Cancel a guest request for a speaker
492
+ twentythree webinar speaker cancel-guest-request <id> <speaker-id> --json
493
+
494
+ # Example with real IDs
495
+ twentythree webinar speaker cancel-guest-request 12345 9900 --json
496
+ ```
497
+
498
+ ---
499
+
500
+ ## Subtopic: webinar series
501
+
502
+ A series groups multiple webinars together (e.g. a recurring show). Commands cover list, create, update, delete, and attaching webinars to a series.
503
+
504
+ ### webinar series list
505
+
506
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Status, Created)
507
+
508
+ No additional flags.
509
+
510
+ ```bash
511
+ # List all webinar series
512
+ twentythree webinar series list --json
513
+
514
+ # Use the ID to reference a series in other commands
515
+ twentythree webinar series list --json
516
+ ```
517
+
518
+ ---
519
+
520
+ ### webinar series create
521
+
522
+ **Auth scope:** write **Side effects:** creates **Output:** key-value
523
+
524
+ | Flag | Required | Default | Description |
525
+ |------|----------|---------|-------------|
526
+ | `--name` | no | — | Series name |
527
+ | `--description` | no | — | Series description |
528
+
529
+ ```bash
530
+ # Create a new webinar series
531
+ twentythree webinar series create --name "Weekly Product Updates" --json
532
+
533
+ # Create with description
534
+ twentythree webinar series create --name "Q2 Webinars" --description "All Q2 sessions" --json
535
+ ```
536
+
537
+ ---
538
+
539
+ ### webinar series update
540
+
541
+ **Auth scope:** write **Side effects:** updates **Output:** none
542
+
543
+ | Flag | Required | Default | Description |
544
+ |------|----------|---------|-------------|
545
+ | `--name` | no | — | Series name |
546
+ | `--description` | no | — | Series description |
547
+
548
+ ```bash
549
+ # Update the series name
550
+ twentythree webinar series update <series-id> --name "Q2 All-Hands Series" --json
551
+
552
+ # Update the series description
553
+ twentythree webinar series update <series-id> --description "Quarterly alignment sessions" --json
554
+ ```
555
+
556
+ ---
557
+
558
+ ### webinar series delete
559
+
560
+ **Auth scope:** write **Side effects:** destructive **Output:** none
561
+
562
+ > **Warning: This action is destructive and cannot be undone.**
563
+
564
+ | Flag | Required | Default | Description |
565
+ |------|----------|---------|-------------|
566
+ | `--delete-associations` | no | false | Also delete associated webinars |
567
+
568
+ ```bash
569
+ # Delete a series (keep associated webinars)
570
+ twentythree webinar series delete <series-id> --json
571
+
572
+ # Delete a series and all associated webinars
573
+ twentythree webinar series delete <series-id> --delete-associations --json
574
+ ```
575
+
576
+ ---
577
+
578
+ ### webinar series cancel
579
+
580
+ **Auth scope:** write **Side effects:** destructive **Output:** none
581
+
582
+ | Flag | Required | Default | Description |
583
+ |------|----------|---------|-------------|
584
+ | `--cancel-associations` | no | false | Also cancel associated webinars |
585
+
586
+ ```bash
587
+ # Cancel a series
588
+ twentythree webinar series cancel <series-id> --json
589
+
590
+ # Cancel a series and all associated webinars
591
+ twentythree webinar series cancel <series-id> --cancel-associations --json
592
+ ```
593
+
594
+ ---
595
+
596
+ ### webinar series metrics
597
+
598
+ **Auth scope:** read **Side effects:** none **Output:** table (Metric, Value)
599
+
600
+ No additional flags — pass the series ID as a positional argument.
601
+
602
+ ```bash
603
+ # Get metrics for a webinar series
604
+ twentythree webinar series metrics <series-id> --json
605
+
606
+ # Example with a real series ID
607
+ twentythree webinar series metrics 42 --json
608
+ ```
609
+
610
+ ---
611
+
612
+ ### webinar series mapped-objects
613
+
614
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Type, Title)
615
+
616
+ Lists all webinars (and other objects) mapped to a series.
617
+
618
+ No additional flags — pass the series ID as a positional argument.
619
+
620
+ ```bash
621
+ # List webinars in a series
622
+ twentythree webinar series mapped-objects <series-id> --json
623
+
624
+ # Example with a real series ID
625
+ twentythree webinar series mapped-objects 42 --json
626
+ ```
627
+
628
+ ---
629
+
630
+ ### webinar series recurrences
631
+
632
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Start Time, Status, Skipped)
633
+
634
+ No additional flags — pass the series ID as a positional argument.
635
+
636
+ ```bash
637
+ # List scheduled recurrences for a series
638
+ twentythree webinar series recurrences <series-id> --json
639
+
640
+ # Example with a real series ID
641
+ twentythree webinar series recurrences 42 --json
642
+ ```
643
+
644
+ ---
645
+
646
+ ### webinar series apply-recurrence
647
+
648
+ **Auth scope:** write **Side effects:** updates **Output:** none
649
+
650
+ | Flag | Required | Default | Description |
651
+ |------|----------|---------|-------------|
652
+ | `--recurrence-id` | no | — | Recurrence ID |
653
+
654
+ ```bash
655
+ # Apply a recurrence to a series
656
+ twentythree webinar series apply-recurrence <series-id> --recurrence-id 7 --json
657
+
658
+ # Example with real IDs
659
+ twentythree webinar series apply-recurrence 42 --recurrence-id 7 --json
660
+ ```
661
+
662
+ ---
663
+
664
+ ### webinar series skip-recurrence
665
+
666
+ **Auth scope:** write **Side effects:** updates **Output:** none
667
+
668
+ | Flag | Required | Default | Description |
669
+ |------|----------|---------|-------------|
670
+ | `--recurrence-id` | no | — | Recurrence ID |
671
+ | `--skipped` | no | — | Set skipped (`--skipped`) or unskipped (`--no-skipped`) |
672
+
673
+ ```bash
674
+ # Skip a recurrence
675
+ twentythree webinar series skip-recurrence <series-id> --recurrence-id 7 --skipped --json
676
+
677
+ # Unskip a recurrence
678
+ twentythree webinar series skip-recurrence <series-id> --recurrence-id 7 --no-skipped --json
679
+ ```
680
+
681
+ ---
682
+
683
+ ### webinar series set-ondemand
684
+
685
+ **Auth scope:** write **Side effects:** updates **Output:** none
686
+
687
+ | Flag | Required | Default | Description |
688
+ |------|----------|---------|-------------|
689
+ | `--update-associations` | no | false | Also update associated webinars |
690
+
691
+ ```bash
692
+ # Set a series to on-demand
693
+ twentythree webinar series set-ondemand <series-id> --json
694
+
695
+ # Set a series and associated webinars to on-demand
696
+ twentythree webinar series set-ondemand <series-id> --update-associations --json
697
+ ```
698
+
699
+ ---
700
+
701
+ ### webinar series upload-thumbnail
702
+
703
+ **Auth scope:** write **Side effects:** creates **Output:** none
704
+
705
+ Chunked upload is automatic.
706
+
707
+ | Flag | Required | Default | Description |
708
+ |------|----------|---------|-------------|
709
+ | `--chunk-size` | no | 5242880 | Chunk size in bytes (default: 5 MB) |
710
+ | `--concurrency` | no | 5 | Number of chunks to upload in parallel |
711
+
712
+ ```bash
713
+ # Upload a thumbnail for a series
714
+ twentythree webinar series upload-thumbnail <series-id> ./thumb.jpg --json
715
+
716
+ # Upload with custom chunk size
717
+ twentythree webinar series upload-thumbnail <series-id> ./thumbnail.png --chunk-size 10485760 --json
718
+ ```
719
+
720
+ ---
721
+
722
+ ## Subtopic: webinar mail
723
+
724
+ Mail templates and scheduled emails associated with a webinar (invitations, reminders, post-event follow-ups).
725
+
726
+ ### webinar mail list
727
+
728
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Subject, Status, Send Date)
729
+
730
+ | Flag | Required | Default | Description |
731
+ |------|----------|---------|-------------|
732
+ | `--series-id` | no | — | Series ID — list mails for a series instead of a webinar |
733
+
734
+ ```bash
735
+ # List emails for a webinar
736
+ twentythree webinar mail list <id> --json
737
+
738
+ # List emails for a series
739
+ twentythree webinar mail list --series-id <series-id> --json
740
+ ```
741
+
742
+ ---
743
+
744
+ ### webinar mail add
745
+
746
+ **Auth scope:** write **Side effects:** creates **Output:** key-value
747
+
748
+ | Flag | Required | Default | Description |
749
+ |------|----------|---------|-------------|
750
+ | `--series-id` | no | — | Series ID — add mail to a series instead of a webinar |
751
+ | `--subject` | no | — | Email subject |
752
+ | `--message` | no | — | Email message body |
753
+
754
+ ```bash
755
+ # Add a reminder email to a webinar
756
+ twentythree webinar mail add <id> --subject "Join us tomorrow!" --message "The webinar starts at 4 PM UTC." --json
757
+
758
+ # Add an email to a series
759
+ twentythree webinar mail add --series-id <series-id> --subject "Series reminder" --json
760
+ ```
761
+
762
+ ---
763
+
764
+ ### webinar mail update
765
+
766
+ **Auth scope:** write **Side effects:** updates **Output:** none
767
+
768
+ | Flag | Required | Default | Description |
769
+ |------|----------|---------|-------------|
770
+ | `--webinar-id` | no | — | Webinar ID (mutually exclusive with --series-id) |
771
+ | `--series-id` | no | — | Series ID (mutually exclusive with --webinar-id) |
772
+ | `--subject` | no | — | Email subject |
773
+ | `--message` | no | — | Email message body |
774
+
775
+ ```bash
776
+ # Update the subject of a webinar email
777
+ twentythree webinar mail update <mail-id> --webinar-id <id> --subject "Updated Subject" --json
778
+
779
+ # Update an email on a series
780
+ twentythree webinar mail update <mail-id> --series-id <series-id> --message "New content" --json
781
+ ```
782
+
783
+ ---
784
+
785
+ ### webinar mail remove
786
+
787
+ **Auth scope:** write **Side effects:** destructive **Output:** none
788
+
789
+ | Flag | Required | Default | Description |
790
+ |------|----------|---------|-------------|
791
+ | `--webinar-id` | no | — | Webinar ID (mutually exclusive with --series-id) |
792
+ | `--series-id` | no | — | Series ID (mutually exclusive with --webinar-id) |
793
+
794
+ ```bash
795
+ # Remove an email from a webinar
796
+ twentythree webinar mail remove <mail-id> --webinar-id <id> --json
797
+
798
+ # Remove an email from a series
799
+ twentythree webinar mail remove <mail-id> --series-id <series-id> --json
800
+ ```
801
+
802
+ ---
803
+
804
+ ### webinar mail send
805
+
806
+ **Auth scope:** write **Side effects:** updates **Output:** none
807
+
808
+ | Flag | Required | Default | Description |
809
+ |------|----------|---------|-------------|
810
+ | `--webinar-id` | no | — | Webinar ID (mutually exclusive with --series-id) |
811
+ | `--series-id` | no | — | Series ID (mutually exclusive with --webinar-id) |
812
+
813
+ ```bash
814
+ # Send a webinar email immediately
815
+ twentythree webinar mail send <mail-id> --webinar-id <id> --json
816
+
817
+ # Send a series email
818
+ twentythree webinar mail send <mail-id> --series-id <series-id> --json
819
+ ```
820
+
821
+ ---
822
+
823
+ ### webinar mail test
824
+
825
+ **Auth scope:** write **Side effects:** updates **Output:** none
826
+
827
+ | Flag | Required | Default | Description |
828
+ |------|----------|---------|-------------|
829
+ | `--webinar-id` | no | — | Webinar ID (mutually exclusive with --series-id) |
830
+ | `--series-id` | no | — | Series ID (mutually exclusive with --webinar-id) |
831
+ | `--email` | no | — | Recipient email for the test |
832
+
833
+ ```bash
834
+ # Send a test email to yourself
835
+ twentythree webinar mail test <mail-id> --webinar-id <id> --email me@example.com --json
836
+
837
+ # Test a series email
838
+ twentythree webinar mail test <mail-id> --series-id <series-id> --email me@example.com --json
839
+ ```
840
+
841
+ ---
842
+
843
+ ### webinar mail preview
844
+
845
+ **Auth scope:** read **Side effects:** none **Output:** none (raw HTML)
846
+
847
+ | Flag | Required | Default | Description |
848
+ |------|----------|---------|-------------|
849
+ | `--webinar-id` | no | — | Webinar ID (mutually exclusive with --series-id) |
850
+ | `--series-id` | no | — | Series ID (mutually exclusive with --webinar-id) |
851
+
852
+ ```bash
853
+ # Preview a webinar email as raw HTML
854
+ twentythree webinar mail preview <mail-id> --webinar-id <id> --json
855
+
856
+ # Redirect HTML preview to a file
857
+ twentythree webinar mail preview <mail-id> --webinar-id <id> > preview.html
858
+ ```
859
+
860
+ ---
861
+
862
+ ## Subtopic: webinar recording
863
+
864
+ Control server-side recording for a live webinar. Recording must be started while the webinar is live, stopped before clips become available, and can be split mid-session to create a chaptered archive.
865
+
866
+ ### webinar recording start
867
+
868
+ **Auth scope:** write **Side effects:** updates **Output:** none
869
+
870
+ No additional flags — pass the webinar ID as a positional argument.
871
+
872
+ ```bash
873
+ # Start recording a live webinar
874
+ twentythree webinar recording start <id> --json
875
+
876
+ # Example with a real ID
877
+ twentythree webinar recording start 12345 --json
878
+ ```
879
+
880
+ ---
881
+
882
+ ### webinar recording stop
883
+
884
+ **Auth scope:** write **Side effects:** updates **Output:** none
885
+
886
+ No additional flags — pass the webinar ID as a positional argument.
887
+
888
+ ```bash
889
+ # Stop recording a webinar
890
+ twentythree webinar recording stop <id> --json
891
+
892
+ # Example with a real ID
893
+ twentythree webinar recording stop 12345 --json
894
+ ```
895
+
896
+ ---
897
+
898
+ ### webinar recording status
899
+
900
+ **Auth scope:** read **Side effects:** none **Output:** key-value
901
+
902
+ No additional flags — pass the webinar ID as a positional argument.
903
+
904
+ ```bash
905
+ # Check recording status
906
+ twentythree webinar recording status <id> --json
907
+
908
+ # Poll status after stopping to know when clips are ready
909
+ twentythree webinar recording status 12345 --json
910
+ ```
911
+
912
+ ---
913
+
914
+ ### webinar recording split
915
+
916
+ **Auth scope:** write **Side effects:** updates **Output:** none
917
+
918
+ Splits the current recording into a new segment, creating a chapter boundary in the archive.
919
+
920
+ No additional flags — pass the webinar ID as a positional argument.
921
+
922
+ ```bash
923
+ # Split the current recording into a new segment
924
+ twentythree webinar recording split <id> --json
925
+
926
+ # Example with a real ID
927
+ twentythree webinar recording split 12345 --json
928
+ ```
929
+
930
+ ---
931
+
932
+ ## Subtopic: webinar room
933
+
934
+ Room commands control the live broadcast room (stream key, room URL, connection info). `webinar room connect` is the command agents use to retrieve the stream key and room URL before going live.
935
+
936
+ ### webinar room connect
937
+
938
+ **Auth scope:** read **Side effects:** updates **Output:** key-value
939
+
940
+ Returns stream key and room URL. These credentials enable the broadcaster to start streaming into the webinar.
941
+
942
+ No additional flags — pass the webinar ID as a positional argument.
943
+
944
+ ```bash
945
+ # Get room connection info (stream key + room URL)
946
+ twentythree webinar room connect <id> --json
947
+
948
+ # Example with a real ID
949
+ twentythree webinar room connect 12345 --json
950
+ ```
951
+
952
+ ---
953
+
954
+ ### webinar room info
955
+
956
+ **Auth scope:** read **Side effects:** none **Output:** key-value
957
+
958
+ No additional flags — pass the webinar ID as a positional argument.
959
+
960
+ ```bash
961
+ # Get room information for a webinar
962
+ twentythree webinar room info <id> --json
963
+
964
+ # Example with a real ID
965
+ twentythree webinar room info 12345 --json
966
+ ```
967
+
968
+ ---
969
+
970
+ ### webinar room send-recording
971
+
972
+ **Auth scope:** write **Side effects:** updates **Output:** none
973
+
974
+ No additional flags — pass the webinar ID as a positional argument.
975
+
976
+ ```bash
977
+ # Send a recording from the webinar room
978
+ twentythree webinar room send-recording <id> --json
979
+
980
+ # Example with a real ID
981
+ twentythree webinar room send-recording 12345 --json
982
+ ```
983
+
984
+ ---
985
+
986
+ ### webinar room themes
987
+
988
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Description)
989
+
990
+ No additional flags.
991
+
992
+ ```bash
993
+ # List available room themes
994
+ twentythree webinar room themes --json
995
+
996
+ # Use the ID value when configuring room appearance
997
+ twentythree webinar room themes --json
998
+ ```
999
+
1000
+ ---
1001
+
1002
+ ## Subtopic: webinar section
1003
+
1004
+ Sections are agenda items (time-stamped chapter markers) displayed to viewers. Unlike `video section`, webinar sections can be scheduled relative to the webinar start time.
1005
+
1006
+ ### webinar section list
1007
+
1008
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Title, Start Time, Description)
1009
+
1010
+ | Flag | Required | Default | Description |
1011
+ |------|----------|---------|-------------|
1012
+ | `--token` | no | — | Webinar token (auto-looked up if omitted) |
1013
+
1014
+ ```bash
1015
+ # List agenda sections for a webinar
1016
+ twentythree webinar section list <id> --json
1017
+
1018
+ # Example with a real ID
1019
+ twentythree webinar section list 12345 --json
1020
+ ```
1021
+
1022
+ ---
1023
+
1024
+ ### webinar section add
1025
+
1026
+ **Auth scope:** write **Side effects:** creates **Output:** key-value
1027
+
1028
+ | Flag | Required | Default | Description |
1029
+ |------|----------|---------|-------------|
1030
+ | `--title` | no | — | Section title |
1031
+ | `--description` | no | — | Section description |
1032
+ | `--start-time` | no | — | Start time in seconds |
1033
+
1034
+ ```bash
1035
+ # Add an intro section at time 0
1036
+ twentythree webinar section add <id> --title "Introduction" --start-time 0 --json
1037
+
1038
+ # Add a Q&A section at 60 minutes
1039
+ twentythree webinar section add <id> --title "Q&A" --start-time 3600 --description "Audience questions" --json
1040
+ ```
1041
+
1042
+ ---
1043
+
1044
+ ### webinar section update
1045
+
1046
+ **Auth scope:** write **Side effects:** updates **Output:** none
1047
+
1048
+ | Flag | Required | Default | Description |
1049
+ |------|----------|---------|-------------|
1050
+ | `--title` | no | — | New section title |
1051
+ | `--description` | no | — | New section description |
1052
+ | `--start-time` | no | — | New start time in seconds |
1053
+
1054
+ ```bash
1055
+ # Update a section title
1056
+ twentythree webinar section update <id> <section-id> --title "Updated Title" --json
1057
+
1058
+ # Update start time and description
1059
+ twentythree webinar section update <id> <section-id> --start-time 1800 --description "Updated description" --json
1060
+ ```
1061
+
1062
+ ---
1063
+
1064
+ ### webinar section remove
1065
+
1066
+ **Auth scope:** write **Side effects:** destructive **Output:** none
1067
+
1068
+ No additional flags — pass webinar ID and section ID as positional arguments.
1069
+
1070
+ ```bash
1071
+ # Remove a section from a webinar
1072
+ twentythree webinar section remove <id> <section-id> --json
1073
+
1074
+ # Example with real IDs
1075
+ twentythree webinar section remove 12345 99 --json
1076
+ ```
1077
+
1078
+ ---
1079
+
1080
+ ## Subtopic: webinar attachment
1081
+
1082
+ Attachments are files (PDFs, slides, links) made available to webinar viewers.
1083
+
1084
+ ### webinar attachment list
1085
+
1086
+ **Auth scope:** read **Side effects:** none **Output:** table (Filename, Size, Hidden)
1087
+
1088
+ | Flag | Required | Default | Description |
1089
+ |------|----------|---------|-------------|
1090
+ | `--token` | no | — | Webinar token (auto-looked up if omitted) |
1091
+ | `--include-hidden` | no | false | Include hidden attachments |
1092
+
1093
+ ```bash
1094
+ # List attachments for a webinar
1095
+ twentythree webinar attachment list <id> --json
1096
+
1097
+ # Include hidden attachments
1098
+ twentythree webinar attachment list <id> --include-hidden --json
1099
+ ```
1100
+
1101
+ ---
1102
+
1103
+ ### webinar attachment upload
1104
+
1105
+ **Auth scope:** write **Side effects:** creates **Output:** none
1106
+
1107
+ Chunked upload is automatic.
1108
+
1109
+ | Flag | Required | Default | Description |
1110
+ |------|----------|---------|-------------|
1111
+ | `--chunk-size` | no | 5242880 | Chunk size in bytes (default: 5 MB) |
1112
+ | `--concurrency` | no | 5 | Number of chunks to upload in parallel |
1113
+ | `--hidden` | no | false | Upload attachment as hidden |
1114
+
1115
+ ```bash
1116
+ # Upload slides as a downloadable attachment
1117
+ twentythree webinar attachment upload <id> ./slides.pdf --json
1118
+
1119
+ # Upload a handout as hidden (not visible to viewers until unhidden)
1120
+ twentythree webinar attachment upload <id> ./handout.pdf --hidden --json
1121
+ ```
1122
+
1123
+ ---
1124
+
1125
+ ### webinar attachment set-hidden
1126
+
1127
+ **Auth scope:** write **Side effects:** updates **Output:** none
1128
+
1129
+ | Flag | Required | Default | Description |
1130
+ |------|----------|---------|-------------|
1131
+ | `--filename` | no | — | Filename of the attachment |
1132
+ | `--hidden` | yes | — | Set hidden (`--hidden`) or visible (`--no-hidden`) |
1133
+
1134
+ ```bash
1135
+ # Hide an attachment from viewers
1136
+ twentythree webinar attachment set-hidden <id> --filename slides.pdf --hidden --json
1137
+
1138
+ # Make a hidden attachment visible
1139
+ twentythree webinar attachment set-hidden <id> --filename slides.pdf --no-hidden --json
1140
+ ```
1141
+
1142
+ ---
1143
+
1144
+ ### webinar attachment delete
1145
+
1146
+ **Auth scope:** write **Side effects:** destructive **Output:** none
1147
+
1148
+ | Flag | Required | Default | Description |
1149
+ |------|----------|---------|-------------|
1150
+ | `--filename` | no | — | Filename of the attachment to delete |
1151
+
1152
+ ```bash
1153
+ # Delete an attachment from a webinar
1154
+ twentythree webinar attachment delete <id> --filename slides.pdf --json
1155
+
1156
+ # Delete another attachment
1157
+ twentythree webinar attachment delete <id> --filename handout.pdf --json
1158
+ ```
1159
+
1160
+ ---
1161
+
1162
+ ## Subtopic: webinar queued-video
1163
+
1164
+ Queued videos are pre-recorded clips played during a live webinar (simulated-live / interstitial content).
1165
+
1166
+ ### webinar queued-video add
1167
+
1168
+ **Auth scope:** write **Side effects:** creates **Output:** none
1169
+
1170
+ | Flag | Required | Default | Description |
1171
+ |------|----------|---------|-------------|
1172
+ | `--video-id` | no | — | Video ID to queue |
1173
+
1174
+ ```bash
1175
+ # Add a pre-recorded intro video to the queue
1176
+ twentythree webinar queued-video add <id> --video-id <video-id> --json
1177
+
1178
+ # Example with real IDs
1179
+ twentythree webinar queued-video add 12345 --video-id 67890 --json
1180
+ ```
1181
+
1182
+ ---
1183
+
1184
+ ### webinar queued-video remove
1185
+
1186
+ **Auth scope:** write **Side effects:** destructive **Output:** none
1187
+
1188
+ | Flag | Required | Default | Description |
1189
+ |------|----------|---------|-------------|
1190
+ | `--video-id` | no | — | Video ID to remove from queue |
1191
+
1192
+ ```bash
1193
+ # Remove a video from the webinar queue
1194
+ twentythree webinar queued-video remove <id> --video-id <video-id> --json
1195
+
1196
+ # Example with real IDs
1197
+ twentythree webinar queued-video remove 12345 --video-id 67890 --json
1198
+ ```
1199
+
1200
+ ---
1201
+
1202
+ ## Subtopic: webinar transcription
1203
+
1204
+ Transcription commands manage speech-to-text transcripts generated from webinar recordings. Transcripts feed into closed captions and AI-generated summaries.
1205
+
1206
+ ### webinar transcription list
1207
+
1208
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Language, Status)
1209
+
1210
+ | Flag | Required | Default | Description |
1211
+ |------|----------|---------|-------------|
1212
+ | `--token` | no | — | Webinar token (auto-looked up if not provided) |
1213
+
1214
+ ```bash
1215
+ # List transcriptions for a webinar
1216
+ twentythree webinar transcription list <id> --json
1217
+
1218
+ # Example with a real ID
1219
+ twentythree webinar transcription list 12345 --json
1220
+ ```
1221
+
1222
+ ---
1223
+
1224
+ ### webinar transcription connect
1225
+
1226
+ **Auth scope:** write **Side effects:** updates **Output:** none
1227
+
1228
+ | Flag | Required | Default | Description |
1229
+ |------|----------|---------|-------------|
1230
+ | `--presenter-token` | no | — | Presenter token |
1231
+
1232
+ ```bash
1233
+ # Connect a transcription to a webinar
1234
+ twentythree webinar transcription connect <id> --json
1235
+
1236
+ # Connect with a presenter token
1237
+ twentythree webinar transcription connect <id> --presenter-token abc123 --json
1238
+ ```
1239
+
1240
+ ---
1241
+
1242
+ ### webinar transcription locales
1243
+
1244
+ **Auth scope:** read **Side effects:** none **Output:** table (Locale, Name)
1245
+
1246
+ | Flag | Required | Default | Description |
1247
+ |------|----------|---------|-------------|
1248
+ | `--token` | no | — | Webinar token (auto-looked up if not provided) |
1249
+
1250
+ ```bash
1251
+ # List available transcription locales
1252
+ twentythree webinar transcription locales <id> --json
1253
+
1254
+ # Example with a real ID
1255
+ twentythree webinar transcription locales 12345 --json
1256
+ ```
1257
+
1258
+ ---
1259
+
1260
+ ### webinar transcription transcriptionlist
1261
+
1262
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Webinar ID, Language, Status)
1263
+
1264
+ Lists all transcriptions in the workspace (not scoped to a single webinar).
1265
+
1266
+ No additional flags.
1267
+
1268
+ ```bash
1269
+ # List all transcriptions in the workspace
1270
+ twentythree webinar transcription transcriptionlist --json
1271
+
1272
+ # Use to audit transcription status across all webinars
1273
+ twentythree webinar transcription transcriptionlist --json
1274
+ ```
1275
+
1276
+ ---
1277
+
1278
+ ## Common Patterns
1279
+
1280
+ ### Create and publish a webinar
1281
+
1282
+ ```bash
1283
+ # 1. Create a scheduled webinar
1284
+ twentythree webinar create --title "Q2 Town Hall" --live-date "2026-05-15T16:00:00Z" --json
1285
+ # => { "data": { "id": "<webinar-id>", "admin_url": "..." } }
1286
+
1287
+ # 2. Publish it (make visible to registrants)
1288
+ twentythree webinar update <webinar-id> --publish --json
1289
+ ```
1290
+
1291
+ ### Go-live sequence
1292
+
1293
+ ```bash
1294
+ # 1. Get room connection info (stream key + room URL)
1295
+ twentythree webinar room connect <id> --json
1296
+ # => Returns stream key and room URL for your streaming software
1297
+
1298
+ # 2. Start recording once you go live
1299
+ twentythree webinar recording start <id> --json
1300
+ ```
1301
+
1302
+ ### Session archive after broadcast
1303
+
1304
+ ```bash
1305
+ # 1. Stop recording when session ends
1306
+ twentythree webinar recording stop <id> --json
1307
+
1308
+ # 2. Wait for processing, then check clips availability
1309
+ twentythree webinar recording status <id> --json
1310
+ twentythree webinar clips <id> --json
1311
+
1312
+ # 3. Mark webinar as previous (archived)
1313
+ twentythree webinar update <id> --status previous --json
1314
+ ```
1315
+
1316
+ ### Add a speaker and agenda section
1317
+
1318
+ ```bash
1319
+ # Add a speaker
1320
+ twentythree webinar speaker add <id> --name "Jane Doe" --email jane@example.com --title "CTO" --json
1321
+
1322
+ # Add agenda sections
1323
+ twentythree webinar section add <id> --title "Introduction" --start-time 0 --json
1324
+ twentythree webinar section add <id> --title "Demo" --start-time 600 --json
1325
+ twentythree webinar section add <id> --title "Q&A" --start-time 3600 --json
1326
+ ```
1327
+
1328
+ ### Attach slides as a downloadable
1329
+
1330
+ ```bash
1331
+ # Upload slides PDF as an attachment
1332
+ twentythree webinar attachment upload <id> ./slides.pdf --json
1333
+
1334
+ # Verify the attachment is visible
1335
+ twentythree webinar attachment list <id> --json
1336
+ ```
1337
+
1338
+ ### Schedule a repeat occurrence
1339
+
1340
+ ```bash
1341
+ # Schedule next week's repeat
1342
+ twentythree webinar repeat <id> --date "2026-05-22T16:00:00Z" --json
1343
+ # => { "data": { "id": "<new-webinar-id>", "admin_url": "..." } }
1344
+ ```
1345
+
1346
+ ### Filter webinar list by status
1347
+
1348
+ ```bash
1349
+ # List live webinars
1350
+ twentythree webinar list --status live --json
1351
+
1352
+ # List all previous webinars including private
1353
+ twentythree webinar list --status previous --include-private --json
1354
+ ```
1355
+
1356
+ ---
1357
+
1358
+ ## Terminology Notes
1359
+
1360
+ CLI `webinar` = API `live`. The `api_endpoint` field in `--agent` output uses the API name:
1361
+
1362
+ - `twentythree webinar create` → `POST /live/create`
1363
+ - `twentythree webinar list` → `GET /live/list`
1364
+ - `twentythree webinar update` → `POST /live/update`
1365
+ - `twentythree webinar delete` → `POST /live/delete`
1366
+ - `twentythree webinar recording start` → `POST /live/recording/start`
1367
+ - `twentythree webinar room connect` → `GET /live/webinar/connect`
1368
+
1369
+ When reading the raw OpenAPI spec, `live` refers to a webinar. The `live session` endpoint family (`/live/webinar/*`) backs the `webinar room` concept — note that `webinar room connect` uses `/live/webinar/connect`.
1370
+ When commenting on a webinar via the `comment` topic, pass `--object-type live`.
1371
+