@iterable/cli 0.1.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.
Files changed (140) hide show
  1. package/COMMANDS.md +1574 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +194 -0
  4. package/dist/commands/campaigns.d.ts +3 -0
  5. package/dist/commands/campaigns.d.ts.map +1 -0
  6. package/dist/commands/campaigns.js +106 -0
  7. package/dist/commands/campaigns.js.map +1 -0
  8. package/dist/commands/catalogs.d.ts +3 -0
  9. package/dist/commands/catalogs.d.ts.map +1 -0
  10. package/dist/commands/catalogs.js +99 -0
  11. package/dist/commands/catalogs.js.map +1 -0
  12. package/dist/commands/events.d.ts +3 -0
  13. package/dist/commands/events.d.ts.map +1 -0
  14. package/dist/commands/events.js +33 -0
  15. package/dist/commands/events.js.map +1 -0
  16. package/dist/commands/experiments.d.ts +3 -0
  17. package/dist/commands/experiments.d.ts.map +1 -0
  18. package/dist/commands/experiments.js +33 -0
  19. package/dist/commands/experiments.js.map +1 -0
  20. package/dist/commands/export.d.ts +3 -0
  21. package/dist/commands/export.d.ts.map +1 -0
  22. package/dist/commands/export.js +33 -0
  23. package/dist/commands/export.js.map +1 -0
  24. package/dist/commands/journeys.d.ts +3 -0
  25. package/dist/commands/journeys.d.ts.map +1 -0
  26. package/dist/commands/journeys.js +21 -0
  27. package/dist/commands/journeys.js.map +1 -0
  28. package/dist/commands/lists.d.ts +3 -0
  29. package/dist/commands/lists.d.ts.map +1 -0
  30. package/dist/commands/lists.js +64 -0
  31. package/dist/commands/lists.js.map +1 -0
  32. package/dist/commands/messaging.d.ts +3 -0
  33. package/dist/commands/messaging.d.ts.map +1 -0
  34. package/dist/commands/messaging.js +120 -0
  35. package/dist/commands/messaging.js.map +1 -0
  36. package/dist/commands/registry.d.ts +46 -0
  37. package/dist/commands/registry.d.ts.map +1 -0
  38. package/dist/commands/registry.js +42 -0
  39. package/dist/commands/registry.js.map +1 -0
  40. package/dist/commands/snippets.d.ts +3 -0
  41. package/dist/commands/snippets.d.ts.map +1 -0
  42. package/dist/commands/snippets.js +42 -0
  43. package/dist/commands/snippets.js.map +1 -0
  44. package/dist/commands/subscriptions.d.ts +3 -0
  45. package/dist/commands/subscriptions.d.ts.map +1 -0
  46. package/dist/commands/subscriptions.js +40 -0
  47. package/dist/commands/subscriptions.js.map +1 -0
  48. package/dist/commands/templates.d.ts +3 -0
  49. package/dist/commands/templates.d.ts.map +1 -0
  50. package/dist/commands/templates.js +160 -0
  51. package/dist/commands/templates.js.map +1 -0
  52. package/dist/commands/transforms.d.ts +3 -0
  53. package/dist/commands/transforms.d.ts.map +1 -0
  54. package/dist/commands/transforms.js +24 -0
  55. package/dist/commands/transforms.js.map +1 -0
  56. package/dist/commands/types.d.ts +40 -0
  57. package/dist/commands/types.d.ts.map +1 -0
  58. package/dist/commands/types.js +15 -0
  59. package/dist/commands/types.js.map +1 -0
  60. package/dist/commands/users.d.ts +3 -0
  61. package/dist/commands/users.d.ts.map +1 -0
  62. package/dist/commands/users.js +103 -0
  63. package/dist/commands/users.js.map +1 -0
  64. package/dist/commands/webhooks.d.ts +3 -0
  65. package/dist/commands/webhooks.d.ts.map +1 -0
  66. package/dist/commands/webhooks.js +21 -0
  67. package/dist/commands/webhooks.js.map +1 -0
  68. package/dist/config.d.ts +14 -0
  69. package/dist/config.d.ts.map +1 -0
  70. package/dist/config.js +60 -0
  71. package/dist/config.js.map +1 -0
  72. package/dist/errors.d.ts +11 -0
  73. package/dist/errors.d.ts.map +1 -0
  74. package/dist/errors.js +21 -0
  75. package/dist/errors.js.map +1 -0
  76. package/dist/index.d.ts +3 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +107 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/key-manager.d.ts +280 -0
  81. package/dist/key-manager.d.ts.map +1 -0
  82. package/dist/key-manager.js +989 -0
  83. package/dist/key-manager.js.map +1 -0
  84. package/dist/keys-cli.d.ts +3 -0
  85. package/dist/keys-cli.d.ts.map +1 -0
  86. package/dist/keys-cli.js +396 -0
  87. package/dist/keys-cli.js.map +1 -0
  88. package/dist/output.d.ts +5 -0
  89. package/dist/output.d.ts.map +1 -0
  90. package/dist/output.js +104 -0
  91. package/dist/output.js.map +1 -0
  92. package/dist/parser.d.ts +26 -0
  93. package/dist/parser.d.ts.map +1 -0
  94. package/dist/parser.js +281 -0
  95. package/dist/parser.js.map +1 -0
  96. package/dist/router.d.ts +20 -0
  97. package/dist/router.d.ts.map +1 -0
  98. package/dist/router.js +137 -0
  99. package/dist/router.js.map +1 -0
  100. package/dist/utils/cli-env.d.ts +10 -0
  101. package/dist/utils/cli-env.d.ts.map +1 -0
  102. package/dist/utils/cli-env.js +21 -0
  103. package/dist/utils/cli-env.js.map +1 -0
  104. package/dist/utils/command-info.d.ts +7 -0
  105. package/dist/utils/command-info.d.ts.map +1 -0
  106. package/dist/utils/command-info.js +36 -0
  107. package/dist/utils/command-info.js.map +1 -0
  108. package/dist/utils/detect-background.d.ts +3 -0
  109. package/dist/utils/detect-background.d.ts.map +1 -0
  110. package/dist/utils/detect-background.js +33 -0
  111. package/dist/utils/detect-background.js.map +1 -0
  112. package/dist/utils/endpoint-prompt.d.ts +5 -0
  113. package/dist/utils/endpoint-prompt.d.ts.map +1 -0
  114. package/dist/utils/endpoint-prompt.js +98 -0
  115. package/dist/utils/endpoint-prompt.js.map +1 -0
  116. package/dist/utils/formatting.d.ts +3 -0
  117. package/dist/utils/formatting.d.ts.map +1 -0
  118. package/dist/utils/formatting.js +5 -0
  119. package/dist/utils/formatting.js.map +1 -0
  120. package/dist/utils/password-prompt.d.ts +3 -0
  121. package/dist/utils/password-prompt.d.ts.map +1 -0
  122. package/dist/utils/password-prompt.js +21 -0
  123. package/dist/utils/password-prompt.js.map +1 -0
  124. package/dist/utils/sanitize.d.ts +13 -0
  125. package/dist/utils/sanitize.d.ts.map +1 -0
  126. package/dist/utils/sanitize.js +23 -0
  127. package/dist/utils/sanitize.js.map +1 -0
  128. package/dist/utils/theme.d.ts +11 -0
  129. package/dist/utils/theme.d.ts.map +1 -0
  130. package/dist/utils/theme.js +14 -0
  131. package/dist/utils/theme.js.map +1 -0
  132. package/dist/utils/ui.d.ts +22 -0
  133. package/dist/utils/ui.d.ts.map +1 -0
  134. package/dist/utils/ui.js +107 -0
  135. package/dist/utils/ui.js.map +1 -0
  136. package/dist/utils/url.d.ts +13 -0
  137. package/dist/utils/url.d.ts.map +1 -0
  138. package/dist/utils/url.js +20 -0
  139. package/dist/utils/url.js.map +1 -0
  140. package/package.json +90 -0
