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,377 @@
1
+ ---
2
+ name: audience
3
+ description: Manage viewer audience records, segments, lead-capture registrations, and audience fields.
4
+ ---
5
+
6
+ # TwentyThree Audience Commands
7
+
8
+ > Query, register, and manage viewer audience profiles, registrations, and custom fields.
9
+ > Always use `--json` in agentic contexts for structured output.
10
+
11
+ ## Prerequisites
12
+
13
+ Auth scope required: read (list, search, metrics, timelines, companies, funnel, identity-sources, list-collectors, field list), write (register, unregister, remove, field set, field remove).
14
+ Run `twentythree auth credentials` if not already configured.
15
+ Verify: `twentythree auth status --json`
16
+
17
+ > For any flag not listed here, run `twentythree audience <cmd> --agent` to get the complete flag list, types, and defaults.
18
+
19
+ ## Commands
20
+
21
+ ### audience list
22
+
23
+ **Auth scope:** read **Side effects:** none **Output:** table (UUID, Name, Email, Company, Score, Timelines)
24
+
25
+ Flags:
26
+
27
+ | Flag | Required | Description |
28
+ |------|----------|-------------|
29
+ | `--page` | no | Page number |
30
+ | `--size` | no | Page size (max 500) |
31
+ | `--offset` | no | Offset for pagination |
32
+ | `--orderby` | no | Order by field (recent, timeline_count, score, first) |
33
+ | `--order` | no | Sort direction (asc/desc) |
34
+ | `--search` | no | Free-text search across names and emails |
35
+ | `--identified` | no | Filter to identified profiles only |
36
+ | `--objects` | no | Filter by viewed object IDs (space-separated) |
37
+
38
+ ```bash
39
+ # List all audience members (paginated)
40
+ twentythree audience list --json
41
+
42
+ # List identified audience members ordered by engagement score
43
+ twentythree audience list --identified --orderby score --order desc --size 100 --json
44
+ ```
45
+
46
+ ### audience search
47
+
48
+ **Auth scope:** read **Side effects:** none **Output:** table (UUID, Name, Email, Company, Score, Last Seen)
49
+
50
+ Flags:
51
+
52
+ | Flag | Required | Description |
53
+ |------|----------|-------------|
54
+ | `--text` | yes | Search text (required) |
55
+ | `--size` | no | Number of results |
56
+ | `--offset` | no | Results offset |
57
+ | `--orderby` | no | Order by field |
58
+ | `--order` | no | Sort direction (asc/desc) |
59
+
60
+ ```bash
61
+ # Search for an audience member by name or email
62
+ twentythree audience search --text "jane@example.com" --json
63
+
64
+ # Search for all audience members from a company
65
+ twentythree audience search --text "acme" --size 20 --orderby score --order desc --json
66
+ ```
67
+
68
+ ### audience metrics
69
+
70
+ **Auth scope:** read **Side effects:** none **Output:** key-value
71
+
72
+ Flags:
73
+
74
+ | Flag | Required | Description |
75
+ |------|----------|-------------|
76
+ | `--page` | no | Page number |
77
+ | `--size` | no | Page size |
78
+ | `--offset` | no | Offset for pagination |
79
+ | `--search` | no | Free-text search filter |
80
+ | `--identified` | no | Filter to identified profiles only |
81
+ | `--objects` | no | Filter by viewed object IDs (space-separated) |
82
+
83
+ ```bash
84
+ # Get overall audience metrics for the workspace
85
+ twentythree audience metrics --json
86
+
87
+ # Get metrics for identified audience members only
88
+ twentythree audience metrics --identified --json
89
+ ```
90
+
91
+ ### audience timelines
92
+
93
+ **Auth scope:** read **Side effects:** none **Output:** table (UUID, Object ID, Type, Engagement, Sessions, Source)
94
+
95
+ Flags:
96
+
97
+ | Flag | Required | Description |
98
+ |------|----------|-------------|
99
+ | `--page` | no | Page number |
100
+ | `--size` | no | Page size |
101
+ | `--offset` | no | Offset for pagination |
102
+ | `--uuid` | no | Filter by audience member UUID |
103
+ | `--objects` | no | Filter by object IDs (space-separated) |
104
+ | `--orderby` | no | Order by field |
105
+ | `--order` | no | Sort direction (asc/desc) |
106
+
107
+ ```bash
108
+ # Get all timelines for a specific audience member
109
+ twentythree audience timelines --uuid <uuid> --json
110
+
111
+ # Get timelines for specific videos across all viewers
112
+ twentythree audience timelines --objects "<video-id-1> <video-id-2>" --json
113
+ ```
114
+
115
+ ### audience register
116
+
117
+ **Auth scope:** write **Side effects:** creates **Output:** none
118
+
119
+ Flags:
120
+
121
+ | Flag | Required | Description |
122
+ |------|----------|-------------|
123
+ | `--email` | yes | Contact email address |
124
+ | `--object-id` | no | Webinar/video ID to register for |
125
+ | `--uuid` | no | Existing contact UUID |
126
+ | `--action-id` | no | Collector action ID |
127
+ | `--firstname` | no | First name |
128
+ | `--lastname` | no | Last name |
129
+ | `--company` | no | Company name |
130
+ | `--phone` | no | Phone number |
131
+ | `--return-url` | no | Base URL for tracking URL |
132
+ | `--source` | no | Registration source (api, import, site, custom) |
133
+
134
+ ```bash
135
+ # Register a new audience member
136
+ twentythree audience register --email "jane@example.com" --json
137
+
138
+ # Register a member for a specific webinar with full profile data
139
+ twentythree audience register --email "john@acme.com" --object-id <webinar-id> --firstname "John" --lastname "Doe" --company "Acme Corp" --source api --json
140
+ ```
141
+
142
+ ### audience unregister
143
+
144
+ **Auth scope:** write **Side effects:** destructive **Output:** none
145
+
146
+ Flags:
147
+
148
+ | Flag | Required | Description |
149
+ |------|----------|-------------|
150
+ | `--object-id` | yes | Object ID to unregister from |
151
+ | `--email` | no | Contact email |
152
+ | `--uuid` | no | Contact UUID |
153
+
154
+ ```bash
155
+ # Unregister by email from a specific webinar
156
+ twentythree audience unregister --object-id <webinar-id> --email "jane@example.com" --json
157
+
158
+ # Unregister by UUID
159
+ twentythree audience unregister --object-id <webinar-id> --uuid <uuid> --json
160
+ ```
161
+
162
+ ### audience remove
163
+
164
+ **Auth scope:** write **Side effects:** destructive **Output:** none
165
+
166
+ Permanently removes an audience profile. At least one of `--email` or `--uuid` required.
167
+
168
+ Flags:
169
+
170
+ | Flag | Required | Description |
171
+ |------|----------|-------------|
172
+ | `--email` | no | Contact email address |
173
+ | `--uuid` | no | Contact UUID |
174
+
175
+ ```bash
176
+ # Permanently remove an audience member by email (GDPR deletion)
177
+ twentythree audience remove --email "jane@example.com" --json
178
+
179
+ # Remove by UUID
180
+ twentythree audience remove --uuid <uuid> --json
181
+ ```
182
+
183
+ ### audience companies
184
+
185
+ **Auth scope:** read **Side effects:** none **Output:** table (UUID, Name, Domain, Score, Profiles, Timelines)
186
+
187
+ Flags:
188
+
189
+ | Flag | Required | Description |
190
+ |------|----------|-------------|
191
+ | `--page` | no | Page number |
192
+ | `--size` | no | Page size |
193
+ | `--offset` | no | Offset for pagination |
194
+ | `--orderby` | no | Order by field |
195
+ | `--order` | no | Sort direction (asc/desc) |
196
+ | `--identified` | no | Filter to identified companies only |
197
+ | `--domains` | no | Filter by company domains (space-separated) |
198
+
199
+ ```bash
200
+ # List all companies in the audience
201
+ twentythree audience companies --json
202
+
203
+ # Find companies in a specific domain with highest engagement score
204
+ twentythree audience companies --domains "acme.com competitor.com" --orderby score --order desc --json
205
+ ```
206
+
207
+ ### audience funnel
208
+
209
+ **Auth scope:** read **Side effects:** none **Output:** key-value
210
+
211
+ Flags:
212
+
213
+ | Flag | Required | Description |
214
+ |------|----------|-------------|
215
+ | `--objects` | no | Filter by object IDs (space-separated) |
216
+ | `--live-type` | no | Live event type filter |
217
+ | `--resolve-recordings` | no | Resolve recording details |
218
+ | `--resolve-live-series` | no | Resolve live series details |
219
+
220
+ ```bash
221
+ # Get overall audience funnel data
222
+ twentythree audience funnel --json
223
+
224
+ # Get funnel for specific videos
225
+ twentythree audience funnel --objects "<video-id-1> <video-id-2>" --resolve-recordings --json
226
+ ```
227
+
228
+ ### audience identity-sources
229
+
230
+ **Auth scope:** read **Side effects:** none **Output:** table (Source, Title, Service)
231
+
232
+ No additional flags.
233
+
234
+ ```bash
235
+ # List all identity sources configured for the workspace
236
+ twentythree audience identity-sources --json
237
+
238
+ # Use in context to understand how audience members were identified
239
+ twentythree audience identity-sources --json
240
+ ```
241
+
242
+ ### audience list-collectors
243
+
244
+ **Auth scope:** read **Side effects:** none **Output:** table (Action ID, Name, Start, End, Require Email)
245
+
246
+ Flags:
247
+
248
+ | Flag | Required | Description |
249
+ |------|----------|-------------|
250
+ | `--object-id` | no | Filter by object ID |
251
+ | `--action-id` | no | Filter by action ID |
252
+
253
+ ```bash
254
+ # List all collectors linked to the audience system
255
+ twentythree audience list-collectors --json
256
+
257
+ # List collectors linked to a specific video
258
+ twentythree audience list-collectors --object-id <video-id> --json
259
+ ```
260
+
261
+ ## Subtopic: audience field
262
+
263
+ Manage custom fields on audience profiles. Fields are workspace-wide and appear on all audience records.
264
+
265
+ ### audience field list
266
+
267
+ **Auth scope:** read **Side effects:** none **Output:** table (Key, Label, Type, Priority, Options)
268
+
269
+ Flags:
270
+
271
+ | Flag | Required | Description |
272
+ |------|----------|-------------|
273
+ | `--include-widget-html` | no | Include HTML widget for each field |
274
+
275
+ ```bash
276
+ # List all custom audience fields
277
+ twentythree audience field list --json
278
+
279
+ # List fields including their HTML widget rendering
280
+ twentythree audience field list --include-widget-html --json
281
+ ```
282
+
283
+ ### audience field set
284
+
285
+ **Auth scope:** write **Side effects:** updates **Output:** none
286
+
287
+ Creates or updates a custom audience field. Use `audience field types` to discover valid type values.
288
+
289
+ Flags:
290
+
291
+ | Flag | Required | Description |
292
+ |------|----------|-------------|
293
+ | `--key` | yes | Unique field key |
294
+ | `--type` | yes | Field type (use `audience field types` to list valid values) |
295
+ | `--label` | yes | Human-readable label |
296
+ | `--options` | no | Semicolon-separated options (for enumerable types) |
297
+ | `--priority` | no | Display order priority |
298
+
299
+ ```bash
300
+ # Add a simple text field to all audience profiles
301
+ twentythree audience field set --key "department" --type text --label "Department" --json
302
+
303
+ # Add an enum field with options
304
+ twentythree audience field set --key "tier" --type enum --label "Customer Tier" --options "free;pro;enterprise" --priority 1 --json
305
+ ```
306
+
307
+ ### audience field remove
308
+
309
+ **Auth scope:** write **Side effects:** destructive **Output:** none
310
+
311
+ Flags:
312
+
313
+ | Flag | Required | Description |
314
+ |------|----------|-------------|
315
+ | `--key` | yes | Field key to remove |
316
+
317
+ ```bash
318
+ # Remove a custom audience field
319
+ twentythree audience field remove --key "old-field" --json
320
+
321
+ # Remove a field that is no longer in use
322
+ twentythree audience field remove --key "department" --json
323
+ ```
324
+
325
+ ### audience field types
326
+
327
+ **Auth scope:** read **Side effects:** none **Output:** table (Type, Label)
328
+
329
+ No additional flags. Returns valid type values for use with `audience field set --type`.
330
+
331
+ ```bash
332
+ # Discover valid field types before creating a new field
333
+ twentythree audience field types --json
334
+
335
+ # Use output to pick a type for field set
336
+ twentythree audience field types --json
337
+ ```
338
+
339
+ ## Common Patterns
340
+
341
+ ### Register a new audience member for a webinar
342
+
343
+ ```bash
344
+ # Register a viewer for a specific webinar with profile data
345
+ twentythree audience register \
346
+ --email "jane@example.com" \
347
+ --object-id <webinar-id> \
348
+ --firstname "Jane" \
349
+ --lastname "Smith" \
350
+ --company "Acme Corp" \
351
+ --source api \
352
+ --json
353
+ ```
354
+
355
+ ### Search for a viewer and get their viewing timeline
356
+
357
+ ```bash
358
+ # Step 1: Find the audience member
359
+ twentythree audience search --text "jane@example.com" --json
360
+
361
+ # Step 2: Get their full viewing history using the UUID from step 1
362
+ twentythree audience timelines --uuid <uuid> --json
363
+ ```
364
+
365
+ ### Add a custom field to all audience profiles
366
+
367
+ ```bash
368
+ # Step 1: Check existing fields and available types
369
+ twentythree audience field list --json
370
+ twentythree audience field types --json
371
+
372
+ # Step 2: Create the new field
373
+ twentythree audience field set --key "company_size" --type text --label "Company Size" --priority 5 --json
374
+
375
+ # Step 3: Verify the field was created
376
+ twentythree audience field list --json
377
+ ```
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: category
3
+ description: Organise videos and webinars into collections (categories). API name: album.
4
+ ---
5
+
6
+ # TwentyThree Category Commands
7
+
8
+ > List, create, update, and delete content categories (collections of videos and webinars).
9
+ > Always use `--json` in agentic contexts for structured output.
10
+
11
+ > Category is the CLI name; the API uses `album`. No `category get` command exists — use `category list` with a search term or ID filter to retrieve details.
12
+
13
+ ## Prerequisites
14
+
15
+ Auth scope required: anonymous (list), write (create, update, delete).
16
+ Run `twentythree auth credentials` if not already configured.
17
+ Verify: `twentythree auth status --json`
18
+
19
+ Category `list` does not require auth — it works before running `twentythree auth credentials`. All other category commands require a `write` token.
20
+
21
+ > For any flag not listed here, run `twentythree category <cmd> --agent` to get the complete flag list, types, and defaults.
22
+
23
+ ## Commands
24
+
25
+ ### category list
26
+
27
+ **Auth scope:** anonymous **Side effects:** none **Output:** table (ID, Title, Hidden, Created)
28
+
29
+ Flags:
30
+
31
+ | Flag | Required | Description |
32
+ |------|----------|-------------|
33
+ | `--include-hidden` | no | Include hidden categories in the results |
34
+
35
+ ```bash
36
+ # List all visible categories
37
+ twentythree category list --json
38
+
39
+ # Include hidden categories
40
+ twentythree category list --include-hidden --json
41
+ ```
42
+
43
+ ### category create
44
+
45
+ **Auth scope:** write **Side effects:** creates **Output:** none
46
+
47
+ > **Note:** The API returns `output_shape: none` for category create — no ID is returned in the response. To find the newly created category, re-run `category list --json` and filter by title.
48
+
49
+ Flags:
50
+
51
+ | Flag | Required | Description |
52
+ |------|----------|-------------|
53
+ | `--title` | yes | Title for the new category |
54
+ | `--description` | no | Description for the new category |
55
+ | `--hidden` | no | Create as hidden category (boolean) |
56
+
57
+ ```bash
58
+ # Create a visible category
59
+ twentythree category create --title "Q2 Demos" --json
60
+
61
+ # Create a hidden category with description
62
+ twentythree category create --title "Internal Videos" --description "For internal team only" --hidden --json
63
+ ```
64
+
65
+ ### category update
66
+
67
+ **Auth scope:** write **Side effects:** updates **Output:** none
68
+
69
+ Takes `<category-id>` as positional argument.
70
+
71
+ Flags:
72
+
73
+ | Flag | Required | Description |
74
+ |------|----------|-------------|
75
+ | `--title` | no | New title for the category |
76
+ | `--description` | no | New description for the category |
77
+ | `--hidden` | no | Show or hide the category (boolean) |
78
+
79
+ ```bash
80
+ # Update a category title
81
+ twentythree category update <category-id> --title "Q2 Product Demos" --json
82
+
83
+ # Hide an existing category
84
+ twentythree category update <category-id> --hidden --json
85
+ ```
86
+
87
+ ### category delete
88
+
89
+ **Auth scope:** write **Side effects:** destructive **Output:** none
90
+
91
+ Takes `<category-id>` as positional argument. No additional flags.
92
+
93
+ ```bash
94
+ # Delete a category
95
+ twentythree category delete <category-id> --json
96
+
97
+ # Delete a category you no longer need
98
+ twentythree category delete <category-id> --json
99
+ ```
100
+
101
+ ## Common Patterns
102
+
103
+ ### Create a category and look it up
104
+
105
+ Because `category create` returns no ID, re-query after creation:
106
+
107
+ ```bash
108
+ # Step 1: Create the category
109
+ twentythree category create --title "Q2 Demos" --description "Demo videos for Q2" --json
110
+
111
+ # Step 2: Find the newly created category by title
112
+ twentythree category list --json
113
+ ```
114
+
115
+ ### List hidden categories
116
+
117
+ ```bash
118
+ twentythree category list --include-hidden --json
119
+ ```
120
+
121
+ ## Terminology Notes
122
+
123
+ CLI `category` = API `album`. The `api_endpoint` field in `--agent` output uses the API name (e.g. `GET /album/list`, `POST /album/create`). When debugging API responses or reading the raw OpenAPI spec, look for `/album/*` paths.
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: collector
3
+ description: Attach and remove lead-capture collectors (forms) on videos and webinars.
4
+ ---
5
+
6
+ # TwentyThree Collector Commands
7
+
8
+ > Attach and manage lead-capture forms (collectors) on videos and webinars.
9
+ > Always use `--json` in agentic contexts for structured output.
10
+
11
+ ## Prerequisites
12
+
13
+ Auth scope required: read (list), write (include, exclude).
14
+ Run `twentythree auth credentials` if not already configured.
15
+ Verify: `twentythree auth status --json`
16
+
17
+ > For any flag not listed here, run `twentythree collector <cmd> --agent` to get the complete flag list, types, and defaults.
18
+
19
+ ## Commands
20
+
21
+ ### collector list
22
+
23
+ **Auth scope:** read **Side effects:** none **Output:** table (ID, Name, Type)
24
+
25
+ Flags:
26
+
27
+ | Flag | Required | Description |
28
+ |------|----------|-------------|
29
+ | `--object-id` | no | Filter collectors by object (video/webinar) ID |
30
+ | `--include-analytics` | no | Include analytics data for each collector |
31
+
32
+ ```bash
33
+ # List all collectors in the workspace
34
+ twentythree collector list --json
35
+
36
+ # List collectors attached to a specific video
37
+ twentythree collector list --object-id <video-id> --json
38
+ ```
39
+
40
+ ### collector include
41
+
42
+ **Auth scope:** write **Side effects:** creates **Output:** none
43
+
44
+ Attaches a collector to a video or webinar. Takes `<collector-id>` as positional argument.
45
+
46
+ Flags:
47
+
48
+ | Flag | Required | Description |
49
+ |------|----------|-------------|
50
+ | `--object-id` | yes | ID of the video or webinar to attach the collector to |
51
+
52
+ ```bash
53
+ # Attach a collector to a video
54
+ twentythree collector include <collector-id> --object-id <video-id> --json
55
+
56
+ # Attach a collector to a webinar
57
+ twentythree collector include <collector-id> --object-id <webinar-id> --json
58
+ ```
59
+
60
+ ### collector exclude
61
+
62
+ **Auth scope:** write **Side effects:** updates **Output:** none
63
+
64
+ Blocks a collector from appearing on a video or webinar. Takes `<collector-id>` as positional argument.
65
+
66
+ Flags:
67
+
68
+ | Flag | Required | Description |
69
+ |------|----------|-------------|
70
+ | `--object-id` | yes | ID of the video or webinar to block the collector from |
71
+
72
+ ```bash
73
+ # Block a collector from a specific video
74
+ twentythree collector exclude <collector-id> --object-id <video-id> --json
75
+
76
+ # Block a collector from a webinar
77
+ twentythree collector exclude <collector-id> --object-id <webinar-id> --json
78
+ ```
79
+
80
+ ## Common Patterns
81
+
82
+ ### Attach a lead-capture form to a video
83
+
84
+ ```bash
85
+ # Step 1: Find available collectors and their IDs
86
+ twentythree collector list --json
87
+
88
+ # Step 2: Attach the chosen collector to the target video
89
+ twentythree collector include <collector-id> --object-id <video-id> --json
90
+
91
+ # Step 3: Verify the collector is now attached
92
+ twentythree collector list --object-id <video-id> --json
93
+ ```
94
+
95
+ ### Review collector analytics and then remove from a video
96
+
97
+ ```bash
98
+ # Check which collectors are on a video, including analytics
99
+ twentythree collector list --object-id <video-id> --include-analytics --json
100
+
101
+ # Remove a collector that is no longer needed on this video
102
+ twentythree collector exclude <collector-id> --object-id <video-id> --json
103
+ ```