All commands follow the pattern: iterable <category> <command> [options]
Every command also accepts --json <data> for raw JSON input and --help for usage details.
Abort a campaign that is currently running
iterable campaigns abort <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to abort |
Activate a triggered campaign
iterable campaigns activate <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Triggered campaign ID to activate |
Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted.
iterable campaigns archive <campaignIds...>
| Option | Type | Required | Description |
|---|---|---|---|
campaignIds |
number[] | yes | Campaign IDs to archive |
Cancel a scheduled or recurring campaign
iterable campaigns cancel <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to cancel |
Create a new blast campaign from an existing template. The campaign is created without being scheduled. Use schedule to schedule it for delivery.
iterable campaigns create-blast --listIds <listIds...> --name <name> --templateId <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
--listIds |
number[] | yes | Array of list IDs to which the campaign should be sent |
--name |
string | yes | The name to use in Iterable for the new campaign |
--templateId |
number | yes | The ID of a template to associate with the new campaign |
--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. |
--suppressionListIds |
number[] | no | Array of suppression list IDs |
Create a new triggered campaign from an existing template. The campaign is created in Ready state and must be activated before it can send.
iterable campaigns create-triggered --name <name> --templateId <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
--name |
string | yes | The name to use in Iterable for the new campaign |
--templateId |
number | yes | The ID of a template to associate with the new campaign |
--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. |
Deactivate a triggered campaign
iterable campaigns deactivate <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Triggered campaign ID to deactivate |
Get detailed information about a specific campaign
iterable campaigns get <id>
| Option | Type | Required | Description |
|---|---|---|---|
id |
number | yes | Campaign ID to retrieve |
Get child campaigns generated by a recurring campaign
iterable campaigns get-children <id>
| Option | Type | Required | Description |
|---|---|---|---|
id |
number | yes | ID of the recurring campaign |
--order |
asc | desc |
no | Sort direction (asc or desc) |
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
--sort |
string | no | Field to sort by |
Get campaign performance metrics
iterable campaigns get-metrics <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to get metrics for |
--endDateTime |
string | no | End date for metrics (YYYY-MM-DD HH:MM:SS format) |
--startDateTime |
string | no | Start date for metrics (YYYY-MM-DD HH:MM:SS format) |
Retrieve campaigns
iterable campaigns list
| Option | Type | Required | Description |
|---|---|---|---|
--campaignState |
Draft | Ready | Scheduled | Running | Finished | Starting | Aborted | Recurring | Archived |
no | Filter campaigns by state |
--order |
asc | desc |
no | Sort direction (asc or desc) |
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
--sort |
string | no | Field to sort by |
Schedule an existing campaign to be sent at a specific time
iterable campaigns schedule <campaignId> --sendAt <sendAt>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to schedule |
--sendAt |
string | yes | When to send (ISO-8601 format, e.g. 2024-12-20T10:15:30Z) |
--recipientTimeZone |
json | no | Recipient timezone configuration (JSON: {defaultTimeZone, startTimeZone}) |
Send an existing scheduled campaign immediately
iterable campaigns send <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send now |
Trigger a campaign to send to specified lists
iterable campaigns trigger --campaignId <campaignId> --listIds <listIds...>
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | yes | Campaign ID to trigger |
--listIds |
number[] | yes | A non-empty array of list IDs to send to |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends? Defaults to true. |
--dataFields |
json | no | Fields to merge into handlebars context |
--suppressionListIds |
number[] | no | Lists to suppress |
Bulk delete catalog items by their IDs
iterable catalogs bulk-delete-items --catalogName <catalogName> --itemIds <itemIds...>
| Option | Type | Required | Description |
|---|---|---|---|
--catalogName |
string | yes | Name of the catalog |
--itemIds |
string[] | yes | Array of item IDs to delete |
Create a new catalog
iterable catalogs create <catalogName>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Catalog name (alphanumeric and dashes only, max 255 chars) |
Delete a catalog
iterable catalogs delete <catalogName>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Name of the catalog to delete |
Delete a specific catalog item by ID
iterable catalogs delete-item --catalogName <catalogName> --itemId <itemId>
| Option | Type | Required | Description |
|---|---|---|---|
--catalogName |
string | yes | Name of the catalog |
--itemId |
string | yes | ID of the catalog item to delete |
Get field mappings and data types for a catalog
iterable catalogs get-field-mappings <catalogName>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Name of the catalog |
Get a specific catalog item by ID
iterable catalogs get-item --catalogName <catalogName> --itemId <itemId>
| Option | Type | Required | Description |
|---|---|---|---|
--catalogName |
string | yes | Name of the catalog |
--itemId |
string | yes | ID of the catalog item to retrieve |
Get items from a catalog with optional pagination and sorting
iterable catalogs get-items <catalogName>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Name of the catalog |
--orderBy |
string | no | Field by which results should be ordered |
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results per page (defaults to 10, max 1000) |
--sortAscending |
boolean | no | Sort results by ascending (defaults to false) |
Get list of all catalogs with optional pagination
iterable catalogs list
| Option | Type | Required | Description |
|---|---|---|---|
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results per page (max 100) |
Partial update (PATCH) a catalog item - updates only specified fields
iterable catalogs partial-update-item --catalogName <catalogName> --itemId <itemId> --update <json>
| Option | Type | Required | Description |
|---|---|---|---|
--catalogName |
string | yes | Name of the catalog |
--itemId |
string | yes | ID of the catalog item |
--update |
json | yes | Fields to update |
Replace (PUT) a catalog item - replaces the entire item with new value
iterable catalogs replace-item --catalogName <catalogName> --itemId <itemId> --value <json>
| Option | Type | Required | Description |
|---|---|---|---|
--catalogName |
string | yes | Name of the catalog |
--itemId |
string | yes | ID of the catalog item |
--value |
json | yes | New value for the item |
Update catalog field mappings (data types)
iterable catalogs update-field-mappings <catalogName> --mappingsUpdates <mappingsUpdates...>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Name of the catalog |
--mappingsUpdates |
string[] | yes | Field mappings to update |
Update catalog items
iterable catalogs update-items <catalogName> --items <items...>
| Option | Type | Required | Description |
|---|---|---|---|
catalogName |
string | yes | Name of the catalog |
--items |
json[] | yes | Catalog items to update |
Get event history for a user by email address
iterable events get-by-email <email>
| Option | Type | Required | Description |
|---|---|---|---|
email |
string | yes | User email address |
--limit |
number | no | Maximum number of events to return |
Get event history for a user by user ID
iterable events get-by-userid <userId>
| Option | Type | Required | Description |
|---|---|---|---|
userId |
string | yes | User ID to get events for |
--limit |
number | no | Maximum number of events to return (default: 20) |
Track a custom event for a user
iterable events track <eventName>
| Option | Type | Required | Description |
|---|---|---|---|
eventName |
string | yes | |
--campaignId |
number | no | |
--createdAt |
number | no | |
--createNewFields |
boolean | no | |
--dataFields |
json | no | |
--email |
string | no | |
--id |
string | no | |
--templateId |
number | no | |
--userId |
string | no |
Track multiple events in a single request for better performance
iterable events track-bulk --events <events...>
| Option | Type | Required | Description |
|---|---|---|---|
--events |
json[] | yes |
Get detailed information about a specific experiment by ID
iterable experiments get <experimentId>
| Option | Type | Required | Description |
|---|---|---|---|
experimentId |
number | yes | Experiment ID |
Get experiment metrics for A/B testing analysis
iterable experiments get-metrics
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number[] | no | Campaign IDs whose experiments to export (can specify multiple) |
--endDateTime |
string | no | Export ending at (ISO 8601 format) |
--experimentId |
number[] | no | Experiment IDs to export (can specify multiple) |
--startDateTime |
string | no | Export starting from (ISO 8601 format) |
Get variant content for an experiment, including subject lines, preheaders, HTML source, and plain text
iterable experiments get-variants <experimentId>
| Option | Type | Required | Description |
|---|---|---|---|
experimentId |
number | yes | Experiment ID |
List experiments with optional filtering by campaign, status, and date range
iterable experiments list
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Filter by campaign ID |
--endDate |
string | no | Filter experiments ending before this date (ISO 8601 format) |
--limit |
number | no | Number of results to return (max 1000, default 20) |
--offset |
number | no | Number of results to skip (default 0) |
--startDate |
string | no | Filter experiments starting from this date (ISO 8601 format) |
--status |
draft | running | finished |
no | Filter by status (draft, running, finished) |
Cancel a queued or running export job
iterable export cancel <jobId>
| Option | Type | Required | Description |
|---|---|---|---|
jobId |
number | yes | The ID of the export job to cancel (returned from startExportJob) |
Get the job status and download URLs for files from a completed export job
iterable export get-files <jobId>
| Option | Type | Required | Description |
|---|---|---|---|
jobId |
number | yes | The ID of the export job (returned from startExportJob) |
--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') |
Get a list of recent export jobs for the current project
iterable export list-jobs
| Option | Type | Required | Description |
|---|---|---|---|
--jobState |
string | no | Filter results to only include jobs in the specified state (enqueued, queued, running, completed, failed, cancelled, cancelling) |
Start a data export job that processes as a background job. Use get-files to check status and obtain download links.
iterable export start --dataTypeName <dataTypeName> --outputFormat <outputFormat>
| Option | Type | Required | Description |
|---|---|---|---|
--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) |
--outputFormat |
text/csv | application/x-json-stream |
yes | Output format |
--campaignId |
number | no | Only export data from this campaign |
--delimiter |
string | no | CSV file delimiter |
--endDateTime |
string | no | Export events occurring or users updated before date and time exclusive |
--omitFields |
string | no | Fields to omit from the export (comma separated) |
--onlyFields |
string | no | Only include these fields in the export (comma separated) |
--startDateTime |
string | no | Export events occurring or users updated after date and time inclusive |
Get journeys (workflows) with optional pagination and state filtering
iterable journeys list
| Option | Type | Required | Description |
|---|---|---|---|
--order |
asc | desc |
no | Sort direction (asc or desc) |
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results per page (max 50) |
--sort |
string | no | Field to sort by |
--state |
string[] | no | Filter by journey state (e.g., ['Archived']) |
Trigger a journey (workflow) for a user
iterable journeys trigger <workflowId>
| Option | Type | Required | Description |
|---|---|---|---|
workflowId |
number | yes | Journey/workflow ID to trigger |
--dataFields |
json | no | Data fields for the journey |
--email |
string | no | User email address |
--listId |
number | no | List ID to trigger for (alternative to individual user) |
--userId |
string | no | User ID (alternative to email) |
Create a new user list
iterable lists create <name>
| Option | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Name of the list to create |
--description |
string | no | Description of the list |
Delete a user list
iterable lists delete <listId>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | ID of the list to delete |
Preview users in a list (up to 5000 users)
iterable lists get-preview-users <listId>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | List ID to preview users from |
--preferUserId |
boolean | no | Return userId instead of email when both exist |
--size |
number | no | Number of users to return (max 5000, default 1000) |
Get the count of users in a specific list
iterable lists get-size <listId>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | List ID to get size for |
Get users in a specific list
iterable lists get-users <listId>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | List ID to get users from |
--maxResults |
number | no | Maximum number of users to return |
Retrieve user lists
iterable lists list
Subscribe users to a specific list
iterable lists subscribe <listId> --subscribers <subscribers...>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | ID of the list to subscribe to |
--subscribers |
json[] | yes | Array of users to subscribe |
--updateExistingUsersOnly |
boolean | no | Skip operation for unknown userIds/emails when true |
Unsubscribe users from a specific list
iterable lists unsubscribe <listId> --subscribers <subscribers...>
| Option | Type | Required | Description |
|---|---|---|---|
listId |
number | yes | List ID to unsubscribe from |
--subscribers |
json[] | yes | Users to unsubscribe |
Cancel scheduled email for specific user
iterable messaging cancel-email
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Cancel scheduled in-app message for specific user
iterable messaging cancel-in-app
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Cancel scheduled push notification for specific user
iterable messaging cancel-push
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Cancel scheduled SMS message for specific user
iterable messaging cancel-sms
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Cancel scheduled web push notification for specific user
iterable messaging cancel-web-push
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Cancel scheduled WhatsApp message for specific user
iterable messaging cancel-whatsapp
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign ID to cancel |
--email |
string | no | Email address that identifies a user profile |
--scheduledMessageId |
number | no | Scheduled message ID to cancel |
--userId |
string | no | User ID that identifies a user profile |
Get all available communication channels (email, SMS, push, etc.)
iterable messaging get-channels
Get embedded messages for a user, grouped by placement ID
iterable messaging get-embedded-messages
| Option | Type | Required | Description |
|---|---|---|---|
--currentMessageIds |
string[] | no | IDs of embedded messages already retrieved |
--email |
string | no | User email address |
--packageName |
string | no | Package name of the app |
--placementIds |
number[] | no | Placements to include in response |
--platform |
string | no | Platform: iOS, Android, or Web (case-sensitive) |
--sdkVersion |
string | no | Iterable SDK version (e.g., 6.5.0) |
--userId |
string | no | User ID (alternative to email) |
Get in-app messages for a user
iterable messaging get-in-app-messages
| Option | Type | Required | Description |
|---|---|---|---|
--count |
number | no | Number of messages to retrieve |
--email |
string | no | User email address |
--platform |
iOS | Android | Web |
no | Platform filter |
--userId |
string | no | User ID (alternative to email) |
Get all message types within the project for use in templates
iterable messaging get-message-types
Send email to user
iterable messaging send-email <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for email personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientUserId |
string | no | Recipient user ID (alternative to email) |
--sendAt |
string | no | When to send the email (YYYY-MM-DD HH:MM:SS format) |
Send in-app message to user
iterable messaging send-in-app <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientUserId |
string | no | Recipient user ID (alternative to email) |
--sendAt |
string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
Send push notification to user
iterable messaging send-push <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientUserId |
string | no | Recipient user ID |
--sendAt |
string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
Send SMS message to user
iterable messaging send-sms <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientPhone |
string | no | Recipient phone number |
--recipientUserId |
string | no | Recipient user ID |
--sendAt |
string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
Send web push notification to user
iterable messaging send-web-push <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientUserId |
string | no | Recipient user ID |
--sendAt |
string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
Send WhatsApp message to user
iterable messaging send-whatsapp <campaignId>
| Option | Type | Required | Description |
|---|---|---|---|
campaignId |
number | yes | Campaign ID to send |
--allowRepeatMarketingSends |
boolean | no | Allow repeat marketing sends |
--dataFields |
json | no | Data fields for personalization |
--metadata |
json | no | Additional metadata |
--recipientEmail |
string | no | Recipient email address |
--recipientPhone |
string | no | Recipient phone number |
--recipientUserId |
string | no | Recipient user ID |
--sendAt |
string | no | When to send (YYYY-MM-DD HH:MM:SS format) |
Create a new snippet with Handlebars templating support
iterable snippets create --content <content> --name <name>
| Option | Type | Required | Description |
|---|---|---|---|
--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). |
--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. |
--createdByUserId |
string | no | User ID (email) of the creator. If not provided, defaults to the project creator. |
--description |
string | no | Description of the snippet |
--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. |
Delete a snippet by ID (numeric) or name (string)
iterable snippets delete <identifier>
| Option | Type | Required | Description |
|---|---|---|---|
identifier |
string | yes | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
Get a snippet by ID (numeric) or name (string)
iterable snippets get <identifier>
| Option | Type | Required | Description |
|---|---|---|---|
identifier |
string | yes | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
Get all snippets for the current project
iterable snippets list
Update a snippet by ID (numeric) or name (string)
iterable snippets update --content <content> --identifier <identifier>
| Option | Type | Required | Description |
|---|---|---|---|
--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). |
--identifier |
string | yes | Snippet ID (numeric) or name (string). Numeric identifiers are treated as IDs, string identifiers as names |
--createdByUserId |
string | no | User ID (email) of the updater. If not provided, defaults to the project creator. |
--description |
string | no | Description of the snippet |
--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. |
Subscribe or unsubscribe multiple users to/from a subscription group
iterable subscriptions bulk-update --action <action> --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId>
| Option | Type | Required | Description |
|---|---|---|---|
--action |
subscribe | unsubscribe |
yes | Action to perform |
--subscriptionGroup |
emailList | messageType | messageChannel |
yes | Type of subscription group |
--subscriptionGroupId |
number | yes | Subscription Group Id |
--users |
string[] | no | Users to subscribe/unsubscribe, identified by email |
--usersByUserId |
string[] | no | Users to subscribe/unsubscribe, identified by userId |
Subscribe a user to a subscription group by email
iterable subscriptions subscribe-by-email --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userEmail <userEmail>
| Option | Type | Required | Description |
|---|---|---|---|
--subscriptionGroup |
emailList | messageType | messageChannel |
yes | Type of subscription group |
--subscriptionGroupId |
number | yes | Subscription Group Id |
--userEmail |
string | yes | User's email address |
Subscribe a user to a subscription group by userId
iterable subscriptions subscribe-by-userid --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userId <userId>
| Option | Type | Required | Description |
|---|---|---|---|
--subscriptionGroup |
emailList | messageType | messageChannel |
yes | Type of subscription group |
--subscriptionGroupId |
number | yes | Subscription Group Id |
--userId |
string | yes | User's userId |
Unsubscribe a user from a subscription group by email
iterable subscriptions unsubscribe-by-email --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userEmail <userEmail>
| Option | Type | Required | Description |
|---|---|---|---|
--subscriptionGroup |
emailList | messageType | messageChannel |
yes | Type of subscription group |
--subscriptionGroupId |
number | yes | Subscription Group Id |
--userEmail |
string | yes | User's email address |
Unsubscribe a user from a subscription group by userId
iterable subscriptions unsubscribe-by-userid --subscriptionGroup <subscriptionGroup> --subscriptionGroupId <subscriptionGroupId> --userId <userId>
| Option | Type | Required | Description |
|---|---|---|---|
--subscriptionGroup |
emailList | messageType | messageChannel |
yes | Type of subscription group |
--subscriptionGroupId |
number | yes | Subscription Group Id |
--userId |
string | yes | User's userId |
Delete one or more templates by ID
iterable templates delete <ids...>
| Option | Type | Required | Description |
|---|---|---|---|
ids |
number[] | yes | IDs of templates to delete |
Get template by client template ID
iterable templates get-by-client-id <clientTemplateId>
| Option | Type | Required | Description |
|---|---|---|---|
clientTemplateId |
string | yes | Client template ID to look up template by |
Get details for specific email template by ID
iterable templates get-email <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to retrieve |
--locale |
string | no | Locale of content to get |
Get details for specific in-app message template by ID
iterable templates get-inapp <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to retrieve |
--locale |
string | no | Locale of content to get |
Get details for specific push notification template by ID
iterable templates get-push <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to retrieve |
--locale |
string | no | Locale of content to get |
Get details for specific SMS template by ID
iterable templates get-sms <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to retrieve |
--locale |
string | no | Locale of content to get |
Retrieve templates
iterable templates list
| Option | Type | Required | Description |
|---|---|---|---|
--endDateTime |
string | no | Get templates created before this date time (yyyy-MM-dd HH:mm:ss [ZZ]) |
--messageMedium |
Email | Push | InApp | SMS |
no | Filter by message medium |
--order |
asc | desc |
no | Sort direction (asc or desc) |
--page |
number | no | Page number (starting at 1) |
--pageSize |
number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
--sort |
string | no | Field to sort by |
--startDateTime |
string | no | Get templates created at or after this date time (yyyy-MM-dd HH:mm:ss [ZZ]) |
--templateType |
Base | Blast | Triggered | Workflow |
no | Filter by template type |
Preview email template with custom data. Returns fully rendered HTML.
iterable templates preview-email <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID |
--data |
json | no | Data to use for template rendering (JSON: {dataFields, dataFeed, fetchDataFeeds}) |
--locale |
string | no | Locale of content to get |
Preview in-app message template with custom data. Returns fully rendered HTML.
iterable templates preview-inapp <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID |
--data |
json | no | Data to use for template rendering (JSON: {dataFields, dataFeed, fetchDataFeeds}) |
--locale |
string | no | Locale of content to get |
Send a proof of an email template to a specific user
iterable templates proof-email <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to send proof for |
--dataFields |
json | no | Fields to merge into template for proof |
--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. |
--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. |
--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. |
Send a proof of an in-app message template to a specific user
iterable templates proof-inapp <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to send proof for |
--dataFields |
json | no | Fields to merge into template for proof |
--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. |
--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. |
--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. |
Send a proof of a push notification template to a specific user
iterable templates proof-push <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to send proof for |
--dataFields |
json | no | Fields to merge into template for proof |
--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. |
--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. |
--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. |
Send a proof of an SMS template to a specific user
iterable templates proof-sms <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to send proof for |
--dataFields |
json | no | Fields to merge into template for proof |
--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. |
--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. |
--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. |
Update existing email template by templateId
iterable templates update-email <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to update |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--fromEmail |
string | no | From email |
--fromName |
string | no | From name |
--html |
string | no | HTML content |
--locale |
string | no | Template locale |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
--plainText |
string | no | Plain text content |
--subject |
string | no | Email subject |
Update existing in-app message template by templateId
iterable templates update-inapp <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to update |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--html |
string | no | HTML content of the in-app notification |
--locale |
string | no | Template locale |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
Update existing push notification template by templateId
iterable templates update-push <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to update |
--badge |
number | no | Badge count |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--locale |
string | no | Template locale |
--message |
string | no | Push notification message |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
--payload |
json | no | Custom payload |
--sound |
string | no | Sound file |
--title |
string | no | Push notification title |
Update existing SMS template by templateId
iterable templates update-sms <templateId>
| Option | Type | Required | Description |
|---|---|---|---|
templateId |
number | yes | Template ID to update |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--locale |
string | no | Template locale |
--message |
string | no | SMS message content |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
Create or update email template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
iterable templates upsert-email <clientTemplateId>
| Option | Type | Required | Description |
|---|---|---|---|
clientTemplateId |
string | yes | Client template ID |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--fromEmail |
string | no | From email |
--fromName |
string | no | From name |
--html |
string | no | HTML content |
--locale |
string | no | Template locale |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
--plainText |
string | no | Plain text content |
--subject |
string | no | Email subject |
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.
iterable templates upsert-inapp <clientTemplateId>
| Option | Type | Required | Description |
|---|---|---|---|
clientTemplateId |
string | yes | Client template ID |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--html |
string | no | HTML content of the in-app notification |
--locale |
string | no | Template locale |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
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.
iterable templates upsert-push <clientTemplateId>
| Option | Type | Required | Description |
|---|---|---|---|
clientTemplateId |
string | yes | Client template ID |
--badge |
number | no | Badge count |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--locale |
string | no | Template locale |
--message |
string | no | Push notification message |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
--payload |
json | no | Custom payload |
--sound |
string | no | Sound file |
--title |
string | no | Push notification title |
Create or update SMS template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created.
iterable templates upsert-sms <clientTemplateId>
| Option | Type | Required | Description |
|---|---|---|---|
clientTemplateId |
string | yes | Client template ID |
--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. |
--campaignId |
number | no | Associated campaign ID |
--creatorUserId |
string | no | Creator user ID |
--locale |
string | no | Template locale |
--message |
string | no | SMS message content |
--messageTypeId |
number | no | Message type ID |
--name |
string | no | Template name |
Update multiple users at once
iterable users bulk-update --users <users...>
| Option | Type | Required | Description |
|---|---|---|---|
--users |
json[] | yes | Array of users to update |
Delete a user by email or userId (auto-detected)
iterable users delete <identifier>
| Option | Type | Required | Description |
|---|---|---|---|
identifier |
string | yes | Email address or userId |
Delete a user by email address (asynchronous)
iterable users delete-by-email <email>
| Option | Type | Required | Description |
|---|---|---|---|
email |
string | yes | Email address of the user to delete |
Delete a user by user ID (asynchronous, deletes all users with same userId)
iterable users delete-by-userid <userId>
| Option | Type | Required | Description |
|---|---|---|---|
userId |
string | yes | User ID of the user to delete |
Get a user by email or userId (auto-detected)
iterable users get <identifier>
| Option | Type | Required | Description |
|---|---|---|---|
identifier |
string | yes | Email address or userId |
Get user profile information by email address
iterable users get-by-email <email>
| Option | Type | Required | Description |
|---|---|---|---|
email |
string | yes | Email address of the user to retrieve |
Get user profile information by user ID
iterable users get-by-userid <userId>
| Option | Type | Required | Description |
|---|---|---|---|
userId |
string | yes | User ID to retrieve |
Get all user profile field definitions and their types
iterable users get-fields
Get messages sent to a specific user with optional filtering
iterable users get-sent-messages
| Option | Type | Required | Description |
|---|---|---|---|
--campaignIds |
number[] | no | Only include messages from these campaigns |
--email |
string | no | User email address |
--endDateTime |
string | no | End date time (yyyy-MM-dd HH:mm:ss ZZ) |
--excludeBlastCampaigns |
boolean | no | Exclude results from blast campaigns |
--limit |
number | no | Maximum number of messages to return (default: 10, max: 1000) |
--messageMedium |
Email | Push | InApp | SMS |
no | Only include messages of this type |
--startDateTime |
string | no | Start date time (yyyy-MM-dd HH:mm:ss ZZ) |
--userId |
string | no | User ID (alternative to email) |
Merge two user profiles — all data and events from source are migrated to destination
iterable users merge
| Option | Type | Required | Description |
|---|---|---|---|
--arrayMerge |
json[] | no | Array fields whose contents should be merged (only custom arrays, not Iterable-managed ones like devices) |
--destinationEmail |
string | no | Email of the destination user profile to merge into |
--destinationUserId |
string | no | User ID of the destination user profile to merge into |
--sourceEmail |
string | no | Email of the source user profile to merge from |
--sourceUserId |
string | no | User ID of the source user profile to merge from |
Update user profile information (accepts email OR userId)
iterable users update
| Option | Type | Required | Description |
|---|---|---|---|
--createNewFields |
boolean | no | Whether new fields should be ingested and added to the schema |
--dataFields |
json | no | User data fields to update |
--email |
string | no | User email address |
--mergeNestedObjects |
boolean | no | Merge top-level objects instead of overwriting them |
--preferUserId |
boolean | no | Whether to create new user if userId doesn't exist (email-based projects only) |
--userId |
string | no | User ID (alternative to email) |
Update a user's email address (only for email-based projects)
iterable users update-email <newEmail>
| Option | Type | Required | Description |
|---|---|---|---|
newEmail |
string | yes | The new email address to assign to the specified user. |
--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. |
--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. |
Update user subscriptions (overwrites existing data for any non-null fields specified)
iterable users update-subscriptions
| Option | Type | Required | Description |
|---|---|---|---|
--campaignId |
number | no | Campaign to attribute unsubscribes |
--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. |
--emailListIds |
number[] | no | Lists that a user is subscribed to |
--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. |
--templateId |
number | no | Template to attribute unsubscribes |
--unsubscribedChannelIds |
number[] | no | Email channel ids to unsubscribe from |
--unsubscribedMessageTypeIds |
number[] | no | Individual message type IDs to unsubscribe (does not impact channel subscriptions). |
--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. |
--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. |
Get all webhooks for the project
iterable webhooks list
Update a webhook configuration
iterable webhooks update <webhookId>
| Option | Type | Required | Description |
|---|---|---|---|
webhookId |
number | yes | Webhook ID to update |
--active |
boolean | no | Whether webhook is active |
--events |
string[] | no | Events to subscribe to |
--url |
string | no | Webhook URL |
Manage stored API keys.
View all stored API keys
iterable keys list
Add a new API key
iterable keys add
Update an existing key's settings
iterable keys update <name-or-id>
Switch to a different key
iterable keys activate <name-or-id>
Deactivate the current key
iterable keys deactivate
Remove a key by ID or name
iterable keys delete <name-or-id>
Test the API connection
iterable keys validate