package/COMMANDS.md ADDED
@@ -0,0 +1,1574 @@
1
+ # Available Commands (109 commands)
2
+
3
+ All commands follow the pattern: `iterable <category> <command> [options]`
4
+
5
+ Every command also accepts `--json <data>` for raw JSON input and `--help` for usage details.
6
+
7
+ ## campaigns (14 commands)
8
+
9
+ ### campaigns abort
10
+
11
+ Abort a campaign that is currently running
12
+
13
+ ```
14
+ iterable campaigns abort <campaignId>
15
+ ```
16
+
17
+ | Option | Type | Required | Description |
18
+ |--------|------|----------|-------------|
19
+ | `campaignId` | number | **yes** | Campaign ID to abort |
20
+
21
+ ### campaigns activate
22
+
23
+ Activate a triggered campaign
24
+
25
+ ```
26
+ iterable campaigns activate <campaignId>
27
+ ```
28
+
29
+ | Option | Type | Required | Description |
30
+ |--------|------|----------|-------------|
31
+ | `campaignId` | number | **yes** | Triggered campaign ID to activate |
32
+
33
+ ### campaigns archive
34
+
35
+ Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted.
36
+
37
+ ```
38
+ iterable campaigns archive <campaignIds...>
39
+ ```
40
+
41
+ | Option | Type | Required | Description |
42
+ |--------|------|----------|-------------|
43
+ | `campaignIds` | number[] | **yes** | Campaign IDs to archive |
44
+
45
+ ### campaigns cancel
46
+
47
+ Cancel a scheduled or recurring campaign
48
+
49
+ ```
50
+ iterable campaigns cancel <campaignId>
51
+ ```
52
+
53
+ | Option | Type | Required | Description |
54
+ |--------|------|----------|-------------|
55
+ | `campaignId` | number | **yes** | Campaign ID to cancel |
56
+
57
+ ### campaigns create-blast
58
+
59
+ Create a new blast campaign from an existing template. The campaign is created without being scheduled. Use schedule to schedule it for delivery.
60
+
61
+ ```
62
+ iterable campaigns create-blast --listIds <listIds...> --name <name> --templateId <templateId>
63
+ ```
64
+
65
+ | Option | Type | Required | Description |
66
+ |--------|------|----------|-------------|
67
+ | `--listIds` | number[] | **yes** | Array of list IDs to which the campaign should be sent |
68
+ | `--name` | string | **yes** | The name to use in Iterable for the new campaign |
69
+ | `--templateId` | number | **yes** | The ID of a template to associate with the new campaign |
70
+ | `--campaignDataFields` | json | no | A JSON object containing campaign-level data fields that are available as merge parameters (for example, {{field}}) during message rendering. These fields are available in templates, data feed URLs, and all other contexts where merge parameters are supported. Campaign-level fields are overridden by user and event data fields of the same name. |
71
+ | `--suppressionListIds` | number[] | no | Array of suppression list IDs |
72
+
73
+ ### campaigns create-triggered
74
+
75
+ Create a new triggered campaign from an existing template. The campaign is created in Ready state and must be activated before it can send.
76
+
77
+ ```
78
+ iterable campaigns create-triggered --name <name> --templateId <templateId>
79
+ ```
80
+
81
+ | Option | Type | Required | Description |
82
+ |--------|------|----------|-------------|
83
+ | `--name` | string | **yes** | The name to use in Iterable for the new campaign |
84
+ | `--templateId` | number | **yes** | The ID of a template to associate with the new campaign |
85
+ | `--campaignDataFields` | json | no | A JSON object containing campaign-level data fields that are available as merge parameters (for example, {{field}}) during message rendering. These fields are available in templates, data feed URLs, and all other contexts where merge parameters are supported. Campaign-level fields are overridden by user and event data fields of the same name. |
86
+
87
+ ### campaigns deactivate
88
+
89
+ Deactivate a triggered campaign
90
+
91
+ ```
92
+ iterable campaigns deactivate <campaignId>
93
+ ```
94
+
95
+ | Option | Type | Required | Description |
96
+ |--------|------|----------|-------------|
97
+ | `campaignId` | number | **yes** | Triggered campaign ID to deactivate |
98
+
99
+ ### campaigns get
100
+
101
+ Get detailed information about a specific campaign
102
+
103
+ ```
104
+ iterable campaigns get <id>
105
+ ```
106
+
107
+ | Option | Type | Required | Description |
108
+ |--------|------|----------|-------------|
109
+ | `id` | number | **yes** | Campaign ID to retrieve |
110
+
111
+ ### campaigns get-children
112
+
113
+ Get child campaigns generated by a recurring campaign
114
+
115
+ ```
116
+ iterable campaigns get-children <id>
117
+ ```
118
+
119
+ | Option | Type | Required | Description |
120
+ |--------|------|----------|-------------|
121
+ | `id` | number | **yes** | ID of the recurring campaign |
122
+ | `--order` | `asc` \| `desc` | no | Sort direction (asc or desc) |
123
+ | `--page` | number | no | Page number (starting at 1) |
124
+ | `--pageSize` | number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
125
+ | `--sort` | string | no | Field to sort by |
126
+
127
+ ### campaigns get-metrics
128
+
129
+ Get campaign performance metrics
130
+
131
+ ```
132
+ iterable campaigns get-metrics <campaignId>
133
+ ```
134
+
135
+ | Option | Type | Required | Description |
136
+ |--------|------|----------|-------------|
137
+ | `campaignId` | number | **yes** | Campaign ID to get metrics for |
138
+ | `--endDateTime` | string | no | End date for metrics (YYYY-MM-DD HH:MM:SS format) |
139
+ | `--startDateTime` | string | no | Start date for metrics (YYYY-MM-DD HH:MM:SS format) |
140
+
141
+ ### campaigns list
142
+
143
+ Retrieve campaigns
144
+
145
+ | Option | Type | Required | Description |
146
+ |--------|------|----------|-------------|
147
+ | `--order` | `asc` \| `desc` | no | Sort direction (asc or desc) |
148
+ | `--page` | number | no | Page number (starting at 1) |
149
+ | `--pageSize` | number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
150
+ | `--sort` | string | no | Field to sort by |
151
+
152
+ ### campaigns schedule
153
+
154
+ Schedule an existing campaign to be sent at a specific time
155
+
156
+ ```
157
+ iterable campaigns schedule <campaignId> --sendAt <sendAt>
158
+ ```
159
+
160
+ | Option | Type | Required | Description |
161
+ |--------|------|----------|-------------|
162
+ | `campaignId` | number | **yes** | Campaign ID to schedule |
163
+ | `--sendAt` | string | **yes** | When to send (ISO-8601 format, e.g. 2024-12-20T10:15:30Z) |
164
+ | `--recipientTimeZone` | json | no | Recipient timezone configuration (JSON: {defaultTimeZone, startTimeZone}) |
165
+
166
+ ### campaigns send
167
+
168
+ Send an existing scheduled campaign immediately
169
+
170
+ ```
171
+ iterable campaigns send <campaignId>
172
+ ```
173
+
174
+ | Option | Type | Required | Description |
175
+ |--------|------|----------|-------------|
176
+ | `campaignId` | number | **yes** | Campaign ID to send now |
177
+
178
+ ### campaigns trigger
179
+
180
+ Trigger a campaign to send to specified lists
181
+
182
+ ```
183
+ iterable campaigns trigger --campaignId <campaignId> --listIds <listIds...>
184
+ ```
185
+
186
+ | Option | Type | Required | Description |
187
+ |--------|------|----------|-------------|
188
+ | `--campaignId` | number | **yes** | Campaign ID to trigger |
189
+ | `--listIds` | number[] | **yes** | A non-empty array of list IDs to send to |
190
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends? Defaults to true. |
191
+ | `--dataFields` | json | no | Fields to merge into handlebars context |
192
+ | `--suppressionListIds` | number[] | no | Lists to suppress |
193
+
194
+
195
+ ## catalogs (12 commands)
196
+
197
+ ### catalogs bulk-delete-items
198
+
199
+ Bulk delete catalog items by their IDs
200
+
201
+ ```
202
+ iterable catalogs bulk-delete-items --catalogName <catalogName> --itemIds <itemIds...>
203
+ ```
204
+
205
+ | Option | Type | Required | Description |
206
+ |--------|------|----------|-------------|
207
+ | `--catalogName` | string | **yes** | Name of the catalog |
208
+ | `--itemIds` | string[] | **yes** | Array of item IDs to delete |
209
+
210
+ ### catalogs create
211
+
212
+ Create a new catalog
213
+
214
+ ```
215
+ iterable catalogs create <catalogName>
216
+ ```
217
+
218
+ | Option | Type | Required | Description |
219
+ |--------|------|----------|-------------|
220
+ | `catalogName` | string | **yes** | Catalog name (alphanumeric and dashes only, max 255 chars) |
221
+
222
+ ### catalogs delete
223
+
224
+ Delete a catalog
225
+
226
+ ```
227
+ iterable catalogs delete <catalogName>
228
+ ```
229
+
230
+ | Option | Type | Required | Description |
231
+ |--------|------|----------|-------------|
232
+ | `catalogName` | string | **yes** | Name of the catalog to delete |
233
+
234
+ ### catalogs delete-item
235
+
236
+ Delete a specific catalog item by ID
237
+
238
+ ```
239
+ iterable catalogs delete-item --catalogName <catalogName> --itemId <itemId>
240
+ ```
241
+
242
+ | Option | Type | Required | Description |
243
+ |--------|------|----------|-------------|
244
+ | `--catalogName` | string | **yes** | Name of the catalog |
245
+ | `--itemId` | string | **yes** | ID of the catalog item to delete |
246
+
247
+ ### catalogs get-field-mappings
248
+
249
+ Get field mappings and data types for a catalog
250
+
251
+ ```
252
+ iterable catalogs get-field-mappings <catalogName>
253
+ ```
254
+
255
+ | Option | Type | Required | Description |
256
+ |--------|------|----------|-------------|
257
+ | `catalogName` | string | **yes** | Name of the catalog |
258
+
259
+ ### catalogs get-item
260
+
261
+ Get a specific catalog item by ID
262
+
263
+ ```
264
+ iterable catalogs get-item --catalogName <catalogName> --itemId <itemId>
265
+ ```
266
+
267
+ | Option | Type | Required | Description |
268
+ |--------|------|----------|-------------|
269
+ | `--catalogName` | string | **yes** | Name of the catalog |
270
+ | `--itemId` | string | **yes** | ID of the catalog item to retrieve |
271
+
272
+ ### catalogs get-items
273
+
274
+ Get items from a catalog with optional pagination and sorting
275
+
276
+ ```
277
+ iterable catalogs get-items <catalogName>
278
+ ```
279
+
280
+ | Option | Type | Required | Description |
281
+ |--------|------|----------|-------------|
282
+ | `catalogName` | string | **yes** | Name of the catalog |
283
+ | `--orderBy` | string | no | Field by which results should be ordered |
284
+ | `--page` | number | no | Page number (starting at 1) |
285
+ | `--pageSize` | number | no | Number of results per page (defaults to 10, max 1000) |
286
+ | `--sortAscending` | boolean | no | Sort results by ascending (defaults to false) |
287
+
288
+ ### catalogs list
289
+
290
+ Get list of all catalogs with optional pagination
291
+
292
+ | Option | Type | Required | Description |
293
+ |--------|------|----------|-------------|
294
+ | `--page` | number | no | Page number (starting at 1) |
295
+ | `--pageSize` | number | no | Number of results per page (max 100) |
296
+
297
+ ### catalogs partial-update-item
298
+
299
+ Partial update (PATCH) a catalog item - updates only specified fields
300
+
301
+ ```
302
+ iterable catalogs partial-update-item --catalogName <catalogName> --itemId <itemId> --update <json>
303
+ ```
304
+
305
+ | Option | Type | Required | Description |
306
+ |--------|------|----------|-------------|
307
+ | `--catalogName` | string | **yes** | Name of the catalog |
308
+ | `--itemId` | string | **yes** | ID of the catalog item |
309
+ | `--update` | json | **yes** | Fields to update |
310
+
311
+ ### catalogs replace-item
312
+
313
+ Replace (PUT) a catalog item - replaces the entire item with new value
314
+
315
+ ```
316
+ iterable catalogs replace-item --catalogName <catalogName> --itemId <itemId> --value <json>
317
+ ```
318
+
319
+ | Option | Type | Required | Description |
320
+ |--------|------|----------|-------------|
321
+ | `--catalogName` | string | **yes** | Name of the catalog |
322
+ | `--itemId` | string | **yes** | ID of the catalog item |
323
+ | `--value` | json | **yes** | New value for the item |
324
+
325
+ ### catalogs update-field-mappings
326
+
327
+ Update catalog field mappings (data types)
328
+
329
+ ```
330
+ iterable catalogs update-field-mappings <catalogName> --mappingsUpdates <mappingsUpdates...>
331
+ ```
332
+
333
+ | Option | Type | Required | Description |
334
+ |--------|------|----------|-------------|
335
+ | `catalogName` | string | **yes** | Name of the catalog |
336
+ | `--mappingsUpdates` | string[] | **yes** | Field mappings to update |
337
+
338
+ ### catalogs update-items
339
+
340
+ Update catalog items
341
+
342
+ ```
343
+ iterable catalogs update-items <catalogName> --items <items...>
344
+ ```
345
+
346
+ | Option | Type | Required | Description |
347
+ |--------|------|----------|-------------|
348
+ | `catalogName` | string | **yes** | Name of the catalog |
349
+ | `--items` | json[] | **yes** | Catalog items to update |
350
+
351
+
352
+ ## events (4 commands)
353
+
354
+ ### events get-by-email
355
+
356
+ Get event history for a user by email address
357
+
358
+ ```
359
+ iterable events get-by-email <email>
360
+ ```
361
+
362
+ | Option | Type | Required | Description |
363
+ |--------|------|----------|-------------|
364
+ | `email` | string | **yes** | User email address |
365
+ | `--limit` | number | no | Maximum number of events to return |
366
+
367
+ ### events get-by-userid
368
+
369
+ Get event history for a user by user ID
370
+
371
+ ```
372
+ iterable events get-by-userid <userId>
373
+ ```
374
+
375
+ | Option | Type | Required | Description |
376
+ |--------|------|----------|-------------|
377
+ | `userId` | string | **yes** | User ID to get events for |
378
+ | `--limit` | number | no | Maximum number of events to return (default: 20) |
379
+
380
+ ### events track
381
+
382
+ Track a custom event for a user
383
+
384
+ ```
385
+ iterable events track <eventName>
386
+ ```
387
+
388
+ | Option | Type | Required | Description |
389
+ |--------|------|----------|-------------|
390
+ | `eventName` | string | **yes** | |
391
+ | `--campaignId` | number | no | |
392
+ | `--createdAt` | number | no | |
393
+ | `--createNewFields` | boolean | no | |
394
+ | `--dataFields` | json | no | |
395
+ | `--email` | string | no | |
396
+ | `--id` | string | no | |
397
+ | `--templateId` | number | no | |
398
+ | `--userId` | string | no | |
399
+
400
+ ### events track-bulk
401
+
402
+ Track multiple events in a single request for better performance
403
+
404
+ ```
405
+ iterable events track-bulk --events <events...>
406
+ ```
407
+
408
+ | Option | Type | Required | Description |
409
+ |--------|------|----------|-------------|
410
+ | `--events` | json[] | **yes** | |
411
+
412
+
413
+ ## experiments (4 commands)
414
+
415
+ ### experiments get
416
+
417
+ Get detailed information about a specific experiment by ID
418
+
419
+ ```
420
+ iterable experiments get <experimentId>
421
+ ```
422
+
423
+ | Option | Type | Required | Description |
424
+ |--------|------|----------|-------------|
425
+ | `experimentId` | number | **yes** | Experiment ID |
426
+
427
+ ### experiments get-metrics
428
+
429
+ Get experiment metrics for A/B testing analysis
430
+
431
+ | Option | Type | Required | Description |
432
+ |--------|------|----------|-------------|
433
+ | `--campaignId` | number[] | no | Campaign IDs whose experiments to export (can specify multiple) |
434
+ | `--endDateTime` | string | no | Export ending at (ISO 8601 format) |
435
+ | `--experimentId` | number[] | no | Experiment IDs to export (can specify multiple) |
436
+ | `--startDateTime` | string | no | Export starting from (ISO 8601 format) |
437
+
438
+ ### experiments get-variants
439
+
440
+ Get variant content for an experiment, including subject lines, preheaders, HTML source, and plain text
441
+
442
+ ```
443
+ iterable experiments get-variants <experimentId>
444
+ ```
445
+
446
+ | Option | Type | Required | Description |
447
+ |--------|------|----------|-------------|
448
+ | `experimentId` | number | **yes** | Experiment ID |
449
+
450
+ ### experiments list
451
+
452
+ List experiments with optional filtering by campaign, status, and date range
453
+
454
+ | Option | Type | Required | Description |
455
+ |--------|------|----------|-------------|
456
+ | `--campaignId` | number | no | Filter by campaign ID |
457
+ | `--endDate` | string | no | Filter experiments ending before this date (ISO 8601 format) |
458
+ | `--limit` | number | no | Number of results to return (max 1000, default 20) |
459
+ | `--offset` | number | no | Number of results to skip (default 0) |
460
+ | `--startDate` | string | no | Filter experiments starting from this date (ISO 8601 format) |
461
+ | `--status` | `draft` \| `running` \| `finished` | no | Filter by status (draft, running, finished) |
462
+
463
+
464
+ ## export (4 commands)
465
+
466
+ ### export cancel
467
+
468
+ Cancel a queued or running export job
469
+
470
+ ```
471
+ iterable export cancel <jobId>
472
+ ```
473
+
474
+ | Option | Type | Required | Description |
475
+ |--------|------|----------|-------------|
476
+ | `jobId` | number | **yes** | The ID of the export job to cancel (returned from startExportJob) |
477
+
478
+ ### export get-files
479
+
480
+ Get the job status and download URLs for files from a completed export job
481
+
482
+ ```
483
+ iterable export get-files <jobId>
484
+ ```
485
+
486
+ | Option | Type | Required | Description |
487
+ |--------|------|----------|-------------|
488
+ | `jobId` | number | **yes** | The ID of the export job (returned from startExportJob) |
489
+ | `--startAfter` | string | no | Skip file names up to and including this value. Use for paginating over the files in the export (e.g., 'file-1679086247925.csv') |
490
+
491
+ ### export list-jobs
492
+
493
+ Get a list of recent export jobs for the current project
494
+
495
+ | Option | Type | Required | Description |
496
+ |--------|------|----------|-------------|
497
+ | `--jobState` | string | no | Filter results to only include jobs in the specified state (enqueued, queued, running, completed, failed, cancelled, cancelling) |
498
+
499
+ ### export start
500
+
501
+ Start a data export job that processes as a background job. Use get-files to check status and obtain download links.
502
+
503
+ ```
504
+ iterable export start --dataTypeName <dataTypeName> --outputFormat <outputFormat>
505
+ ```
506
+
507
+ | Option | Type | Required | Description |
508
+ |--------|------|----------|-------------|
509
+ | `--dataTypeName` | `emailSend` \| `emailOpen` \| `emailClick` \| `hostedUnsubscribeClick` \| `emailComplaint` \| `emailBounce` \| `emailSendSkip` \| `pushSend` \| `pushOpen` \| `pushUninstall` \| `pushBounce` \| `pushSendSkip` \| `inAppSend` \| `inAppOpen` \| `inAppClick` \| `inAppClose` \| `inAppDelete` \| `inAppDelivery` \| `inAppSendSkip` \| `inAppRecall` \| `inboxSession` \| `inboxMessageImpression` \| `smsSend` \| `smsBounce` \| `smsClick` \| `smsReceived` \| `smsSendSkip` \| `webPushSend` \| `webPushClick` \| `webPushSendSkip` \| `rcsSend` \| `rcsSendSkip` \| `emailSubscribe` \| `emailUnSubscribe` \| `purchase` \| `customEvent` \| `user` \| `smsUsageInfo` \| `embeddedSend` \| `embeddedSendSkip` \| `embeddedClick` \| `embeddedReceived` \| `embeddedImpression` \| `embeddedSession` \| `anonSession` \| `journeyExit` \| `whatsAppBounce` \| `whatsAppClick` \| `whatsAppReceived` \| `whatsAppSeen` \| `whatsAppSend` \| `whatsAppSendSkip` \| `whatsAppUsageInfo` | **yes** | Data type name to export (e.g., 'user' for user data, 'emailSend' for email send events) |
510
+ | `--outputFormat` | `text/csv` \| `application/x-json-stream` | **yes** | Output format |
511
+ | `--campaignId` | number | no | Only export data from this campaign |
512
+ | `--delimiter` | string | no | CSV file delimiter |
513
+ | `--endDateTime` | string | no | Export events occurring or users updated before date and time exclusive |
514
+ | `--omitFields` | string | no | Fields to omit from the export (comma separated) |
515
+ | `--onlyFields` | string | no | Only include these fields in the export (comma separated) |
516
+ | `--startDateTime` | string | no | Export events occurring or users updated after date and time inclusive |
517
+
518
+
519
+ ## journeys (2 commands)
520
+
521
+ ### journeys list
522
+
523
+ Get journeys (workflows) with optional pagination and state filtering
524
+
525
+ | Option | Type | Required | Description |
526
+ |--------|------|----------|-------------|
527
+ | `--order` | `asc` \| `desc` | no | Sort direction (asc or desc) |
528
+ | `--page` | number | no | Page number (starting at 1) |
529
+ | `--pageSize` | number | no | Number of results per page (max 50) |
530
+ | `--sort` | string | no | Field to sort by |
531
+ | `--state` | string[] | no | Filter by journey state (e.g., ['Archived']) |
532
+
533
+ ### journeys trigger
534
+
535
+ Trigger a journey (workflow) for a user
536
+
537
+ ```
538
+ iterable journeys trigger <workflowId>
539
+ ```
540
+
541
+ | Option | Type | Required | Description |
542
+ |--------|------|----------|-------------|
543
+ | `workflowId` | number | **yes** | Journey/workflow ID to trigger |
544
+ | `--dataFields` | json | no | Data fields for the journey |
545
+ | `--email` | string | no | User email address |
546
+ | `--listId` | number | no | List ID to trigger for (alternative to individual user) |
547
+ | `--userId` | string | no | User ID (alternative to email) |
548
+
549
+
550
+ ## lists (8 commands)
551
+
552
+ ### lists create
553
+
554
+ Create a new user list
555
+
556
+ ```
557
+ iterable lists create <name>
558
+ ```
559
+
560
+ | Option | Type | Required | Description |
561
+ |--------|------|----------|-------------|
562
+ | `name` | string | **yes** | Name of the list to create |
563
+ | `--description` | string | no | Description of the list |
564
+
565
+ ### lists delete
566
+
567
+ Delete a user list
568
+
569
+ ```
570
+ iterable lists delete <listId>
571
+ ```
572
+
573
+ | Option | Type | Required | Description |
574
+ |--------|------|----------|-------------|
575
+ | `listId` | number | **yes** | ID of the list to delete |
576
+
577
+ ### lists get-preview-users
578
+
579
+ Preview users in a list (up to 5000 users)
580
+
581
+ ```
582
+ iterable lists get-preview-users <listId>
583
+ ```
584
+
585
+ | Option | Type | Required | Description |
586
+ |--------|------|----------|-------------|
587
+ | `listId` | number | **yes** | List ID to preview users from |
588
+ | `--preferUserId` | boolean | no | Return userId instead of email when both exist |
589
+ | `--size` | number | no | Number of users to return (max 5000, default 1000) |
590
+
591
+ ### lists get-size
592
+
593
+ Get the count of users in a specific list
594
+
595
+ ```
596
+ iterable lists get-size <listId>
597
+ ```
598
+
599
+ | Option | Type | Required | Description |
600
+ |--------|------|----------|-------------|
601
+ | `listId` | number | **yes** | List ID to get size for |
602
+
603
+ ### lists get-users
604
+
605
+ Get users in a specific list
606
+
607
+ ```
608
+ iterable lists get-users <listId>
609
+ ```
610
+
611
+ | Option | Type | Required | Description |
612
+ |--------|------|----------|-------------|
613
+ | `listId` | number | **yes** | List ID to get users from |
614
+ | `--maxResults` | number | no | Maximum number of users to return |
615
+
616
+ ### lists list
617
+
618
+ Retrieve user lists
619
+
620
+ ### lists subscribe
621
+
622
+ Subscribe users to a specific list
623
+
624
+ ```
625
+ iterable lists subscribe <listId> --subscribers <subscribers...>
626
+ ```
627
+
628
+ | Option | Type | Required | Description |
629
+ |--------|------|----------|-------------|
630
+ | `listId` | number | **yes** | ID of the list to subscribe to |
631
+ | `--subscribers` | json[] | **yes** | Array of users to subscribe |
632
+ | `--updateExistingUsersOnly` | boolean | no | Skip operation for unknown userIds/emails when true |
633
+
634
+ ### lists unsubscribe
635
+
636
+ Unsubscribe users from a specific list
637
+
638
+ ```
639
+ iterable lists unsubscribe <listId> --subscribers <subscribers...>
640
+ ```
641
+
642
+ | Option | Type | Required | Description |
643
+ |--------|------|----------|-------------|
644
+ | `listId` | number | **yes** | List ID to unsubscribe from |
645
+ | `--subscribers` | json[] | **yes** | Users to unsubscribe |
646
+
647
+
648
+ ## messaging (16 commands)
649
+
650
+ ### messaging cancel-email
651
+
652
+ Cancel scheduled email for specific user
653
+
654
+ | Option | Type | Required | Description |
655
+ |--------|------|----------|-------------|
656
+ | `--campaignId` | number | no | Campaign ID to cancel |
657
+ | `--email` | string | no | Email address that identifies a user profile |
658
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
659
+ | `--userId` | string | no | User ID that identifies a user profile |
660
+
661
+ ### messaging cancel-in-app
662
+
663
+ Cancel scheduled in-app message for specific user
664
+
665
+ | Option | Type | Required | Description |
666
+ |--------|------|----------|-------------|
667
+ | `--campaignId` | number | no | Campaign ID to cancel |
668
+ | `--email` | string | no | Email address that identifies a user profile |
669
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
670
+ | `--userId` | string | no | User ID that identifies a user profile |
671
+
672
+ ### messaging cancel-push
673
+
674
+ Cancel scheduled push notification for specific user
675
+
676
+ | Option | Type | Required | Description |
677
+ |--------|------|----------|-------------|
678
+ | `--campaignId` | number | no | Campaign ID to cancel |
679
+ | `--email` | string | no | Email address that identifies a user profile |
680
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
681
+ | `--userId` | string | no | User ID that identifies a user profile |
682
+
683
+ ### messaging cancel-sms
684
+
685
+ Cancel scheduled SMS message for specific user
686
+
687
+ | Option | Type | Required | Description |
688
+ |--------|------|----------|-------------|
689
+ | `--campaignId` | number | no | Campaign ID to cancel |
690
+ | `--email` | string | no | Email address that identifies a user profile |
691
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
692
+ | `--userId` | string | no | User ID that identifies a user profile |
693
+
694
+ ### messaging cancel-web-push
695
+
696
+ Cancel scheduled web push notification for specific user
697
+
698
+ | Option | Type | Required | Description |
699
+ |--------|------|----------|-------------|
700
+ | `--campaignId` | number | no | Campaign ID to cancel |
701
+ | `--email` | string | no | Email address that identifies a user profile |
702
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
703
+ | `--userId` | string | no | User ID that identifies a user profile |
704
+
705
+ ### messaging cancel-whatsapp
706
+
707
+ Cancel scheduled WhatsApp message for specific user
708
+
709
+ | Option | Type | Required | Description |
710
+ |--------|------|----------|-------------|
711
+ | `--campaignId` | number | no | Campaign ID to cancel |
712
+ | `--email` | string | no | Email address that identifies a user profile |
713
+ | `--scheduledMessageId` | number | no | Scheduled message ID to cancel |
714
+ | `--userId` | string | no | User ID that identifies a user profile |
715
+
716
+ ### messaging get-channels
717
+
718
+ Get all available communication channels (email, SMS, push, etc.)
719
+
720
+ ### messaging get-embedded-messages
721
+
722
+ Get embedded messages for a user, grouped by placement ID
723
+
724
+ | Option | Type | Required | Description |
725
+ |--------|------|----------|-------------|
726
+ | `--currentMessageIds` | string[] | no | IDs of embedded messages already retrieved |
727
+ | `--email` | string | no | User email address |
728
+ | `--packageName` | string | no | Package name of the app |
729
+ | `--placementIds` | number[] | no | Placements to include in response |
730
+ | `--platform` | string | no | Platform: iOS, Android, or Web (case-sensitive) |
731
+ | `--sdkVersion` | string | no | Iterable SDK version (e.g., 6.5.0) |
732
+ | `--userId` | string | no | User ID (alternative to email) |
733
+
734
+ ### messaging get-in-app-messages
735
+
736
+ Get in-app messages for a user
737
+
738
+ | Option | Type | Required | Description |
739
+ |--------|------|----------|-------------|
740
+ | `--count` | number | no | Number of messages to retrieve |
741
+ | `--email` | string | no | User email address |
742
+ | `--platform` | `iOS` \| `Android` \| `Web` | no | Platform filter |
743
+ | `--userId` | string | no | User ID (alternative to email) |
744
+
745
+ ### messaging get-message-types
746
+
747
+ Get all message types within the project for use in templates
748
+
749
+ ### messaging send-email
750
+
751
+ Send email to user
752
+
753
+ ```
754
+ iterable messaging send-email <campaignId>
755
+ ```
756
+
757
+ | Option | Type | Required | Description |
758
+ |--------|------|----------|-------------|
759
+ | `campaignId` | number | **yes** | Campaign ID to send |
760
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
761
+ | `--dataFields` | json | no | Data fields for email personalization |
762
+ | `--metadata` | json | no | Additional metadata |
763
+ | `--recipientEmail` | string | no | Recipient email address |
764
+ | `--recipientUserId` | string | no | Recipient user ID (alternative to email) |
765
+ | `--sendAt` | string | no | When to send the email (YYYY-MM-DD HH:MM:SS format) |
766
+
767
+ ### messaging send-in-app
768
+
769
+ Send in-app message to user
770
+
771
+ ```
772
+ iterable messaging send-in-app <campaignId>
773
+ ```
774
+
775
+ | Option | Type | Required | Description |
776
+ |--------|------|----------|-------------|
777
+ | `campaignId` | number | **yes** | Campaign ID to send |
778
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
779
+ | `--dataFields` | json | no | Data fields for personalization |
780
+ | `--metadata` | json | no | Additional metadata |
781
+ | `--recipientEmail` | string | no | Recipient email address |
782
+ | `--recipientUserId` | string | no | Recipient user ID (alternative to email) |
783
+ | `--sendAt` | string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
784
+
785
+ ### messaging send-push
786
+
787
+ Send push notification to user
788
+
789
+ ```
790
+ iterable messaging send-push <campaignId>
791
+ ```
792
+
793
+ | Option | Type | Required | Description |
794
+ |--------|------|----------|-------------|
795
+ | `campaignId` | number | **yes** | Campaign ID to send |
796
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
797
+ | `--dataFields` | json | no | Data fields for personalization |
798
+ | `--metadata` | json | no | Additional metadata |
799
+ | `--recipientEmail` | string | no | Recipient email address |
800
+ | `--recipientUserId` | string | no | Recipient user ID |
801
+ | `--sendAt` | string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
802
+
803
+ ### messaging send-sms
804
+
805
+ Send SMS message to user
806
+
807
+ ```
808
+ iterable messaging send-sms <campaignId>
809
+ ```
810
+
811
+ | Option | Type | Required | Description |
812
+ |--------|------|----------|-------------|
813
+ | `campaignId` | number | **yes** | Campaign ID to send |
814
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
815
+ | `--dataFields` | json | no | Data fields for personalization |
816
+ | `--metadata` | json | no | Additional metadata |
817
+ | `--recipientEmail` | string | no | Recipient email address |
818
+ | `--recipientPhone` | string | no | Recipient phone number |
819
+ | `--recipientUserId` | string | no | Recipient user ID |
820
+ | `--sendAt` | string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
821
+
822
+ ### messaging send-web-push
823
+
824
+ Send web push notification to user
825
+
826
+ ```
827
+ iterable messaging send-web-push <campaignId>
828
+ ```
829
+
830
+ | Option | Type | Required | Description |
831
+ |--------|------|----------|-------------|
832
+ | `campaignId` | number | **yes** | Campaign ID to send |
833
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
834
+ | `--dataFields` | json | no | Data fields for personalization |
835
+ | `--metadata` | json | no | Additional metadata |
836
+ | `--recipientEmail` | string | no | Recipient email address |
837
+ | `--recipientUserId` | string | no | Recipient user ID |
838
+ | `--sendAt` | string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
839
+
840
+ ### messaging send-whatsapp
841
+
842
+ Send WhatsApp message to user
843
+
844
+ ```
845
+ iterable messaging send-whatsapp <campaignId>
846
+ ```
847
+
848
+ | Option | Type | Required | Description |
849
+ |--------|------|----------|-------------|
850
+ | `campaignId` | number | **yes** | Campaign ID to send |
851
+ | `--allowRepeatMarketingSends` | boolean | no | Allow repeat marketing sends |
852
+ | `--dataFields` | json | no | Data fields for personalization |
853
+ | `--metadata` | json | no | Additional metadata |
854
+ | `--recipientEmail` | string | no | Recipient email address |
855
+ | `--recipientPhone` | string | no | Recipient phone number |
856
+ | `--recipientUserId` | string | no | Recipient user ID |
857
+ | `--sendAt` | string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
858
+
859
+
860
+ ## snippets (5 commands)
861
+
862
+ ### snippets create
863
+
864
+ Create a new snippet with Handlebars templating support
865
+
866
+ ```
867
+ iterable snippets create --content <content> --name <name>
868
+ ```
869
+
870
+ | Option | Type | Required | Description |
871
+ |--------|------|----------|-------------|
872
+ | `--content` | string | **yes** | Content of the snippet. Handlebars must be valid. Disallowed content: script tags with JS sources or non-JSON content, inline JS event handlers (e.g., onload="..."), and javascript: in href or src attributes (anchors and iframes). |
873
+ | `--name` | string | **yes** | Name of the snippet. Must be unique within the project, up to 100 characters (a-z, A-Z, 0-9, hyphens (-), underscores (_), and spaces). Cannot be changed after snippet is created. |
874
+ | `--createdByUserId` | string | no | User ID (email) of the creator. If not provided, defaults to the project creator. |
875
+ | `--description` | string | no | Description of the snippet |
876
+ | `--variables` | string[] | no | A list of variable names used in the content with a Handlebars expression such as {{#if (eq myVariable "someValue")}}. Variable names are case-sensitive and should be simple identifiers (letters, numbers, underscores). To learn more about using variables in Snippets, see Customizing Snippets with Variables. |
877
+
878
+ ### snippets delete
879
+
880
+ Delete a snippet by ID (numeric) or name (string)
881
+
882
+ ```
883
+ iterable snippets delete <identifier>
884
+ ```
885
+
886
+ | Option | Type | Required | Description |
887
+ |--------|------|----------|-------------|
888
+ | `identifier` | string | **yes** | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
889
+
890
+ ### snippets get
891
+
892
+ Get a snippet by ID (numeric) or name (string)
893
+
894
+ ```
895
+ iterable snippets get <identifier>
896
+ ```
897
+
898
+ | Option | Type | Required | Description |
899
+ |--------|------|----------|-------------|
900
+ | `identifier` | string | **yes** | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
901
+
902
+ ### snippets list
903
+
904
+ Get all snippets for the current project
905
+
906
+ ### snippets update
907
+
908
+ Update a snippet by ID (numeric) or name (string)
909
+
910
+ ```
911
+ iterable snippets update --content <content> --identifier <identifier>
912
+ ```
913
+
914
+ | Option | Type | Required | Description |
915
+ |--------|------|----------|-------------|
916
+ | `--content` | string | **yes** | Content of the snippet. Handlebars must be valid. Disallowed content: script tags with JS sources or non-JSON content, inline JS event handlers (e.g., onload="..."), and javascript: in href or src attributes (anchors and iframes). |
917
+ | `--identifier` | string | **yes** | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
918
+ | `--createdByUserId` | string | no | User ID (email) of the updater. If not provided, defaults to the project creator. |
919
+ | `--description` | string | no | Description of the snippet |
920
+ | `--variables` | string[] | no | List of variable names used in the content with a Handlebars expression such as {{myField}}. Variable names are case-sensitive and should be simple identifiers (letters, numbers, underscores). To learn more about using Handlebars in Snippets, see Customizing Snippets with Variables. |
921
+
922
+
923
+ ## subscriptions (5 commands)
924
+
925
+ ### subscriptions bulk-update
926
+
927
+ Subscribe or unsubscribe multiple users to/from a subscription group
928
+
929
+ ```
930
+ iterable subscriptions bulk-update --action <action> --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId>
931
+ ```
932
+
933
+ | Option | Type | Required | Description |
934
+ |--------|------|----------|-------------|
935
+ | `--action` | `subscribe` \| `unsubscribe` | **yes** | Action to perform: subscribe or unsubscribe |
936
+ | `--subscriptionGroup` | `emailList` \| `messageType` \| `messageChannel` | **yes** | Type of subscription group |
937
+ | `--subscriptionGroupId` | number | **yes** | Subscription Group Id |
938
+ | `--users` | string[] | no | Users to subscribe/unsubscribe, identified by email |
939
+ | `--usersByUserId` | string[] | no | Users to subscribe/unsubscribe, identified by userId |
940
+
941
+ ### subscriptions subscribe-by-email
942
+
943
+ Subscribe a user to a subscription group by email
944
+
945
+ ```
946
+ iterable subscriptions subscribe-by-email --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userEmail <userEmail>
947
+ ```
948
+
949
+ | Option | Type | Required | Description |
950
+ |--------|------|----------|-------------|
951
+ | `--subscriptionGroup` | `emailList` \| `messageType` \| `messageChannel` | **yes** | Type of subscription group |
952
+ | `--subscriptionGroupId` | number | **yes** | Subscription Group Id |
953
+ | `--userEmail` | string | **yes** | User's email address |
954
+
955
+ ### subscriptions subscribe-by-userid
956
+
957
+ Subscribe a user to a subscription group by userId
958
+
959
+ ```
960
+ iterable subscriptions subscribe-by-userid --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userId <userId>
961
+ ```
962
+
963
+ | Option | Type | Required | Description |
964
+ |--------|------|----------|-------------|
965
+ | `--subscriptionGroup` | `emailList` \| `messageType` \| `messageChannel` | **yes** | Type of subscription group |
966
+ | `--subscriptionGroupId` | number | **yes** | Subscription Group Id |
967
+ | `--userId` | string | **yes** | User's userId |
968
+
969
+ ### subscriptions unsubscribe-by-email
970
+
971
+ Unsubscribe a user from a subscription group by email
972
+
973
+ ```
974
+ iterable subscriptions unsubscribe-by-email --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userEmail <userEmail>
975
+ ```
976
+
977
+ | Option | Type | Required | Description |
978
+ |--------|------|----------|-------------|
979
+ | `--subscriptionGroup` | `emailList` \| `messageType` \| `messageChannel` | **yes** | Type of subscription group |
980
+ | `--subscriptionGroupId` | number | **yes** | Subscription Group Id |
981
+ | `--userEmail` | string | **yes** | User's email address |
982
+
983
+ ### subscriptions unsubscribe-by-userid
984
+
985
+ Unsubscribe a user from a subscription group by userId
986
+
987
+ ```
988
+ iterable subscriptions unsubscribe-by-userid --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userId <userId>
989
+ ```
990
+
991
+ | Option | Type | Required | Description |
992
+ |--------|------|----------|-------------|
993
+ | `--subscriptionGroup` | `emailList` \| `messageType` \| `messageChannel` | **yes** | Type of subscription group |
994
+ | `--subscriptionGroupId` | number | **yes** | Subscription Group Id |
995
+ | `--userId` | string | **yes** | User's userId |
996
+
997
+
998
+ ## templates (21 commands)
999
+
1000
+ ### templates delete
1001
+
1002
+ Delete one or more templates by ID
1003
+
1004
+ ```
1005
+ iterable templates delete <ids...>
1006
+ ```
1007
+
1008
+ | Option | Type | Required | Description |
1009
+ |--------|------|----------|-------------|
1010
+ | `ids` | number[] | **yes** | IDs of templates to delete |
1011
+
1012
+ ### templates get-by-client-id
1013
+
1014
+ Get template by client template ID
1015
+
1016
+ ```
1017
+ iterable templates get-by-client-id <clientTemplateId>
1018
+ ```
1019
+
1020
+ | Option | Type | Required | Description |
1021
+ |--------|------|----------|-------------|
1022
+ | `clientTemplateId` | string | **yes** | Client template ID to look up template by |
1023
+
1024
+ ### templates get-email
1025
+
1026
+ Get details for specific email template by ID
1027
+
1028
+ ```
1029
+ iterable templates get-email <templateId>
1030
+ ```
1031
+
1032
+ | Option | Type | Required | Description |
1033
+ |--------|------|----------|-------------|
1034
+ | `templateId` | number | **yes** | Template ID to retrieve |
1035
+ | `--locale` | string | no | Locale of content to get |
1036
+
1037
+ ### templates get-inapp
1038
+
1039
+ Get details for specific in-app message template by ID
1040
+
1041
+ ```
1042
+ iterable templates get-inapp <templateId>
1043
+ ```
1044
+
1045
+ | Option | Type | Required | Description |
1046
+ |--------|------|----------|-------------|
1047
+ | `templateId` | number | **yes** | Template ID to retrieve |
1048
+ | `--locale` | string | no | Locale of content to get |
1049
+
1050
+ ### templates get-push
1051
+
1052
+ Get details for specific push notification template by ID
1053
+
1054
+ ```
1055
+ iterable templates get-push <templateId>
1056
+ ```
1057
+
1058
+ | Option | Type | Required | Description |
1059
+ |--------|------|----------|-------------|
1060
+ | `templateId` | number | **yes** | Template ID to retrieve |
1061
+ | `--locale` | string | no | Locale of content to get |
1062
+
1063
+ ### templates get-sms
1064
+
1065
+ Get details for specific SMS template by ID
1066
+
1067
+ ```
1068
+ iterable templates get-sms <templateId>
1069
+ ```
1070
+
1071
+ | Option | Type | Required | Description |
1072
+ |--------|------|----------|-------------|
1073
+ | `templateId` | number | **yes** | Template ID to retrieve |
1074
+ | `--locale` | string | no | Locale of content to get |
1075
+
1076
+ ### templates list
1077
+
1078
+ Retrieve templates
1079
+
1080
+ | Option | Type | Required | Description |
1081
+ |--------|------|----------|-------------|
1082
+ | `--endDateTime` | string | no | Get templates created before this date time (yyyy-MM-dd HH:mm:ss [ZZ]) |
1083
+ | `--messageMedium` | `Email` \| `Push` \| `InApp` \| `SMS` | no | Filter by message medium |
1084
+ | `--order` | `asc` \| `desc` | no | Sort direction (asc or desc) |
1085
+ | `--page` | number | no | Page number (starting at 1) |
1086
+ | `--pageSize` | number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
1087
+ | `--sort` | string | no | Field to sort by |
1088
+ | `--startDateTime` | string | no | Get templates created at or after this date time (yyyy-MM-dd HH:mm:ss [ZZ]) |
1089
+ | `--templateType` | `Base` \| `Blast` \| `Triggered` \| `Workflow` | no | Filter by template type |
1090
+
1091
+ ### templates preview-email
1092
+
1093
+ Preview email template with custom data. Returns fully rendered HTML.
1094
+
1095
+ ```
1096
+ iterable templates preview-email <templateId>
1097
+ ```
1098
+
1099
+ | Option | Type | Required | Description |
1100
+ |--------|------|----------|-------------|
1101
+ | `templateId` | number | **yes** | Template ID |
1102
+ | `--data` | json | no | Data to use for template rendering (JSON: {dataFields, dataFeed, fetchDataFeeds}) |
1103
+ | `--locale` | string | no | Locale of content to get |
1104
+
1105
+ ### templates preview-inapp
1106
+
1107
+ Preview in-app message template with custom data. Returns fully rendered HTML.
1108
+
1109
+ ```
1110
+ iterable templates preview-inapp <templateId>
1111
+ ```
1112
+
1113
+ | Option | Type | Required | Description |
1114
+ |--------|------|----------|-------------|
1115
+ | `templateId` | number | **yes** | Template ID |
1116
+ | `--data` | json | no | Data to use for template rendering (JSON: {dataFields, dataFeed, fetchDataFeeds}) |
1117
+ | `--locale` | string | no | Locale of content to get |
1118
+
1119
+ ### templates proof-email
1120
+
1121
+ Send a proof of an email template to a specific user
1122
+
1123
+ ```
1124
+ iterable templates proof-email <templateId>
1125
+ ```
1126
+
1127
+ | Option | Type | Required | Description |
1128
+ |--------|------|----------|-------------|
1129
+ | `templateId` | number | **yes** | Template ID to send proof for |
1130
+ | `--dataFields` | json | no | Fields to merge into template for proof |
1131
+ | `--locale` | string | no | Locale for the proof message. If provided, must be a valid locale for the project. If not provided, falls back to the user's locale, then to the project's default locale. |
1132
+ | `--recipientEmail` | string | no | An email address that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1133
+ | `--recipientUserId` | string | no | A user ID that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1134
+
1135
+ ### templates proof-inapp
1136
+
1137
+ Send a proof of an in-app message template to a specific user
1138
+
1139
+ ```
1140
+ iterable templates proof-inapp <templateId>
1141
+ ```
1142
+
1143
+ | Option | Type | Required | Description |
1144
+ |--------|------|----------|-------------|
1145
+ | `templateId` | number | **yes** | Template ID to send proof for |
1146
+ | `--dataFields` | json | no | Fields to merge into template for proof |
1147
+ | `--locale` | string | no | Locale for the proof message. If provided, must be a valid locale for the project. If not provided, falls back to the user's locale, then to the project's default locale. |
1148
+ | `--recipientEmail` | string | no | An email address that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1149
+ | `--recipientUserId` | string | no | A user ID that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1150
+
1151
+ ### templates proof-push
1152
+
1153
+ Send a proof of a push notification template to a specific user
1154
+
1155
+ ```
1156
+ iterable templates proof-push <templateId>
1157
+ ```
1158
+
1159
+ | Option | Type | Required | Description |
1160
+ |--------|------|----------|-------------|
1161
+ | `templateId` | number | **yes** | Template ID to send proof for |
1162
+ | `--dataFields` | json | no | Fields to merge into template for proof |
1163
+ | `--locale` | string | no | Locale for the proof message. If provided, must be a valid locale for the project. If not provided, falls back to the user's locale, then to the project's default locale. |
1164
+ | `--recipientEmail` | string | no | An email address that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1165
+ | `--recipientUserId` | string | no | A user ID that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1166
+
1167
+ ### templates proof-sms
1168
+
1169
+ Send a proof of an SMS template to a specific user
1170
+
1171
+ ```
1172
+ iterable templates proof-sms <templateId>
1173
+ ```
1174
+
1175
+ | Option | Type | Required | Description |
1176
+ |--------|------|----------|-------------|
1177
+ | `templateId` | number | **yes** | Template ID to send proof for |
1178
+ | `--dataFields` | json | no | Fields to merge into template for proof |
1179
+ | `--locale` | string | no | Locale for the proof message. If provided, must be a valid locale for the project. If not provided, falls back to the user's locale, then to the project's default locale. |
1180
+ | `--recipientEmail` | string | no | An email address that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1181
+ | `--recipientUserId` | string | no | A user ID that identifies a user profile in Iterable. Provide a recipientEmail or a recipientUserId (but not both), depending on how your project identifies users. |
1182
+
1183
+ ### templates update-email
1184
+
1185
+ Update existing email template by templateId
1186
+
1187
+ ```
1188
+ iterable templates update-email <templateId>
1189
+ ```
1190
+
1191
+ | Option | Type | Required | Description |
1192
+ |--------|------|----------|-------------|
1193
+ | `templateId` | number | **yes** | Template ID to update |
1194
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1195
+ | `--campaignId` | number | no | Associated campaign ID |
1196
+ | `--creatorUserId` | string | no | Creator user ID |
1197
+ | `--fromEmail` | string | no | From email |
1198
+ | `--fromName` | string | no | From name |
1199
+ | `--html` | string | no | HTML content |
1200
+ | `--locale` | string | no | Template locale |
1201
+ | `--messageTypeId` | number | no | Message type ID |
1202
+ | `--name` | string | no | Template name |
1203
+ | `--plainText` | string | no | Plain text content |
1204
+ | `--subject` | string | no | Email subject |
1205
+
1206
+ ### templates update-inapp
1207
+
1208
+ Update existing in-app message template by templateId
1209
+
1210
+ ```
1211
+ iterable templates update-inapp <templateId>
1212
+ ```
1213
+
1214
+ | Option | Type | Required | Description |
1215
+ |--------|------|----------|-------------|
1216
+ | `templateId` | number | **yes** | Template ID to update |
1217
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1218
+ | `--campaignId` | number | no | Associated campaign ID |
1219
+ | `--creatorUserId` | string | no | Creator user ID |
1220
+ | `--html` | string | no | HTML content of the in-app notification |
1221
+ | `--locale` | string | no | Template locale |
1222
+ | `--messageTypeId` | number | no | Message type ID |
1223
+ | `--name` | string | no | Template name |
1224
+
1225
+ ### templates update-push
1226
+
1227
+ Update existing push notification template by templateId
1228
+
1229
+ ```
1230
+ iterable templates update-push <templateId>
1231
+ ```
1232
+
1233
+ | Option | Type | Required | Description |
1234
+ |--------|------|----------|-------------|
1235
+ | `templateId` | number | **yes** | Template ID to update |
1236
+ | `--badge` | number | no | Badge count |
1237
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1238
+ | `--campaignId` | number | no | Associated campaign ID |
1239
+ | `--creatorUserId` | string | no | Creator user ID |
1240
+ | `--locale` | string | no | Template locale |
1241
+ | `--message` | string | no | Push notification message |
1242
+ | `--messageTypeId` | number | no | Message type ID |
1243
+ | `--name` | string | no | Template name |
1244
+ | `--payload` | json | no | Custom payload |
1245
+ | `--sound` | string | no | Sound file |
1246
+ | `--title` | string | no | Push notification title |
1247
+
1248
+ ### templates update-sms
1249
+
1250
+ Update existing SMS template by templateId
1251
+
1252
+ ```
1253
+ iterable templates update-sms <templateId>
1254
+ ```
1255
+
1256
+ | Option | Type | Required | Description |
1257
+ |--------|------|----------|-------------|
1258
+ | `templateId` | number | **yes** | Template ID to update |
1259
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1260
+ | `--campaignId` | number | no | Associated campaign ID |
1261
+ | `--creatorUserId` | string | no | Creator user ID |
1262
+ | `--locale` | string | no | Template locale |
1263
+ | `--message` | string | no | SMS message content |
1264
+ | `--messageTypeId` | number | no | Message type ID |
1265
+ | `--name` | string | no | Template name |
1266
+
1267
+ ### templates upsert-email
1268
+
1269
+ Create or update email template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
1270
+
1271
+ ```
1272
+ iterable templates upsert-email <clientTemplateId>
1273
+ ```
1274
+
1275
+ | Option | Type | Required | Description |
1276
+ |--------|------|----------|-------------|
1277
+ | `clientTemplateId` | string | **yes** | Client template ID |
1278
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1279
+ | `--campaignId` | number | no | Associated campaign ID |
1280
+ | `--creatorUserId` | string | no | Creator user ID |
1281
+ | `--fromEmail` | string | no | From email |
1282
+ | `--fromName` | string | no | From name |
1283
+ | `--html` | string | no | HTML content |
1284
+ | `--locale` | string | no | Template locale |
1285
+ | `--messageTypeId` | number | no | Message type ID |
1286
+ | `--name` | string | no | Template name |
1287
+ | `--plainText` | string | no | Plain text content |
1288
+ | `--subject` | string | no | Email subject |
1289
+
1290
+ ### templates upsert-inapp
1291
+
1292
+ Create or update in-app message template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
1293
+
1294
+ ```
1295
+ iterable templates upsert-inapp <clientTemplateId>
1296
+ ```
1297
+
1298
+ | Option | Type | Required | Description |
1299
+ |--------|------|----------|-------------|
1300
+ | `clientTemplateId` | string | **yes** | Client template ID |
1301
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1302
+ | `--campaignId` | number | no | Associated campaign ID |
1303
+ | `--creatorUserId` | string | no | Creator user ID |
1304
+ | `--html` | string | no | HTML content of the in-app notification |
1305
+ | `--locale` | string | no | Template locale |
1306
+ | `--messageTypeId` | number | no | Message type ID |
1307
+ | `--name` | string | no | Template name |
1308
+
1309
+ ### templates upsert-push
1310
+
1311
+ Create or update push notification template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
1312
+
1313
+ ```
1314
+ iterable templates upsert-push <clientTemplateId>
1315
+ ```
1316
+
1317
+ | Option | Type | Required | Description |
1318
+ |--------|------|----------|-------------|
1319
+ | `clientTemplateId` | string | **yes** | Client template ID |
1320
+ | `--badge` | number | no | Badge count |
1321
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1322
+ | `--campaignId` | number | no | Associated campaign ID |
1323
+ | `--creatorUserId` | string | no | Creator user ID |
1324
+ | `--locale` | string | no | Template locale |
1325
+ | `--message` | string | no | Push notification message |
1326
+ | `--messageTypeId` | number | no | Message type ID |
1327
+ | `--name` | string | no | Template name |
1328
+ | `--payload` | json | no | Custom payload |
1329
+ | `--sound` | string | no | Sound file |
1330
+ | `--title` | string | no | Push notification title |
1331
+
1332
+ ### templates upsert-sms
1333
+
1334
+ Create or update SMS template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
1335
+
1336
+ ```
1337
+ iterable templates upsert-sms <clientTemplateId>
1338
+ ```
1339
+
1340
+ | Option | Type | Required | Description |
1341
+ |--------|------|----------|-------------|
1342
+ | `clientTemplateId` | string | **yes** | Client template ID |
1343
+ | `--campaignDataFields` | json | no | Campaign-level data fields available as {{field}} merge parameters during message rendering. These fields are overridden by user and event data fields of the same name. |
1344
+ | `--campaignId` | number | no | Associated campaign ID |
1345
+ | `--creatorUserId` | string | no | Creator user ID |
1346
+ | `--locale` | string | no | Template locale |
1347
+ | `--message` | string | no | SMS message content |
1348
+ | `--messageTypeId` | number | no | Message type ID |
1349
+ | `--name` | string | no | Template name |
1350
+
1351
+
1352
+ ## users (12 commands)
1353
+
1354
+ ### users bulk-update
1355
+
1356
+ Update multiple users at once
1357
+
1358
+ ```
1359
+ iterable users bulk-update --users <users...>
1360
+ ```
1361
+
1362
+ | Option | Type | Required | Description |
1363
+ |--------|------|----------|-------------|
1364
+ | `--users` | json[] | **yes** | Array of users to update |
1365
+
1366
+ ### users delete *(alias)*
1367
+
1368
+ Delete a user by email or userId (auto-detected)
1369
+
1370
+ ```
1371
+ iterable users delete <identifier>
1372
+ ```
1373
+
1374
+ | Option | Type | Required | Description |
1375
+ |--------|------|----------|-------------|
1376
+ | `identifier` | string | **yes** | Email address or userId |
1377
+
1378
+ ### users delete-by-email
1379
+
1380
+ Delete a user by email address (asynchronous)
1381
+
1382
+ ```
1383
+ iterable users delete-by-email <email>
1384
+ ```
1385
+
1386
+ | Option | Type | Required | Description |
1387
+ |--------|------|----------|-------------|
1388
+ | `email` | string | **yes** | Email address of the user to delete |
1389
+
1390
+ ### users delete-by-userid
1391
+
1392
+ Delete a user by user ID (asynchronous, deletes all users with same userId)
1393
+
1394
+ ```
1395
+ iterable users delete-by-userid <userId>
1396
+ ```
1397
+
1398
+ | Option | Type | Required | Description |
1399
+ |--------|------|----------|-------------|
1400
+ | `userId` | string | **yes** | User ID of the user to delete |
1401
+
1402
+ ### users get *(alias)*
1403
+
1404
+ Get a user by email or userId (auto-detected)
1405
+
1406
+ ```
1407
+ iterable users get <identifier>
1408
+ ```
1409
+
1410
+ | Option | Type | Required | Description |
1411
+ |--------|------|----------|-------------|
1412
+ | `identifier` | string | **yes** | Email address or userId |
1413
+
1414
+ ### users get-by-email
1415
+
1416
+ Get user profile information by email address
1417
+
1418
+ ```
1419
+ iterable users get-by-email <email>
1420
+ ```
1421
+
1422
+ | Option | Type | Required | Description |
1423
+ |--------|------|----------|-------------|
1424
+ | `email` | string | **yes** | Email address of the user to retrieve |
1425
+
1426
+ ### users get-by-userid
1427
+
1428
+ Get user profile information by user ID
1429
+
1430
+ ```
1431
+ iterable users get-by-userid <userId>
1432
+ ```
1433
+
1434
+ | Option | Type | Required | Description |
1435
+ |--------|------|----------|-------------|
1436
+ | `userId` | string | **yes** | User ID to retrieve |
1437
+
1438
+ ### users get-fields
1439
+
1440
+ Get all user profile field definitions and their types
1441
+
1442
+ ### users get-sent-messages
1443
+
1444
+ Get messages sent to a specific user with optional filtering
1445
+
1446
+ | Option | Type | Required | Description |
1447
+ |--------|------|----------|-------------|
1448
+ | `--campaignIds` | number[] | no | Only include messages from these campaigns |
1449
+ | `--email` | string | no | User email address |
1450
+ | `--endDateTime` | string | no | End date time (yyyy-MM-dd HH:mm:ss ZZ) |
1451
+ | `--excludeBlastCampaigns` | boolean | no | Exclude results from blast campaigns |
1452
+ | `--limit` | number | no | Maximum number of messages to return (default: 10, max: 1000) |
1453
+ | `--messageMedium` | `Email` \| `Push` \| `InApp` \| `SMS` | no | Only include messages of this type |
1454
+ | `--startDateTime` | string | no | Start date time (yyyy-MM-dd HH:mm:ss ZZ) |
1455
+ | `--userId` | string | no | User ID (alternative to email) |
1456
+
1457
+ ### users update
1458
+
1459
+ Update user profile information (accepts email OR userId)
1460
+
1461
+ | Option | Type | Required | Description |
1462
+ |--------|------|----------|-------------|
1463
+ | `--createNewFields` | boolean | no | Whether new fields should be ingested and added to the schema |
1464
+ | `--dataFields` | json | no | User data fields to update |
1465
+ | `--email` | string | no | User email address |
1466
+ | `--mergeNestedObjects` | boolean | no | Merge top-level objects instead of overwriting them |
1467
+ | `--preferUserId` | boolean | no | Whether to create new user if userId doesn't exist (email-based projects only) |
1468
+ | `--userId` | string | no | User ID (alternative to email) |
1469
+
1470
+ ### users update-email
1471
+
1472
+ Update a user's email address (only for email-based projects)
1473
+
1474
+ ```
1475
+ iterable users update-email <newEmail>
1476
+ ```
1477
+
1478
+ | Option | Type | Required | Description |
1479
+ |--------|------|----------|-------------|
1480
+ | `newEmail` | string | **yes** | The new email address to assign to the specified user. |
1481
+ | `--currentEmail` | string | no | An email address that identifies a user profile in Iterable. Provide a currentEmail or a currentUserId (but not both), depending on how your project identifies users. |
1482
+ | `--currentUserId` | string | no | A user ID that identifies a user profile in Iterable. Provide a currentEmail or a currentUserId (but not both), depending on how your project identifies users. |
1483
+
1484
+ ### users update-subscriptions
1485
+
1486
+ Update user subscriptions (overwrites existing data for any non-null fields specified)
1487
+
1488
+ | Option | Type | Required | Description |
1489
+ |--------|------|----------|-------------|
1490
+ | `--campaignId` | number | no | Campaign to attribute unsubscribes |
1491
+ | `--email` | string | no | An email address that identifies a user profile in Iterable. For each user in your request, provide an email or a userId (but not both), depending on how your project identifies users. |
1492
+ | `--emailListIds` | number[] | no | Lists that a user is subscribed to |
1493
+ | `--subscribedMessageTypeIds` | number[] | no | Individual message type IDs to subscribe (does not impact channel subscriptions). To set a value for this field, first have your CSM enable the opt-in message types feature. Otherwise, attempting to set this field causes an error. |
1494
+ | `--templateId` | number | no | Template to attribute unsubscribes |
1495
+ | `--unsubscribedChannelIds` | number[] | no | Email channel ids to unsubscribe from |
1496
+ | `--unsubscribedMessageTypeIds` | number[] | no | Individual message type IDs to unsubscribe (does not impact channel subscriptions). |
1497
+ | `--userId` | string | no | A user ID that identifies a user profile in Iterable. For each user in your request, provide an email or a userId (but not both), depending on how your project identifies users. |
1498
+ | `--validateChannelAlignment` | boolean | no | Defaults to true (validation enabled). When false, allows subscribing users to message types that belong to unsubscribed channels. By default, Iterable validates that subscribed message types belong to subscribed channels. Setting this to false bypasses this validation, allowing you to save message type preferences even when the parent channel is unsubscribed. Users won't receive messages from these types while the channel remains unsubscribed, but their preferences are preserved for when the channel becomes subscribed. |
1499
+
1500
+
1501
+ ## webhooks (2 commands)
1502
+
1503
+ ### webhooks list
1504
+
1505
+ Get all webhooks for the project
1506
+
1507
+ ### webhooks update
1508
+
1509
+ Update a webhook configuration
1510
+
1511
+ ```
1512
+ iterable webhooks update <webhookId>
1513
+ ```
1514
+
1515
+ | Option | Type | Required | Description |
1516
+ |--------|------|----------|-------------|
1517
+ | `webhookId` | number | **yes** | Webhook ID to update |
1518
+ | `--active` | boolean | no | Whether webhook is active |
1519
+ | `--events` | string[] | no | Events to subscribe to |
1520
+ | `--url` | string | no | Webhook URL |
1521
+
1522
+
1523
+ ## keys
1524
+
1525
+ Manage stored API keys.
1526
+
1527
+ ### keys list
1528
+
1529
+ View all stored API keys
1530
+
1531
+ ```
1532
+ iterable keys list
1533
+ ```
1534
+
1535
+ ### keys add
1536
+
1537
+ Add a new API key
1538
+
1539
+ ```
1540
+ iterable keys add
1541
+ ```
1542
+
1543
+ ### keys update <name-or-id>
1544
+
1545
+ Update an existing key's settings
1546
+
1547
+ ```
1548
+ iterable keys update <name-or-id>
1549
+ ```
1550
+
1551
+ ### keys activate <name-or-id>
1552
+
1553
+ Switch to a different key
1554
+
1555
+ ```
1556
+ iterable keys activate <name-or-id>
1557
+ ```
1558
+
1559
+ ### keys deactivate
1560
+
1561
+ Deactivate the current key
1562
+
1563
+ ```
1564
+ iterable keys deactivate
1565
+ ```
1566
+
1567
+ ### keys delete <name-or-id>
1568
+
1569
+ Remove a key by ID or name
1570
+
1571
+ ```
1572
+ iterable keys delete <name-or-id>
1573
+ ```
1574
+