---
canonical_url: "https://docs.composio.dev/toolkits/iterable"
markdown_url: "https://docs.composio.dev/toolkits/iterable.md"
product: "platform"
version: null
last_updated: null
---

# Iterable

Cross-channel marketing platform for creating, executing, and optimizing campaigns

- **Category:** marketing
- **Auth:** API_KEY
- **Composio-managed OAuth available?** N/A
- **Tools:** 116
- **Triggers:** 0
- **Slug:** `ITERABLE`
- **Version:** 20260618_00

## Tools

### Abort Campaign

**Slug:** `ITERABLE_ABORT_CAMPAIGN`

Abort a running campaign to stop all in-progress message deliveries. Use this action when you need to immediately halt an active campaign that is currently sending messages to recipients. This action is useful for emergency stops, such as when an issue is discovered in the campaign content or targeting. Note: Only campaigns in 'Running' state can be aborted. Campaigns that have already finished or were not started cannot be aborted.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | integer | Yes | The unique identifier of the campaign to abort. Use the campaign ID returned from campaign creation or list campaigns. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Activate a triggered campaign

**Slug:** `ITERABLE_ACTIVATE_TRIGGERED_CAMPAIGN`

Activates a triggered campaign by its unique ID, allowing it to process events and send messages. Use this action when you need to start a triggered campaign that will send messages based on user events (e.g., cart abandonment, welcome series, re-engagement). The campaign must be in a valid state for activation (e.g., not already running or finished). Note: API triggered campaign activation must be enabled for your project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | integer | Yes | The unique identifier of the triggered campaign to activate. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Archive Campaigns

**Slug:** `ITERABLE_ARCHIVE_CAMPAIGNS`

Archives one or more campaigns. This endpoint behaves the same as the archive feature in the UI. Scheduled or recurring campaigns will be cancelled, and running campaigns will be aborted. Archived campaigns will be hidden from the Campaigns page, but can still be viewed in the Archived tab. Use this action when you need to remove campaigns from the active campaigns list while preserving them for historical reference. This action is irreversible — once archived, campaigns cannot be restored through this API (must be done manually through the UI). Rate limit: 5 requests/second, per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignIds` | array | Yes | List of campaign IDs to archive. Scheduled or recurring campaigns will be cancelled, and running campaigns will be aborted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Bulk Update Users

**Slug:** `ITERABLE_BULK_UPDATE_USERS`

Bulk update user data in Iterable. Use this action when you need to update multiple user profiles at once. This endpoint adds and overwrites user profile fields as needed. It does not modify top-level fields omitted from the request body. If you'd like to merge (rather than overwrite) a user profile's top-level objects with the values provided, set mergeNestedObjects to true. When updating an existing field, you cannot change its data type (the new value must have the same data type as the old value). At least one of email or userId must be provided for each user in the users array.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `users` | array | Yes | List of users to update. Each user must have at least an email or userId. |
| `createNewFields` | boolean | No | Whether new fields should be ingested and added to the schema. Defaults to project's setting to allow or drop unrecognized fields. Added fields will be included in the response's createdFields. Dropped fields will be included in filteredOutFields. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Campaign

**Slug:** `ITERABLE_CANCEL_CAMPAIGN`

Cancel a scheduled or recurring campaign in Iterable. Use when you need to stop a campaign that is scheduled for future sending or is part of a recurring campaign cycle. Once canceled, the campaign will not be sent to any recipients. Note: This action is irreversible for campaigns that are already in the process of sending. Only campaigns with a 'Scheduled' or 'Recurring' state can be canceled.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | integer | Yes | The unique identifier of the campaign to cancel. Use the campaign ID returned from the 'List campaigns' or 'Get campaign' endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Email

**Slug:** `ITERABLE_CANCEL_EMAIL`

Cancel a scheduled email to a specific user in Iterable. Use when you need to stop an email that has been queued for a specific user but has not yet been sent. You can cancel by providing the scheduledMessageId alone, or by providing a campaignId along with the user's email or userId. Note: This action is irreversible — once an email is canceled, it cannot be sent again using this endpoint. The canceled message will not be delivered to the recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address identifying the user profile. Required if campaignId is provided. |
| `userId` | string | No | The user ID identifying the user profile. Required if campaignId is provided instead of scheduledMessageId. |
| `campaignId` | integer | No | The ID of the campaign associated with the scheduled message to cancel. If provided, must also include email or userId. |
| `scheduledMessageId` | integer | No | The ID of the scheduled message to cancel. If provided, campaignId, email, and userId are not required. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Export

**Slug:** `ITERABLE_CANCEL_EXPORT`

Cancel a queued or running export created with the 'Start export' endpoint. Use when you need to abort an export job that is in progress or queued. Rate limit: 1 request/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `jobId` | integer | Yes | The ID of the export job to cancel. Use the jobId returned from the 'Start export' endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel In-App Message

**Slug:** `ITERABLE_CANCEL_IN_APP`

Cancel a scheduled in-app message to a specific user in Iterable. Use when you need to stop a scheduled in-app message that is queued for delivery to a specific user. This action cancels the in-app message for the specified user based on their email or userId. Note: This action is irreversible — once an in-app message is canceled, it will not be delivered to the user.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address that identifies the user profile in Iterable. Required (alongside campaignId) unless scheduledMessageId is provided. |
| `userId` | string | No | The user ID that identifies the user profile in Iterable. Required (alongside campaignId) unless scheduledMessageId is provided. |
| `campaignId` | integer | No | The ID of the campaign associated with the scheduled message to cancel. If you provide a campaignId, you must also provide an email or userId. Omit when cancelling by scheduledMessageId alone. |
| `scheduledMessageId` | integer | No | The ID of the scheduled message to cancel. Provide this to cancel a specific scheduled in-app instance without specifying campaignId/email/userId. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Push

**Slug:** `ITERABLE_CANCEL_PUSH`

Cancel a scheduled push notification to a specific user in Iterable. Use when you need to stop a push notification that has been queued for a specific user but has not yet been sent. You can cancel by providing the scheduledMessageId alone, or by providing a campaignId along with the user's email or userId. Note: This action is irreversible — once a push notification is canceled, it cannot be resent using this endpoint. The canceled message will not be delivered to the recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address identifying the user profile. Required if campaignId is provided. |
| `userId` | string | No | The user ID identifying the user profile. Required if campaignId is provided instead of scheduledMessageId. |
| `campaignId` | integer | No | The ID of the campaign associated with the scheduled message to cancel. If provided, must also include email or userId. |
| `scheduledMessageId` | integer | No | The ID of the scheduled message to cancel. If provided, campaignId, email, and userId are not required. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Web Push

**Slug:** `ITERABLE_CANCEL_WEB_PUSH`

Cancel a scheduled web push notification to a specific user in Iterable. Use when you need to stop a web push notification that has been queued for a specific user but has not yet been sent. You can cancel by providing the scheduledMessageId alone, or by providing a campaignId along with the user's email or userId. Note: This action is irreversible — once a web push notification is canceled, it cannot be resent using this endpoint. The canceled message will not be delivered to the recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address identifying the user profile. Required if campaignId is provided. |
| `userId` | string | No | The user ID identifying the user profile. Required if campaignId is provided instead of scheduledMessageId. |
| `campaignId` | integer | No | The ID of the campaign associated with the scheduled message to cancel. If provided, must also include email or userId. |
| `scheduledMessageId` | integer | No | The ID of the scheduled message to cancel. If provided, campaignId, email, and userId are not required. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel WhatsApp

**Slug:** `ITERABLE_CANCEL_WHATS_APP`

Cancel a scheduled WhatsApp message to a specific user in Iterable. Use when you need to stop a WhatsApp message that has been queued for a specific user but has not yet been sent. You can cancel by providing the scheduledMessageId alone, or by providing a campaignId along with the user's email or userId. Note: This action is irreversible — once a WhatsApp message is canceled, it cannot be resent using this endpoint. The canceled message will not be delivered to the recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address identifying the user profile. Required if campaignId is provided. |
| `userId` | string | No | The user ID identifying the user profile. Required if campaignId is provided instead of scheduledMessageId. |
| `campaignId` | integer | No | The ID of the campaign associated with the scheduled message to cancel. If provided, must also include email or userId. |
| `scheduledMessageId` | integer | No | The ID of the scheduled message to cancel. If provided, campaignId, email, and userId are not required. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create a new campaign

**Slug:** `ITERABLE_CREATE_CAMPAIGN`

Creates a new blast or triggered campaign from an existing template. Use this action when you need to create email, push notification, web push notification, SMS, in-app message, and embedded message campaigns from an existing template. Note that global suppression lists are not automatically added to campaigns created from this endpoint; to include a global suppression list, include it in the suppressionListIds request parameter.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | The name to use in Iterable for the new campaign. |
| `sendAt` | string | No | A scheduled send time for a new blast campaign, up to 21 days in the future. Format: YYYY-MM-DD HH:MM:SS (UTC). |
| `listIds` | array | No | To create a blast campaign, set listIds to a non-empty array of list IDs to which the campaign should be sent. To create a triggered campaign, omit listIds from the request body. |
| `labelIds` | array | No | An optional array of label IDs to associate with the new campaign. Labels must exist in the project. Maximum 50 labels allowed. |
| `sendMode` | string ("ProjectTimeZone" | "RecipientTimeZone") | No | Send mode enumeration for campaign scheduling. |
| `dataFields` | object | No | A JSON object containing data to be statically rendered into the base template at creation time using double square brackets (for example, [[field]]). These values replace the placeholders in the base template and are baked into the campaign template, and cannot be changed later. Supported by email campaigns only. |
| `templateId` | integer | Yes | The ID of a template to associate with the new campaign. The new campaign receives a copy of this template. |
| `scheduleSend` | boolean | No | Whether to immediately schedule the blast campaign for sending. Defaults to true. Set to false to create the campaign without scheduling it (the campaign can be scheduled later using POST /api/campaigns/{campaignId}/schedule). Only applies to blast campaigns. |
| `startTimeZone` | string | No | For a scheduled blast campaign, when sendMode is RecipientTimeZone, Iterable sends the campaign at the same local time in all recipient time zones starting with startTimeZone. IANA format (for example, America/New_York). |
| `defaultTimeZone` | string | No | For a scheduled blast campaign, when sendMode is RecipientTimeZone, defaultTimeZone specifies the time zone to use when sending to recipients without a known time zone. IANA format (for example, America/Los_Angeles). |
| `campaignDataFields` | object | 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` | array | No | An array of suppression list IDs to associate with a new blast campaign. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create a catalog

**Slug:** `ITERABLE_CREATE_CATALOG`

Create a catalog with the specified name in Iterable. Use this action when you need to create a new catalog to store and organize data such as products, users, or other entities. Each catalog in a project must have a unique name. Catalog names can be no longer than 255 characters and must contain only alphanumeric characters and dashes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `catalogName` | string | Yes | Catalog name [Alphanumeric, dashes, case insensitive, 255 characters max] |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Catalog Items

**Slug:** `ITERABLE_CREATE_CATALOG_ITEMS`

Asynchronously creates or updates up to 1000 catalog items with a single request. Use this action when you need to bulk create or update catalog items efficiently. If an item with the same ID already exists, it will be completely overwritten, unless replaceUploadedFieldsOnly is set to true to merge fields instead. This operation is asynchronous — the API returns 202 Accepted when the request is queued for processing. The rate limit is 100 requests per second. Note: Each item ID must contain only alphanumeric characters and dashes (max 255 characters), and field names should not contain periods.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `documents` | object | Yes | JSON map of item ID to item values. Maximum 1000 items per request. Maximum 30KB per item value. Item IDs must contain only alphanumeric characters and dashes (max 255 characters). Do not use periods in field names. |
| `catalogName` | string | Yes | The name of the catalog where items will be created. Alphanumeric with dashes, case-insensitive, maximum 255 characters. |
| `replaceUploadedFieldsOnly` | boolean | No | If true, only the fields included in the upload will be replaced for existing items, preserving other existing fields. If false (default), the entire item will be overwritten. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create a new list

**Slug:** `ITERABLE_CREATE_LIST`

Create a new static list in Iterable. Use this action when you need to create a new contact list that can be used for email campaigns, segmentation, or organizing contacts. Each list must have a unique name within the project. The newly created list starts empty and can be populated by adding contacts via other Iterable API actions.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | The name for the new list. List names must be unique within a project. |
| `description` | string | No | An optional description for the list, providing context about its purpose. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create snippet

**Slug:** `ITERABLE_CREATE_SNIPPET`

Creates a new code snippet in Iterable. Use this action when you need to create a reusable code snippet that can be referenced in campaigns, templates, or other Iterable features. The snippet name must be unique within the project and cannot be changed after creation.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `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. |
| `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). |
| `variables` | array | 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). |
| `description` | string | No | Description of the snippet. |
| `createdByUserId` | string | No | User ID (email) of the creator. If not provided, defaults to the project creator. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Deactivate Triggered Campaign

**Slug:** `ITERABLE_DEACTIVATE_TRIGGERED_CAMPAIGN`

Deactivate a triggered campaign in Iterable. Use when you need to stop a triggered campaign from firing based on user events. This action is irreversible — once a triggered campaign is deactivated, it cannot be reactivated through this API. Use the Iterable dashboard or the activate triggered campaign endpoint to reactivate it. Note: Only triggered campaigns can be deactivated. Regular blast campaigns cannot be deactivated using this endpoint.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | integer | Yes | The unique identifier of the triggered campaign to deactivate. Use the campaign ID returned from the 'List campaigns' or 'Get campaign' endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Bulk delete templates

**Slug:** `ITERABLE_DELETE_BULK_TEMPLATES`

Bulk delete one or more base templates from Iterable. Use this action when you need to permanently remove multiple templates that are no longer needed. This action is irreversible — templates cannot be recovered once deleted. Note: Templates associated with a campaign will not be deleted and will be skipped.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `ids` | array | Yes | List of template IDs to delete. Templates associated with a campaign will not be deleted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete a catalog

**Slug:** `ITERABLE_DELETE_CATALOG`

Delete a catalog by its name. This action also deletes all collections that reference the specified catalog. Use this action when you need to permanently remove a catalog and all its associated collections from Iterable. This action is irreversible — the catalog and all associated collections cannot be recovered once deleted.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `catalogName` | string | Yes | Catalog name [Alphanumeric, dashes, case insensitive, 255 characters max] |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete a Catalog Item

**Slug:** `ITERABLE_DELETE_CATALOG_ITEM`

Deletes the specified item from a catalog. This action is asynchronous — the data may not be deleted immediately. Use this action when you need to remove a specific item from a catalog by its unique identifier. This action is irreversible — once the item is deleted, it cannot be recovered unless a backup or re-sync mechanism is in place.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `itemId` | string | Yes | The unique identifier of the catalog item to delete. Alphanumeric with dashes, case sensitive, max 255 characters. |
| `catalogName` | string | Yes | The name of the catalog from which to delete the item. Alphanumeric with dashes, case insensitive, max 255 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Catalog Items

**Slug:** `ITERABLE_DELETE_CATALOG_ITEMS`

Asynchronously deletes catalog items from a specified catalog in Iterable. Use when you need to remove specific items from a catalog by their IDs. This action processes the deletion asynchronously — the API may return a 202 Accepted status indicating the request has been queued for processing. Important: This action is irreversible — the catalog items cannot be recovered once deleted. Note: This endpoint supports bulk deletion of multiple items at once. Ensure all item IDs in the request are valid and exist in the catalog to avoid partial deletions.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `itemIds` | array | Yes | List of item IDs to delete from the catalog. Each ID should reference an existing item in the catalog. |
| `catalogName` | string | Yes | The name of the catalog from which to delete items. Alphanumeric with dashes, case-insensitive, max 255 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete a list

**Slug:** `ITERABLE_DELETE_LIST`

Delete a list by its listId. Use this action when you need to permanently remove a contact list from Iterable. This action is irreversible — the list and all associated data cannot be recovered once deleted. Note: Lists that are currently in use (e.g., in active campaigns) may not be deletable and will return a 409 error.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listId` | integer | Yes | The unique identifier of the list to delete. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Metadata Table

**Slug:** `ITERABLE_DELETE_METADATA_TABLE`

Asynchronously deletes a metadata table by its table name. Use when you need to permanently remove a metadata table from Iterable. This action is asynchronous - a 200 response indicates a valid request that will be processed, but the table may not be deleted immediately. Use GET /api/metadata/{table} to verify that the deletion is complete. This action is irreversible — the table and all associated data cannot be recovered once deleted.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `table` | string | Yes | The name of the table to delete. Alphanumeric, case insensitive. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete snippet

**Slug:** `ITERABLE_DELETE_SNIPPET`

Deletes a snippet by its ID (numeric) or name (string). Numeric identifiers are treated as snippet IDs, string identifiers as snippet names. Use this action when you need to remove a snippet that is no longer needed. This action is irreversible - the snippet cannot be recovered once deleted.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `identifier` | string | Yes | Snippet identifier. Numeric identifiers are treated as snippet IDs, string identifiers are treated as snippet names. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete User By ID

**Slug:** `ITERABLE_DELETE_USER_BY_ID`

Asynchronously deletes a user by userId from Iterable. Use when you need to remove a user from Iterable's system by their userId. This action does not prevent future data collection about the user. If multiple users share the same userId, they'll all be deleted. This endpoint can be used to delete users from email-based projects, userID-based projects, and hybrid projects. Important: This action is irreversible — the user data cannot be recovered once deleted. Note: userId values containing a '/' character are not supported by this endpoint.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `userId` | string | Yes | The unique identifier of the user to delete. Note: userId values containing a '/' character are not supported by this endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Export data to CSV

**Slug:** `ITERABLE_EXPORT_DATA_CSV`

Export campaign analytics data in CSV format from Iterable. Use when you need to retrieve event data such as email sends, opens, clicks, push notifications, SMS messages, purchases, or custom events. Note: Either use the 'range' parameter (recommended for simple date filtering) OR use 'startDateTime' and 'endDateTime' together for custom date ranges. Using both will result in an error. Rate limit: 4 requests per minute per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `range` | string ("Today" | "Yesterday" | "BeforeToday" | "All") | No | Predefined date range options for export. |
| `delimiter` | string | No | CSV file delimiter character. |
| `campaignId` | integer | No | Filter export to only include data from this specific campaign ID. |
| `omitFields` | string | No | Comma-separated list of field names to omit from the export. |
| `onlyFields` | string | No | Comma-separated list of field names to include in the export. Only these fields will be returned. |
| `endDateTime` | string | No | Export ending at this datetime (<) in format yyyy-MM-dd HH:mm:ss [ZZ]. Cannot be used together with range. |
| `dataTypeName` | string ("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" | "emailSubscribe" | "emailUnSubscribe" | "purchase" | "customEvent" | "user" | "smsUsageInfo" | "embeddedSend" | "embeddedSendSkip" | "embeddedClick" | "embeddedReceived" | "embeddedImpression" | "embeddedSession" | "unknownSession" | "journeyExit" | "whatsAppBounce" | "whatsAppClick" | "whatsAppReceived" | "whatsAppSeen" | "whatsAppSend" | "whatsAppSendSkip" | "whatsAppUsageInfo") | Yes | The type of data to export. Choose from various event types including email, push, SMS, in-app, web push, purchase, custom events, and user data. |
| `startDateTime` | string | No | Export starting from this datetime (>=) in format yyyy-MM-dd HH:mm:ss [ZZ]. Cannot be used together with range. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Export Campaign Data to JSON

**Slug:** `ITERABLE_EXPORT_DATA_JSON`

Export campaign analytics data in JSON format with one entry per line. Use when you need to retrieve campaign metrics such as email sends, opens, clicks, purchases, or custom events. Rate limit: 4 requests per minute per project. Either 'range' OR 'startDateTime'/'endDateTime' must be provided.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `range` | string ("Today" | "Yesterday" | "BeforeToday" | "All") | No | Valid date range values. |
| `campaignId` | integer | No | Filter to only export data from a specific campaign ID. |
| `omitFields` | string | No | Comma-separated list of fields to exclude from the export. |
| `onlyFields` | string | No | Comma-separated list of field names to include in the export. |
| `endDateTime` | string | No | Export ending at this datetime (<). Format: yyyy-MM-dd HH:mm:ss [ZZ]. Use instead of 'range'. |
| `dataTypeName` | string ("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" | "emailSubscribe" | "emailUnSubscribe" | "purchase" | "customEvent" | "user" | "smsUsageInfo" | "embeddedSend" | "embeddedSendSkip" | "embeddedClick" | "embeddedReceived" | "embeddedImpression" | "embeddedSession" | "unknownSession" | "journeyExit" | "whatsAppBounce" | "whatsAppClick" | "whatsAppReceived" | "whatsAppSeen" | "whatsAppSend" | "whatsAppSendSkip" | "whatsAppUsageInfo") | Yes | The type of data to export (e.g., 'emailSend', 'emailOpen', 'purchase') |
| `startDateTime` | string | No | Export starting from this datetime (>=). Format: yyyy-MM-dd HH:mm:ss [ZZ]. Use instead of 'range'. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Export User Events

**Slug:** `ITERABLE_EXPORT_USER_EVENTS`

Export all events for a user identified by email or userId. Returns events as JSON, one event per line. Use this action when you need to retrieve the complete event history for a specific user in Iterable. Either email or userId must be provided, but not both. Custom events are excluded by default unless includeCustomEvents is set to true.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | Export events for the user with this email address. Provide either email or userId, not both. |
| `userId` | string | No | Export events for the user with this user ID. Provide either email or userId, not both. |
| `includeCustomEvents` | boolean | No | Whether to include custom events in the export. Defaults to False. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Forget User

**Slug:** `ITERABLE_FORGET_USER`

Deletes the specified user's data from the Iterable project and prevents future data collection about them. This action is used for GDPR compliance. Use this action when you need to permanently remove a user's data from Iterable and ensure no future data is collected about them. In email-based projects, you must forget users by email. In userID-based projects, you must forget users by userId. In hybrid projects, you can forget users by either email or userId. Learn about identifying users by userId and email. Note: This action is irreversible - once a user is forgotten, their data cannot be recovered and future data collection about them is prevented.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get campaign by ID

**Slug:** `ITERABLE_GET_CAMPAIGN`

Retrieves a campaign by its unique ID. Use this action when you need to fetch detailed information about a specific campaign from Iterable. The response includes campaign metadata such as state, type, timing, and associated lists or templates.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | integer | Yes | The unique identifier of the campaign to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Campaign Metrics

**Slug:** `ITERABLE_GET_CAMPAIGN_METRICS`

Retrieve performance metrics for one or more campaigns. Use when you need to analyze delivery, open, click, and conversion rates for your email, push, or SMS campaigns. This action allows filtering by specific campaign IDs and/or a date range. Note: Rate limited to 10 requests per minute per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | array | Yes | Campaign ID(s) to export. Specify multiple campaignId query parameters to export multiple campaigns. |
| `endDateTime` | string | No | Export ending at this datetime (<). Format: YYYY-MM-DD or ISO 8601 datetime. Defaults to 2018-07-25 if not specified. |
| `startDateTime` | string | No | Export starting from this datetime (>=). Format: YYYY-MM-DD or ISO 8601 datetime. Defaults to 2018-06-25 if not specified. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Catalog Field Mappings

**Slug:** `ITERABLE_GET_CATALOG_FIELD_MAPPINGS`

Tool to retrieve field mappings (field to data type) and undefined fields for a catalog in Iterable. Use when you need to inspect the schema structure and data type definitions of a catalog.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `catalogName` | string | Yes | Name of the catalog to retrieve field mappings for. Maximum 255 characters; allowed character set is enforced by the Iterable API, not validated here. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get catalog item by ID

**Slug:** `ITERABLE_GET_CATALOG_ITEM`

Retrieves a specific catalog item by its ID from the specified catalog. Use this action when you need to fetch a single item from a catalog using its unique identifier.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `itemId` | string | Yes | The unique identifier of the catalog item. Must be alphanumeric with dashes, case-sensitive, maximum 255 characters. |
| `catalogName` | string | Yes | The name of the catalog. Must be alphanumeric with dashes, case-insensitive, maximum 255 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get email template by ID

**Slug:** `ITERABLE_GET_EMAIL_TEMPLATE`

Get an email template by templateId. Use this action when you need to retrieve a specific email template from Iterable to view its content, settings, sender configuration, or metadata. The response includes the template's HTML and plain text content, sender information (from email, reply-to), subject line, and various rendering options like data feeds, link parameters, and analytics settings. Optionally, you can specify a locale parameter to retrieve localized content if available.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | The locale for the content to retrieve. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `templateId` | integer | Yes | The unique identifier of the email template to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Embedded Messages

**Slug:** `ITERABLE_GET_EMBEDDED_MESSAGES`

Retrieves embedded messages for which the specified user is eligible, grouped by placementId. Use this action when you need to fetch in-app embedded messages for a user based on their email or userId. By default, it returns data for all placements that have messages for the user. To constrain the response to specific placements, provide one or more placementIds query parameters.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | User identifier by email. Provide an email or a userId, but not both. |
| `userId` | string | No | User identifier by userId. Provide a userId or an email, but not both. |
| `platform` | string | No | The platform of the app for which to retrieve embedded messages: iOS, Android, or Web (case-sensitive). |
| `sdkVersion` | string | No | Iterable SDK version (e.g., 6.5.0). |
| `packageName` | string | No | The package name of the app for which to retrieve embedded messages. |
| `placementIds` | array | No | Placements to include in the response, even if they don't have embedded messages for the user. When no placementIds are specified, the response includes all embedded messages for which the user is eligible. |
| `currentMessageIds` | array | No | IDs of embedded messages already retrieved by the device making the request. If the user is no longer eligible for a specified message, that message will be omitted from the API response. Otherwise, it will be present, but without an elements field. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Embedded Template

**Slug:** `ITERABLE_GET_EMBEDDED_TEMPLATE`

Retrieves an embedded message template by its unique ID. Use this action when you need to fetch detailed information about a specific embedded message template from Iterable, including its content, visual elements, and metadata. Optionally filter by locale to retrieve localized content.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | Locale of content to get. Leave empty for default locale. Iterable automatically sends the content with a locale that matches a user profile's locale field. |
| `templateId` | integer | Yes | The unique identifier of the embedded message template to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Experiment Metrics

**Slug:** `ITERABLE_GET_EXPERIMENT_METRICS`

Retrieve metrics for email experiments. Use when you need to analyze performance data for A/B tests or email experiments. This action allows filtering by specific experiment IDs, campaign IDs, and/or a date range. Currently only email experiment metrics are supported.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | array | No | Campaign IDs whose experiments to export. Specify multiple campaignId query parameters to export multiple campaigns. |
| `endDateTime` | string | No | Export ending at this datetime (<=). Format: YYYY-MM-DD or ISO 8601 datetime. |
| `experimentId` | array | No | Experiment IDs to export. Specify multiple experimentId query parameters to export multiple experiments. |
| `startDateTime` | string | No | Export starting from this datetime (>=). Format: YYYY-MM-DD or ISO 8601 datetime. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get In-App Messages

**Slug:** `ITERABLE_GET_IN_APP_MESSAGES`

Get a user's in-app messages from Iterable. This endpoint always returns the user's non-selective (not app-specific) in-app messages. To also fetch app-specific in-app messages, include a packageName and platform in the request. Use this action when you need to retrieve in-app messages for a user, including new messages and messages that have already been saved to a mobile inbox. Each message includes a read field to indicate whether it has been seen.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `count` | integer | Yes | The number of in-app messages to fetch. |
| `email` | string | No | The email address of the user for which to fetch in-app messages. Specify either an email or a userId. |
| `userId` | string | No | The userId of the user for which to fetch in-app messages. Specify either an email or a userId. |
| `platform` | string ("iOS" | "Android" | "Web" | "OTT") | No | Platform enum for mobile apps. |
| `sdkVersion` | string | No | Iterable SDK version (e.g., 6.2.17). |
| `packageName` | string | No | The package name of the app for which to retrieve selective in-app messages. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get in-app template by ID

**Slug:** `ITERABLE_GET_IN_APP_TEMPLATE`

Retrieves an in-app template by its unique ID. Use this action when you need to fetch detailed information about a specific in-app template from Iterable, including its content, display settings, and metadata. Optionally specify a locale to retrieve localized content.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | The locale of content to get. If not specified, returns the default locale content. |
| `templateId` | integer | Yes | The unique identifier of the in-app template to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get List Size

**Slug:** `ITERABLE_GET_LIST_SIZE`

Get the number of users within a list. Returns the count of users currently subscribed to the specified list. Use this action when you need to check how many users are in a specific list for reporting, list management, or campaign planning purposes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listId` | integer | Yes | The unique identifier of the list to get size for. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get push template by ID

**Slug:** `ITERABLE_GET_PUSH_TEMPLATE`

Retrieves a push template by its unique ID. Use this action when you need to fetch a specific push template from Iterable to view its settings, content, or configuration. The response includes all template properties including message content, buttons, deeplinks, and metadata. Rate limit: 100 requests/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | Locale of content to get. If not specified, returns content for the default locale. |
| `templateId` | integer | Yes | The unique identifier of the push template to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get SMS template

**Slug:** `ITERABLE_GET_SMS_TEMPLATE`

Retrieves an SMS template by its unique ID. Use this action when you need to fetch the content, metadata, and settings of a specific SMS template from Iterable. The response includes the template message content, locale information, tracking settings, and other configuration details. Rate limit: 100 requests/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | Locale of content to get. If not specified, returns content in the default locale. |
| `templateId` | integer | Yes | The unique identifier of the SMS template to retrieve. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get snippet by ID or name

**Slug:** `ITERABLE_GET_SNIPPET`

Retrieves a snippet by its ID (numeric) or name (string). Numeric identifiers are treated as snippet IDs, string identifiers as snippet names. Use this action when you need to retrieve a specific snippet by its identifier to view its content, metadata, or associated variables.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `identifier` | string | Yes | Snippet identifier. Numeric identifiers are treated as snippet IDs, string identifiers are treated as snippet names. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get template by client template ID

**Slug:** `ITERABLE_GET_TEMPLATE_BY_CLIENT_ID`

Retrieves an email template by its client-defined template ID. Use this action when you need to find templates using a client-specific identifier rather than the internal Iterable template ID. The response contains a list of templates that match the provided clientTemplateId. Rate limit: 100 requests/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `clientTemplateId` | string | Yes | The client-defined template identifier to search for. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get User By ID

**Slug:** `ITERABLE_GET_USER_BY_ID`

Get a user by userId from Iterable. Use when you need to retrieve user information using a specific userId. This action fetches user data including email, userId, and any additional dataFields stored in Iterable. Unlike path-parameter endpoints, this query-parameter-based endpoint provides better support for special characters (such as '/') in the userId value. Rate limit: 100 requests/second per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `userId` | string | Yes | The unique identifier of the user to retrieve. This endpoint provides better support for special characters in userId values compared to path-parameter alternatives. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get User By ID (Path)

**Slug:** `ITERABLE_GET_USER_BY_ID_PATH`

Get a user by userId (path parameter) from Iterable. Use when you need to retrieve user information using a specific userId as a path parameter. This action fetches user data including email, userId, and any additional dataFields stored in Iterable. Note: This endpoint does not work for userId values that contain a '/' character. For userIds with special characters, use the query-parameter-based GET /api/users/byUserId endpoint instead. Rate limit: 100 requests/second per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `userId` | string | Yes | The unique identifier of the user to retrieve. Note: userId values containing a '/' character are not supported by this path-parameter endpoint. Use the query-parameter based alternative in such cases. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get User Events

**Slug:** `ITERABLE_GET_USER_EVENTS`

Get events for a specific user by userId. Use when you need to retrieve the event history for a particular user from Iterable. This action allows you to fetch a user's event data including campaign interactions, channel activity, and associated metadata. The results can be filtered using the limit parameter to control the number of events returned (max 200). Note: This endpoint does not support userId values containing a '/' character.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `limit` | integer | No | The maximum number of events to retrieve. Must be between 1 and 200. Defaults to 30 if not specified. |
| `userId` | string | Yes | The unique identifier of the user whose events you are retrieving. Note: userId values containing a '/' character are not supported by this endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get User Sent Messages

**Slug:** `ITERABLE_GET_USER_SENT_MESSAGES`

Get messages sent to a user by email address or userId. Use when you need to retrieve the message history for a specific user in Iterable. This action returns messages sent to a user, with optional filtering by campaign, date range, and message type. Returns 10 messages by default, up to a maximum of 1000. Rate limit: 3 requests/second per project. Note: Either email or userId must be provided to identify the user, but not both.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | The email address of the user. Either email or userId must be provided, but not both. |
| `limit` | integer | No | The maximum number of messages to return. Defaults to 10, maximum is 1000. |
| `userId` | string | No | The unique identifier of the user. Either email or userId must be provided, but not both. |
| `campaignIds` | array | No | Only include messages from these campaign IDs. |
| `endDateTime` | string | No | End date time in the format yyyy-MM-dd HH:mm:ss ZZ (e.g., '2024-01-31 23:59:59 -05:00'). |
| `messageMedium` | string | No | Only include messages of this type. Must be one of: Email, Push, InApp, SMS. |
| `startDateTime` | string | No | Start date time in the format yyyy-MM-dd HH:mm:ss ZZ (e.g., '2024-01-15 10:30:00 -05:00'). |
| `excludeBlastCampaigns` | boolean | No | Whether to exclude results coming from blast campaigns. This is ignored if campaignIds is set. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Web In-App Messages

**Slug:** `ITERABLE_GET_WEB_IN_APP_MESSAGES`

Get a user's web in-app messages from Iterable. This endpoint always returns the user's non-selective (not app-specific) web in-app messages. To also fetch web app-specific in-app messages, include a packageName in the request. This endpoint returns new messages and messages that have already been saved to a mobile inbox, and each message has a read field to indicate whether or not it has already been seen. Use when you need to retrieve in-app messages for a user, such as displaying an inbox of notifications or checking unread message status.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `count` | integer | Yes | The number of web in-app messages to fetch. |
| `email` | string | No | The email address of the user for which to fetch in-app messages. Specify either an email or a userId. |
| `userId` | string | No | The userId of the user for which to fetch in-app messages. Specify either an email or a userId. |
| `SDKVersion` | string | No | Iterable SDK version (e.g., 6.2.17). |
| `packageName` | string | No | The package name of the app for which to retrieve selective web in-app messages. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List all campaigns

**Slug:** `ITERABLE_LIST_CAMPAIGNS`

Retrieves metadata about all campaigns in a project with optional pagination. Use this action when you need to enumerate all campaigns in a project, retrieve campaign IDs for subsequent operations, or paginate through large result sets. The response includes campaign metadata such as state, type, timing, and associated lists or templates. If no pagination parameters are provided, the unpaginated API returns all campaigns (deprecated behavior, may be removed in the future). Rate limit: 100 requests/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Page number for pagination (starting at 1). |
| `sort` | string | No | Field to sort campaigns by, with optional direction prefix. Use - for descending, + or no prefix for ascending. Campaigns can be sorted by id, name, createdAt, updatedAt, or startAt. Examples: -createdAt, +name, id |
| `pageSize` | integer | No | Number of results to return per page (defaults to 20, maximum of 1000). |
| `campaignState` | array | No | Filter campaigns by state. Can be specified multiple times to filter by multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Catalog Items

**Slug:** `ITERABLE_LIST_CATALOG_ITEMS`

Get the catalog items for a catalog. Use when you need to retrieve items stored in a specific Iterable catalog, such as product catalogs, user preferences, or custom data sets. Supports pagination and sorting for large catalogs. Rate limit: 100 requests/second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Page number to retrieve (starting at 1). Use for pagination when results span multiple pages. |
| `orderBy` | string | No | Field by which results should be ordered. Must have a defined type if used with sortAscending. |
| `pageSize` | integer | No | Number of results to display per page. Defaults to 10 if not specified. |
| `catalogName` | string | Yes | Name of the catalog to retrieve items from. Alphanumeric with dashes, max 255 characters, case insensitive. |
| `sortAscending` | boolean | No | Sort results in ascending order. Defaults to false (descending). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Catalogs

**Slug:** `ITERABLE_LIST_CATALOGS`

Tool to retrieve all catalog names from Iterable. Use when you need to list available catalogs before performing catalog-specific operations like getting or setting catalog records.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Channels

**Slug:** `ITERABLE_LIST_CHANNELS`

Get all message channels within the Iterable project. Use this action when you need to retrieve all available communication channels (e.g., email, push notifications) configured in your Iterable project. This is useful for identifying valid channel options when creating campaigns or managing messaging workflows.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List export files

**Slug:** `ITERABLE_LIST_EXPORT_FILES`

Get the job status and files for an export started with the 'Start export' endpoint. Occasionally, a job status may change from running to enqueued because it had to restart. When this happens, the job maintains progress and begins where it previously stopped. Iterable uses exponential backoff for retries. Files are added to the list as the export job is running. Paginate through the files by using the last file name in the response as the startAfter value for the next request. Use when you need to monitor export progress, retrieve export results, or paginate through large export file lists.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `jobId` | integer | Yes | The ID of the export job. Use the jobId returned from the 'Start export' endpoint. |
| `startAfter` | string | No | Skip file names up to and including this value. Use for paginating over the files in the export. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Export Jobs

**Slug:** `ITERABLE_LIST_EXPORT_JOBS`

Retrieve a list of recent export jobs for the current project. Use when you need to monitor export job status, check for completed exports, or manage data export operations.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `jobState` | string | No | Filter results to only include jobs in the specified state. Common states include 'started', 'completed', 'failed', or 'cancelled'. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Forgotten User IDs

**Slug:** `ITERABLE_LIST_FORGOTTEN_USER_IDS`

Get hashed user IDs of forgotten users for GDPR compliance. Returns a hash for each userId currently forgotten by your project. Each forgotten userId is lowercased, trimmed, and hashed using SHA-256. Use this action when you need to retrieve forgotten user data for GDPR compliance audits or data subject request processing. Note: This endpoint only works for userID-based and hybrid projects. For email-based projects, it returns an error. Rate limit: 3 requests/second, per project.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Journeys

**Slug:** `ITERABLE_LIST_JOURNEYS`

Get a list of journeys (workflows) within your Iterable project. Use this action when you need to retrieve and browse through marketing automation journeys, including their status, configuration, and metadata. Supports pagination, sorting, and filtering by journey state (active, archived, etc.).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Page number (starting at 1) for pagination. |
| `sort` | string | No | Sort field with optional direction prefix. Use - for descending, + or no prefix for ascending. Examples: -createdAt, +name, id |
| `state` | array | No | Filter journeys by state. Without this parameter, returns all non-archived journeys. With state set to 'Archived', returns only archived journeys. |
| `pageSize` | integer | No | Number of results to return per page (defaults to 10, maximum of 50). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Lists

**Slug:** `ITERABLE_LIST_LISTS`

Retrieve all lists within a project. Use when you need to enumerate available lists, retrieve list IDs for subsequent operations, or understand the structure of contact lists. Rate limit: 100 requests/second, per project.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List List Users

**Slug:** `ITERABLE_LIST_LIST_USERS`

Get all users within a list. Use when you need to retrieve the complete list of users subscribed to a specific list for export, analysis, or batch operations. This action returns all users in the list (unlike preview which returns a sample). Rate limit: 5 requests/minute, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listId` | integer | Yes | The unique identifier of the list to get users from. |
| `preferUserId` | boolean | No | If true, will return the userId instead of email if both exist in a user profile for a hybrid project. Defaults to false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Message Types

**Slug:** `ITERABLE_LIST_MESSAGE_TYPES`

Lists all message types within a project. Use when you need to retrieve all available message types (e.g., Email, Push, SMS) and their associated metadata such as channel ID, subscription policy, and rate limits. Rate limit: 100 requests/second, per project.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Metadata Keys

**Slug:** `ITERABLE_LIST_METADATA_KEYS`

List all keys in a metadata table. Use when you need to discover what keys exist within a specific metadata table (e.g., to find keys before retrieving or deleting individual metadata items). Results may be paginated; use the `nextMarker` parameter to retrieve subsequent pages.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `table` | string | Yes | Table name (Alphanumeric, case insensitive). Examples: 'snippets', 'metadata', 'test'. |
| `nextMarker` | string | No | next result set id; returned by previous search if more hits exist |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Metadata Tables

**Slug:** `ITERABLE_LIST_METADATA_TABLES`

List available metadata tables in Iterable. Use when you need to discover what metadata tables are available for querying (e.g., users, events, campaigns). This action is read-only and idempotent.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List recurring campaign child campaigns

**Slug:** `ITERABLE_LIST_RECURRING_CHILD_CAMPAIGNS`

Retrieve the child campaigns generated by a recurring campaign. Use when you need to list or monitor campaigns that were created from a recurring campaign template. Pagination is supported using page and pageSize parameters. Rate limit: 100 requests/second per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | integer | Yes | The ID of the recurring campaign to get child campaigns for. |
| `page` | integer | No | Page number for pagination (starting at 1). |
| `sort` | string | No | Field to sort campaigns by, with optional direction prefix. Use '-' for descending, '+' or no prefix for ascending. Fields: id, name, createdAt, updatedAt, startAt. Examples: -createdAt, +name, id |
| `pageSize` | integer | No | Number of results to return per page. Defaults to 20 if not specified. Maximum is 1000. |
| `campaignState` | array | No | Filter campaigns by state. Can specify multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Snippets

**Slug:** `ITERABLE_LIST_SNIPPETS`

Get all snippets for the current project. Use this action when you need to retrieve all code snippets available in the Iterable project, including their content, metadata, and associated variables.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List all templates

**Slug:** `ITERABLE_LIST_TEMPLATES`

Retrieves metadata about all templates in a project with optional pagination. Use this action when you need to enumerate all templates in a project, retrieve template IDs for subsequent operations, or paginate through large result sets. If no pagination parameters are provided, the unpaginated API returns all templates (deprecated behavior, may be removed in the future). Rate limit: 100 requests/second, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Page number for pagination (starting at 1). |
| `sort` | string | No | Field to sort templates by, with optional direction prefix. Use - for descending, + or no prefix for ascending. Templates can be sorted by id, name, createdAt, or updatedAt. Examples: -createdAt, +name, id |
| `pageSize` | integer | No | Number of results to return per page (defaults to 20, maximum of 1000). |
| `endDateTime` | string | No | Get templates created before this date time (yyyy-MM-dd HH:mm:ss [ZZ]). |
| `templateType` | string ("Base" | "Blast" | "Triggered" | "Workflow") | No | Template type enumeration for filtering. |
| `messageMedium` | string ("Email" | "Push" | "InApp" | "SMS") | No | Message medium enumeration for filtering. |
| `startDateTime` | string | No | Get templates created at or after this date time (yyyy-MM-dd HH:mm:ss [ZZ]). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List User Fields

**Slug:** `ITERABLE_LIST_USER_FIELDS`

Get all user fields within a project. Use when you need to discover what custom fields exist for users in your Iterable project, such as for understanding user data schema, creating imports, or validating field names before setting user data. Rate limit: 3 requests/second, per project.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Webhooks

**Slug:** `ITERABLE_LIST_WEBHOOKS`

Get all webhooks configured within the Iterable project. Use this action when you need to retrieve all webhook configurations, identify webhook IDs for subsequent operations, or understand the webhook setup for your project. This is useful for auditing webhook settings, checking which events are being monitored, or finding webhook endpoints. This action is read-only and idempotent.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Merge Users

**Slug:** `ITERABLE_MERGE_USERS`

Merge two user profiles in Iterable. Use when you need to consolidate duplicate user profiles. This action merges all profile data and events from the source user into the destination user. The source user profile will be deleted after the merge is complete. IMPORTANT: Provide exactly one source identifier (sourceEmail OR sourceUserId) and exactly one destination identifier (destinationEmail OR destinationUserId). The action will return an error if the source user does not exist. If the destination user is not found, the source user will be updated instead of merged. This action is irreversible — once merged, the source user profile cannot be recovered. Rate limit: 50 requests/second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `arrayMerge` | array | No | An array of objects specifying array fields to merge during the operation. Only references custom arrays, not Iterable-managed arrays like 'devices'. |
| `sourceEmail` | string | No | An email address that identifies the source user profile. Provide sourceEmail or sourceUserId (but not both). |
| `sourceUserId` | string | No | A user ID that identifies the source user profile. Provide sourceEmail or sourceUserId (but not both). |
| `destinationEmail` | string | No | An email address that identifies the destination user profile. Provide destinationEmail or destinationUserId (but not both). |
| `destinationUserId` | string | No | A user ID that identifies the destination user profile. Provide destinationEmail or destinationUserId (but not both). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Preview email template

**Slug:** `ITERABLE_PREVIEW_EMAIL_TEMPLATE`

Generate a fully rendered HTML preview of an email template using custom data. Use this action when you need to preview how an email template will look when rendered with specific data fields or data feed data. This is useful for testing template rendering before sending campaigns, or for verifying template logic with different data scenarios. The preview shows exactly how the template will appear when sent to a user. Note: Fields not provided in the request data will be rendered as empty strings in the preview.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | The locale of content to get. Leave empty for default locale. |
| `dataFeed` | object | No | Data feed content for template rendering. Provide key-value pairs for any data feed fields that your template references. Data feed fields are accessible as [[fieldName]] when template's mergeDataFeedContext=false, or as {{fieldName}} when mergeDataFeedContext=true. If fetchDataFeeds is true, this will be merged with (or overridden by) the fetched data feed data. |
| `dataFields` | object | No | Data fields for template rendering. Provide key-value pairs for any user profile, event, or custom fields that your template references. Fields are accessible as {{fieldName}} in templates. |
| `templateId` | integer | Yes | The unique identifier of the email template to preview. |
| `fetchDataFeeds` | boolean | No | Whether to fetch and use actual data feeds configured in the template. If true, the data feeds associated with the template will be fetched and used for rendering. Data from dataFields will be used to render dynamic URLs in the data feed configuration. If dataFeed is also provided, it will be merged with (or override) the fetched data feed data. Defaults to false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Preview in-app template

**Slug:** `ITERABLE_PREVIEW_IN_APP_TEMPLATE`

Generate a fully rendered HTML preview of an in-app template using custom data. Use this action when you need to simulate how a template would appear when sent to a user, allowing you to test template rendering with specific data fields and/or data feed data. This is useful for previewing templates before sending campaigns or testing template logic with different data scenarios. Note: If a template references a field that is not provided in the request data, that field will be rendered as an empty string, matching production behavior.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `locale` | string | No | The locale of content to get. If not specified, returns the default locale content. |
| `dataFeed` | object | No | Data feed content for template rendering. Provide key-value pairs for any data feed fields that your template references. Data feed fields are accessible as [[fieldName]] when mergeDataFeedContext=false, or as {{fieldName}} when mergeDataFeedContext=true. |
| `dataFields` | object | No | Data fields for template rendering. Provide key-value pairs for any user profile, event, or custom fields that your template references. Fields are accessible as {{fieldName}} in templates. |
| `templateId` | integer | Yes | The unique identifier of the in-app template to preview. |
| `fetchDataFeeds` | boolean | No | Whether to fetch and use actual data feeds configured in the template. If true, the data feeds associated with the template will be fetched and used for rendering. Defaults to false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Preview List Users

**Slug:** `ITERABLE_PREVIEW_LIST_USERS`

Get a random sample of up to 5000 users within a list. Use when you need to quickly preview the users in a specific list without fetching the entire list. This action is useful for sampling list membership before running campaigns or verifying list content. Rate limit: 5 requests/minute, per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `size` | integer | No | Number of users to return, up to 5000. Defaults to 1000. |
| `listId` | integer | Yes | The unique identifier of the list to preview users from. |
| `preferUserId` | boolean | No | If true, will return the userId instead of email if both exist in a user profile for a hybrid project. Defaults to false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Replace Catalog Item

**Slug:** `ITERABLE_REPLACE_CATALOG_ITEM`

Asynchronously creates or replaces the specified catalog item in the given catalog. Use this action when you need to completely replace a catalog item with new data. If the item already exists, it will be fully replaced by the value provided in the request body. Previously existing fields not included in the new value will be lost. This operation is asynchronous — the API returns 202 Accepted when the request is queued for processing. Use GET /api/catalogs/{catalogName}/items/{itemId} to verify completion. Note: A catalog item's ID must be unique, contain only alphanumeric characters and dashes, and have a maximum length of 255 characters. Do not use periods in field names. The rate limit is 1000 requests per second.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `value` | object | Yes | JSON representation of the catalog item. Max size is 30KB. Do not use periods in field names. |
| `itemId` | string | Yes | The unique identifier of the catalog item. Must be alphanumeric with dashes, case-sensitive, maximum 255 characters. |
| `catalogName` | string | Yes | The name of the catalog containing the item. Alphanumeric with dashes, case-insensitive, maximum 255 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Replace Metadata Item

**Slug:** `ITERABLE_REPLACE_METADATA_ITEM`

Asynchronously creates or replaces the metadata item associated with the specified key. Use when you need to create a new metadata item or completely replace an existing one. A 200 response indicates a valid request that will be processed; updates may not be made immediately. Use GET /api/metadata/{table}/{key} to verify the update completion. Note: This is an idempotent operation - calling it multiple times with the same parameters will result in the same state.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `key` | string | Yes | Metadata key (Alphanumeric, case sensitive). |
| `table` | string | Yes | Table name (Alphanumeric, case insensitive). |
| `value` | object | Yes | The JSON metadata value to store. Max size is 30KB. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Schedule Campaign

**Slug:** `ITERABLE_SCHEDULE_CAMPAIGN`

Schedule an existing campaign to be sent at a specified time. Use when you have created a campaign and need to schedule it for future sending. The campaign must exist and not already be scheduled or in the process of sending. You can optionally specify time zone settings to send at the same local time across different recipient time zones. Note: The send time must be up to 7 days in the future. Scheduling can be modified or canceled before the send time using the 'Cancel campaign' endpoint.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sendAt` | string | Yes | When to send the campaign, up to 7 days in the future. ISO-8601 date time format (e.g. 2007-12-03T10:15:30Z). |
| `campaignId` | integer | Yes | The unique identifier of the campaign to schedule. Use the campaign ID returned from the 'List campaigns' or 'Get campaign' endpoint. |
| `recipientTimeZone` | object | No | Time zone configuration for scheduled campaign sending.  When sendMode is set to RecipientTimeZone, this specifies the time zone settings for determining when to send to each recipient. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send Campaign

**Slug:** `ITERABLE_SEND_CAMPAIGN`

Send an existing campaign immediately in Iterable. Use when you need to trigger a campaign to send right away, bypassing any scheduled send time. The campaign must be in a 'Ready' state before it can be sent using this endpoint. This action is useful for testing campaigns or sending them outside of their normal schedule. Note: Once a campaign starts sending, it cannot be stopped. Ensure the campaign is in the correct state before using this action.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `campaignId` | integer | Yes | The unique identifier of the campaign to send. Use the campaign ID returned from the 'List campaigns' or 'Get campaign' endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send email template proof

**Slug:** `ITERABLE_SEND_EMAIL_PROOF`

Send a proof of an email template to a specific user. Use this action when you need to preview an email template by sending a proof to a specific recipient before sending it to a larger audience. This allows you to verify that the template renders correctly with sample data and contains the expected content. Provide the template ID and either an email address or user ID to identify the recipient. You can optionally include data fields to merge into the template for more accurate preview rendering. Rate limit: 20 requests/second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `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. |
| `dataFields` | object | No | A JSON object containing fields to merge into the template for the proof email. These fields will override user profile data fields of the same name. |
| `templateId` | integer | Yes | The template ID to send proof for. This is the unique identifier of the email template. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send in-app notification to target

**Slug:** `ITERABLE_SEND_IN_APP`

Send an in-app notification to a specific user using Iterable. Use this action when you need to send an in-app notification directly to a recipient. The notification is sent based on a campaign/template ID, and the recipient is identified either by their email address or user ID. Request data fields override user profile data fields. A reference to the user profile is provided via the profile to help resolve field collisions. Learn about identifying users by userId and email.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sendAt` | string | No | Schedule the message for up to 365 days in the future. If set in the past, the message is sent immediately. Format is YYYY-MM-DD HH:MM:SS in UTC. |
| `campaignId` | integer | Yes | The ID of the campaign/template to use for sending the in-app notification. The campaign must be associated with an in-app template. |
| `dataFields` | object | No | A JSON object containing fields to merge into the in-app template. These fields will override user profile data fields of the same name. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |
| `allowRepeatMarketingSends` | boolean | No | Allow repeat marketing sends. Defaults to true. Set to false to prevent sending if the recipient has previously received a marketing message from this campaign. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send in-app template proof

**Slug:** `ITERABLE_SEND_IN_APP_PROOF`

Send a proof of an in-app template to a specific user using Iterable. Use this action when you need to preview how an in-app template will look for a specific user before sending the actual campaign. The proof email contains the rendered template with merge fields populated using the provided data fields and user profile information. Provide either recipientEmail or recipientUserId (but not both) to identify the target user. This action is rate-limited to 20 requests per second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `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. |
| `dataFields` | object | No | Fields to merge into template for proof. These fields will override user profile data fields of the same name. |
| `templateId` | integer | Yes | Template ID to send proof for. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send push to target

**Slug:** `ITERABLE_SEND_PUSH`

Send a push notification to a specific user using Iterable. Use this action when you need to send a transactional push notification directly to a recipient. The push is sent based on a campaign/template ID, and the recipient is identified either by their email address or user ID. Request data fields override user profile data fields. A reference to the user profile is provided via the profile to help resolve field collisions. Learn about identifying users by userId and email.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sendAt` | string | No | Schedule the message for up to 365 days in the future. If set in the past, the push is sent immediately. Format is YYYY-MM-DD HH:MM:SS in UTC. |
| `metadata` | object | No | Metadata to pass back via system webhooks. This is not used for rendering the push notification content. |
| `campaignId` | integer | Yes | The ID of the campaign/template to use for sending the push notification. The campaign must be associated with a push template. |
| `dataFields` | object | No | A JSON object containing fields to merge into the push template. These fields will override user profile data fields of the same name. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |
| `allowRepeatMarketingSends` | boolean | No | Allow repeat marketing sends. Defaults to true. Set to false to prevent sending if the recipient has previously received a marketing push from this campaign. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send push template proof

**Slug:** `ITERABLE_SEND_PUSH_PROOF`

Send a proof of a push template to a specific user. Use this action when you need to preview a push template by sending a proof to a specific recipient before sending it to a larger audience. This allows you to verify that the template renders correctly with sample data and contains the expected content. Provide the template ID and either an email address or user ID to identify the recipient. You can optionally include data fields to merge into the template for more accurate preview rendering. # ci-skip: action-tags (POST /api/templates/push/proof sends a proof push as a side effect, not a durable resource creation) Rate limit: 20 requests/second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `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. |
| `dataFields` | object | No | A JSON object containing fields to merge into the template for the proof message. These fields will override user profile data fields of the same name. |
| `templateId` | integer | Yes | The template ID to send proof for. This is the unique identifier of the push template. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send SMS template proof

**Slug:** `ITERABLE_SEND_SMS_PROOF`

Send a proof of an SMS template to a specific user. Use this action when you need to preview an SMS template by sending a proof to a specific recipient before sending it to a larger audience. This allows you to verify that the template renders correctly with sample data and contains the expected content. Provide the template ID and either an email address or user ID to identify the recipient. You can optionally include data fields to merge into the template for more accurate preview rendering. Rate limit: 20 requests/second per API key.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `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. |
| `dataFields` | object | No | A JSON object containing fields to merge into the template for the proof SMS. These fields will override user profile data fields of the same name. |
| `templateId` | integer | Yes | The template ID to send proof for. This is the unique identifier of the SMS template. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send WhatsApp to target

**Slug:** `ITERABLE_SEND_WHATS_APP`

Send a WhatsApp message to a specific user using Iterable. Use this action when you need to send a transactional WhatsApp message directly to a recipient. The WhatsApp message is sent based on a campaign/template ID, and the recipient is identified either by their email address or user ID. Request data fields override user profile data fields. This API is typically used for transactional messaging. Learn about identifying users by userId and email.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sendAt` | string | No | Schedule the message for up to 365 days in the future. If set in the past, the WhatsApp message is sent immediately. Format is YYYY-MM-DD HH:MM:SS in UTC. |
| `campaignId` | integer | Yes | The ID of the campaign/template to use for sending the WhatsApp message. The campaign must be associated with a WhatsApp template. |
| `dataFields` | object | No | A JSON object containing fields to merge into the WhatsApp template. These fields will override user profile data fields of the same name. |
| `recipientEmail` | string | No | An email address that identifies a user profile in Iterable. Provide a recipientEmail or 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 recipientUserId (but not both), depending on how your project identifies users. |
| `allowRepeatMarketingSends` | boolean | No | Allow repeat marketing sends. Defaults to true. Set to false to prevent sending if the recipient has previously received a marketing WhatsApp message from this campaign. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Start Export

**Slug:** `ITERABLE_START_EXPORT`

Start a data export job. The export processes as a background job asynchronously. Use the 'List export files' action to check export status by jobId and obtain file download links once completed. Use this action when you need to export data such as user profiles, email events, push notifications, SMS messages, purchases, or custom events. The exported data can be in CSV or JSON format. Rate limit: 1 request/second, per organization. Concurrent request limit: Up to 4 exports process at a time, per organization. Additional requests are queued.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `delimiter` | string | No | CSV file delimiter character. Only applicable when output_format is 'text/csv'. |
| `campaignId` | integer | No | Only export data from this specific campaign ID. |
| `omitFields` | string | No | Comma-separated list of field names to omit from the export. |
| `onlyFields` | string | No | Comma-separated list of field names to include in the export. Only these fields will be returned. |
| `endDateTime` | string | No | Export events occurring or users updated before date and time exclusive. Format: yyyy-MM-dd HH:mm:ss [ZZ]. |
| `dataTypeName` | string ("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" | "emailSubscribe" | "emailUnSubscribe" | "purchase" | "customEvent" | "user" | "smsUsageInfo" | "embeddedSend" | "embeddedSendSkip" | "embeddedClick" | "embeddedReceived" | "embeddedImpression" | "embeddedSession" | "unknownSession" | "journeyExit" | "whatsAppBounce" | "whatsAppClick" | "whatsAppReceived" | "whatsAppSeen" | "whatsAppSend" | "whatsAppSendSkip" | "whatsAppUsageInfo") | Yes | The type of data to export. Choose from various event types including email, push, SMS, in-app, web push, purchase, custom events, and user data. |
| `outputFormat` | string ("text/csv" | "application/x-json-stream") | Yes | The output format for the export file. Use 'text/csv' for CSV format or 'application/x-json-stream' for JSON newline-delimited format. |
| `startDateTime` | string | No | Export events occurring or users updated after date and time inclusive. Format: yyyy-MM-dd HH:mm:ss [ZZ]. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Subscribe to List

**Slug:** `ITERABLE_SUBSCRIBE_TO_LIST`

Subscribe one or more users to a specific list in Iterable. Use this action when you need to add subscribers to a list by their email address, userId, or both. The action can create new user profiles if they don't exist (unless updateExistingUsersOnly is set to true). This is an idempotent operation - re-subscribing a user who is already on the list has no additional effect. Learn about identifying users by userId and email.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listId` | integer | Yes | The unique identifier of the list to subscribe users to. |
| `subscribers` | array | Yes | List of subscribers to add to the list. Each subscriber must have at least an email or userId. |
| `updateExistingUsersOnly` | boolean | No | Whether to skip operation when the request includes a userId or email that doesn't yet exist in the Iterable project. When true, Iterable ignores requests with unknown userIds and email addresses. When false, Iterable creates new users. Defaults to false. Only respected in API calls for userID-based and hybrid projects. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Subscribe User By ID

**Slug:** `ITERABLE_SUBSCRIBE_USER_BY_ID`

Subscribes a user to the specified subscription group by their userId. Use when you need to add a user to a specific email list, message type, or message channel subscription. Contact your customer success manager to enable this API before using this action.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `userId` | string | Yes | The unique userId of the user to subscribe. |
| `subscriptionGroup` | string | Yes | The subscription group type. Valid values: 'emailList', 'messageType', 'messageChannel'. Alphanumeric, case insensitive. |
| `subscriptionGroupId` | integer | Yes | The numeric ID of the subscription group. For email lists, this is the list ID. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Embedded Click

**Slug:** `ITERABLE_TRACK_EMBEDDED_CLICK`

Tracks a click event on an embedded message. Use this action when you need to record user interactions with buttons or links in embedded messages. This creates an embeddedClick event in Iterable for analytics and campaign tracking purposes. For test messages (proofs), no events are created. Note: You must provide either an email or userId to identify the user profile, but not both.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | Email address identifying the user profile. Provide either email or userId, but not both. |
| `userId` | string | No | User ID identifying the user profile. Provide either email or userId, but not both. |
| `createdAt` | integer | No | Unix timestamp of when the click occurred. If not provided, defaults to when Iterable receives the event. |
| `messageId` | string | Yes | The unique identifier of the message on which the click occurred. |
| `targetUrl` | string | No | The URL associated with the click target. |
| `deviceInfo` | object | No | Device information for embedded message events. |
| `buttonIdentifier` | string | No | The identifier of the button that was clicked. Button IDs are defined in Iterable as part of the template or campaign. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Embedded Received

**Slug:** `ITERABLE_TRACK_EMBEDDED_RECEIVED`

Track that an embedded message was received on a device. Use this action when you need to record that a device has retrieved an embedded message from Iterable's API. Call this endpoint once per embedded message retrieved. Note that this only indicates the message was retrieved—it does not mean the message has been displayed to the user. Iterable's SDKs automatically call this endpoint, but if you're not using an SDK, call this manually. Provide either email or userId (but not both) to identify the user profile.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `createdAt` | integer | No | The time of the event's occurrence (Unix timestamp). If unspecified, gets set to the time Iterable received the event. |
| `messageId` | string | Yes | ID of the message that was retrieved by a device. |
| `deviceInfo` | object | No | Device information for embedded message tracking. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Embedded Session

**Slug:** `ITERABLE_TRACK_EMBEDDED_SESSION`

Tracks an embedded message session and related impressions in Iterable. Use this action when you need to report user engagement with embedded messages, including tracking when sessions start and end, and recording impressions for each message that was displayed during the session. This helps Iterable understand user behavior and optimize embedded message campaigns. An embeddedSession event represents a period of time when a user is viewing a page or screen where embedded messages can be displayed. An embeddedImpression event represents how many times a message was visible and for how long.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `session` | object | Yes | Session information including unique ID, start time, and end time. |
| `createdAt` | integer | No | The time of the event's occurrence (Unix timestamp). If unspecified, gets set to the time Iterable received the event. |
| `deviceInfo` | object | Yes | Device information including app package name, device ID, and platform. |
| `impressions` | array | No | Impressions associated with the session, tracking when messages were displayed and for how long. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Event

**Slug:** `ITERABLE_TRACK_EVENT`

Track an event in Iterable. Use when you need to record a user action, system event, or custom analytics event. This action sends event data to Iterable for processing. Events are created asynchronously and processed separately from bulk endpoint. To ensure events are tracked in order, send them all to the same endpoint (bulk or non-bulk). There is a soft limit (default 8,000) on unique fields a custom event can have. Provide either email or userId (but not both) depending on how your project identifies users. For events of the same name, identically named data fields must be of the same type. Rate limit: 100 requests/second per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Optional event ID. If an event exists with that ID, the event will be updated. If not specified, a new ID is automatically generated. Cannot be longer than 512 bytes. |
| `email` | string | No | An email address that identifies a user profile. Provide email or userId (but not both). |
| `userId` | string | No | A user ID that identifies a user profile. Provide email or userId (but not both). |
| `createdAt` | integer | No | Unix timestamp when the event occurred. If unspecified, defaults to when the event was received. |
| `eventName` | string | Yes | The name of the event to track. Must be a non-empty string. |
| `campaignId` | integer | No | Campaign tied to conversion. Use this to associate the event with a specific campaign. |
| `dataFields` | object | No | Additional data associated with the event (e.g., item amount, quantity). For events of the same name, identically named data fields must be of the same type. |
| `templateId` | integer | No | Template ID associated with the event. |
| `createNewFields` | boolean | No | Whether new fields should be ingested and added to the schema. Defaults to the project's setting to allow or drop unrecognized fields. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Events in Bulk

**Slug:** `ITERABLE_TRACK_EVENTS_BULK`

Track multiple events in bulk in Iterable. Use this action when you need to track multiple events at once for better performance and to ensure events are processed in the correct order (since bulk events are processed asynchronously together). Each event requires an eventName and should include either an email or userId to identify the user. Note: There is a soft limit of 8,000 unique fields a custom event can have. For events with the same name, identically named data fields must be of the same type.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `events` | array | Yes | List of events to track. Each event requires an eventName. Provide either email or userId for each event to identify the user. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Track Purchase

**Slug:** `ITERABLE_TRACK_PURCHASE`

Track a purchase event in Iterable. Use when you need to record a purchase transaction. This action tracks purchase events, clearing the shoppingCartItems field on the user profile. The user profile is updated if it already exists, or created otherwise. Note that there is a soft limit of 1,000 unique fields per user, and field types must remain consistent across all requests in the project. The total amount must match the sum of items (price × quantity), though this is not enforced by the API. If an optional purchase ID is provided and a purchase with that ID already exists, the purchase will be updated instead of creating a new one.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | string | No | Optional purchase ID. If a purchase exists with that ID, it will be updated. If not specified, a new ID will be auto-generated. Maximum 512 bytes. |
| `user` | object | Yes | The user making the purchase. The user profile is updated if it exists or created otherwise. |
| `items` | array | Yes | List of items purchased. shoppingCartItems on the user profile is cleared after tracking. |
| `total` | number | Yes | Total order dollar amount. |
| `createdAt` | integer | No | Time the event happened as a Unix timestamp. If not specified, defaults to the time the event was received. |
| `campaignId` | integer | No | Campaign ID for attribution purposes. |
| `dataFields` | object | No | Additional fields to be tracked with this purchase event. |
| `templateId` | integer | No | Template ID used in A/B testing attribution. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Trigger Campaign

**Slug:** `ITERABLE_TRIGGER_CAMPAIGN`

Trigger a campaign to send to one or more lists of recipients. Use when you need to initiate a marketing campaign immediately, sending to all users in the specified lists. The campaign must be in a ready state before triggering. This action is useful for time-sensitive announcements or promotional campaigns that need to go out immediately. Note: This action cannot be undone once the campaign begins sending. If you need to stop a campaign after triggering, use the 'Cancel campaign' action.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listIds` | array | Yes | A non-empty array of list IDs to send the campaign to. All lists must exist in your Iterable project. |
| `campaignId` | integer | Yes | The unique identifier of the campaign to trigger. Use the campaign ID returned from the 'List campaigns' or 'Get campaign' endpoint. |
| `dataFields` | object | No | A JSON object containing fields to merge into the handlebars context for template personalization. These fields override campaign-level data fields for each recipient. |
| `suppressionListIds` | array | No | An array of list IDs to suppress from receiving this campaign. Users in these lists will not be sent the campaign even if they are in the target lists. |
| `allowRepeatMarketingSends` | boolean | No | Whether to allow repeat marketing sends to users who have already received this campaign. Defaults to true. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Trigger Journey

**Slug:** `ITERABLE_TRIGGER_JOURNEY`

Trigger a journey (workflow) in Iterable for a specific user or list. Use this action when you need to start a journey for an individual user (by email or userId) or for all users in a list. Triggering with a list is asynchronous - if a list trigger is already in progress, it must complete before the same list can be triggered again for the same journey. Journey statistics may take several minutes to update if other journeys are running in parallel. If the journey's start tile has a suppression list configured, users on that list will be excluded from the journey. Provide either email or userId (but not both) when triggering for individual users. Note: This action is idempotent for individual user triggers - triggering the same user for the same journey multiple times will not cause duplicate entries if the journey's entry settings prevent re-entry.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `listId` | integer | No | The unique identifier of a list (standard or dynamic) to trigger the journey for all users in that list. When using listId, email and userId should not be provided. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `dataFields` | object | No | A JSON object containing additional data fields to associate with the triggering event. These will be available in the journey's message personalization. |
| `workflowId` | integer | Yes | The unique identifier of the journey (workflow) to trigger. Use the journey ID returned from the 'List journeys' endpoint. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Unforget User

**Slug:** `ITERABLE_UNFORGET_USER`

Unforgets a previously forgotten user in Iterable, resuming data collection. This action allows you to resume collecting data about a user who was previously forgotten (deleted) from your Iterable project. The previously deleted data cannot be recovered, but new data will be collected going forward. Use this action when you need to re-enable tracking for a user after they have requested to be re-included in data collection (e.g., after a GDPR revocation request). In email-based projects, you must unforget users by email. In userID-based projects, you must unforget users by userId. In hybrid projects and projects migrated from email-based to userID-based, you can unforget users by either email or userId. Important: Deleted/forgotten data cannot be recovered, only new data collection resumes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Unsubscribe from list

**Slug:** `ITERABLE_UNSUBSCRIBE_FROM_LIST`

Remove users from a list. Use this action when you need to unsubscribe one or more users from a specific email list in Iterable. This action permanently removes subscribers from the specified list and cannot be easily reversed. Users will need to be manually re-subscribed if they need access to the list again. Note: Users can be identified by email, userId, or both. At least one identifier must be provided for each subscriber.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `listId` | integer | Yes | The unique identifier of the list to unsubscribe users from. |
| `campaignId` | integer | No | Associate this unsubscribe action with a specific campaign ID for attribution purposes. |
| `subscribers` | array | Yes | A list of subscribers to unsubscribe. Each subscriber must have at least an email or userId specified. |
| `channelUnsubscribe` | boolean | No | If true, unsubscribe the email from the list's associated channel - essentially a global unsubscribe. Defaults to false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Unsubscribe User By ID

**Slug:** `ITERABLE_UNSUBSCRIBE_USER_BY_ID`

Unsubscribes a user from the specified subscription group by their userId. Use when you need to remove a user from a specific email list, message type, or message channel subscription. Contact your customer success manager to enable this API before using this action. Note: This action is irreversible — once a user is unsubscribed, they will not receive messages from that subscription group unless they re-subscribe.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `userId` | string | Yes | The unique userId of the user to unsubscribe. |
| `subscriptionGroup` | string | Yes | The subscription group type. Valid values: 'emailList', 'messageType', 'messageChannel'. Alphanumeric, case insensitive. |
| `subscriptionGroupId` | integer | Yes | The numeric ID of the subscription group. For email lists, this is the list ID. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Shopping Cart

**Slug:** `ITERABLE_UPDATE_CART`

Update a user's shopping cart items in Iterable. Use when you need to update the shoppingCartItems field on a user profile with items from the user's shopping cart. The user profile is updated if it already exists or created otherwise via the user field. Types of data fields must match the types sent in previous requests, across all data fields in the project. Learn about identifying users by userId and email. This action is idempotent - calling it multiple times with the same items will simply update the shoppingCartItems field on the user profile.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `user` | object | Yes | User identifier for the cart update. Provide either email or userId (but not both). |
| `items` | array | Yes | List of cart items to update. Each item must have id, name, price, and quantity. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Catalog Field Mappings

**Slug:** `ITERABLE_UPDATE_CATALOG_FIELD_MAPPINGS`

Set a catalog's field mappings (data types) in Iterable. Use this action when you need to define the data type for fields in a catalog. After being set, a given field's data type may not be changed. Valid types: boolean, date, geo_location, long, double, object, and string. Note: This action is idempotent - applying the same field mappings multiple times will have the same effect. Field types cannot be changed once set.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `catalogName` | string | Yes | Name of the catalog to update field mappings for. Must be alphanumeric with dashes, case insensitive, maximum 255 characters. |
| `mappingsUpdates` | array | Yes | List of field mapping updates to apply. Each mapping defines a field name and its target data type. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Catalog Item

**Slug:** `ITERABLE_UPDATE_CATALOG_ITEM`

Asynchronously creates or updates the specified catalog item in the given catalog. Use when you need to create a new catalog item or update an existing one. If the item already exists, its fields will be updated with the values provided. Previously existing fields not included in the request body will remain unchanged. The operation is asynchronous — use GET /api/catalogs/{catalogName}/items/{itemId} to verify completion. Note: A catalog item's ID must be unique, contain only alphanumeric characters and dashes, and have a maximum length of 255 characters. Do not use periods in field names.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `itemId` | string | Yes | The unique identifier of the catalog item. Must be alphanumeric with dashes, case-sensitive, maximum 255 characters. |
| `update` | object | Yes | JSON representation of the catalog item fields to update or create. Max size is 30KB. Do not use periods in field names. |
| `catalogName` | string | Yes | The name of the catalog containing the item. Alphanumeric with dashes, case-insensitive, maximum 255 characters. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update email template

**Slug:** `ITERABLE_UPDATE_EMAIL_TEMPLATE`

Update an existing email template in Iterable. Use this action when you need to modify an existing email template's content, settings, sender information, or metadata. Only the fields included in the request will be updated; previously existing fields not included will retain their current values. The templateId is required to identify which template to update. This is an idempotent operation - calling it multiple times with the same parameters will result in the same state.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `html` | string | No | HTML contents of the email template. |
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `subject` | string | No | Email subject line. |
| `ccEmails` | array | No | CC email addresses for carbon copy. |
| `fromName` | string | No | From name for the email. |
| `metadata` | object | No | Metadata associated with the email template. |
| `bccEmails` | array | No | BCC email addresses for blind carbon copy. |
| `fromEmail` | string | No | From email (must be an authorized sender). |
| `plainText` | string | No | Plain text contents of the email template. |
| `dataFeedId` | integer | No | [Deprecated - use dataFeedIds instead] Id for data feed used in template rendering. |
| `linkParams` | array | No | Parameters to append to each URL in HTML contents. |
| `templateId` | integer | Yes | The unique identifier of the email template to update. |
| `dataFeedIds` | array | No | Ids for data feeds used in template rendering. |
| `replyToEmail` | string | No | Reply-to email address. |
| `cacheDataFeed` | object | No | Cache data feed lookups for 1 hour. |
| `creatorUserId` | string | No | User ID of the template creator. |
| `messageTypeId` | integer | No | Message type ID for the template. |
| `preheaderText` | string | No | Preheader text displayed after the subject line in email clients. |
| `isDefaultLocale` | boolean | No | Identifies if the locale associated with the response is the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | No | Client template ID. Used as a secondary key to reference the template. |
| `campaignDataFields` | object | 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. |
| `mergeDataFeedContext` | object | No | Merge data feed contents into user context, so fields can be referenced by {{field}} instead of [[field]]. |
| `googleAnalyticsCampaignName` | string | No | Google Analytics utm_campaign value. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Embedded Template

**Slug:** `ITERABLE_UPDATE_EMBEDDED_TEMPLATE`

Updates an embedded message template with the specified fields. Use this action when you need to modify an existing embedded message template in Iterable. Only the fields included in the request body will be updated; previously existing fields not specified will remain unchanged. This is an idempotent operation — calling it multiple times with the same parameters will produce the same result.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `body` | string | No | Body text of the embedded message. |
| `name` | string | No | Name of the template. |
| `title` | string | No | Title of the embedded message. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable automatically sends the content with a locale that matches a user profile's locale field. |
| `payload` | object | No | Additional payload data for the template. |
| `elements` | object | No | Represents the visual elements of an embedded message template. |
| `campaignId` | integer | No | Campaign ID associated with this template. |
| `templateId` | integer | Yes | Embedded message template ID. Required to identify the template to update. |
| `placementId` | object | No | Placement ID that this template is associated with. |
| `messageTypeId` | integer | No | Message type ID. |
| `isDefaultLocale` | boolean | No | Identifies if the locale associated with the response is the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | No | Client template ID. Used as a secondary key to reference the template. |
| `campaignDataFields` | object | 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. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update in-app template

**Slug:** `ITERABLE_UPDATE_IN_APP_TEMPLATE`

Update an existing in-app template in Iterable. Use this action when you need to modify an existing in-app template. Only the fields specified in the request will be updated; fields not included will retain their existing values. The templateId is required to identify the template to update. This action performs a partial update. Note: This action is idempotent and will only update the fields provided. Fields not included in the request will retain their existing values.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `html` | string | No | HTML content of the in-app notification. |
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable automatically sends the content with a locale that matches a user profile's locale field. |
| `payload` | object | No | Payload data for the template. |
| `campaignId` | integer | No | Campaign ID. |
| `templateId` | integer | Yes | In-app template ID. Required to identify the template to update. |
| `inboxMetadata` | object | No | Metadata for the mobile inbox feature. |
| `messageTypeId` | integer | No | Message Type ID associated with this template. |
| `isDefaultLocale` | boolean | No | Identifies if the locale associated with the response is the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | No | Client template ID. Used as a secondary key to reference the template. |
| `campaignDataFields` | object | 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. |
| `expirationDateTime` | string | No | The in-app message's absolute expiration time. If set to a time before the campaign sends, contacts will never see the message. Format is YYYY-MM-DD HH:MM:SS (UTC timestamp). |
| `expirationDuration` | string | No | The in-app message's expiration time relative to its send time. Should be an expression such as now+90d. Default expiration is 90 days after send time. |
| `inAppDisplaySettings` | object | No | Display settings for in-app messages. |
| `webInAppDisplaySettings` | object | No | Display settings for web in-app messages. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update push template

**Slug:** `ITERABLE_UPDATE_PUSH_TEMPLATE`

Updates an existing push template in Iterable. Use this action when you need to modify an existing push template's content, settings, or configuration. Only the fields specified in the request body will be updated; previously existing fields not included in the request will remain unchanged. Note: This action is idempotent — calling it multiple times with the same request will have the same effect as calling it once.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Name of the template. |
| `wake` | boolean | No | Set the content-available flag on iOS notifications, which will wake the app in the background. |
| `badge` | string | No | Badge to set for push notification. |
| `sound` | string | No | Sound to play for the push notification. |
| `title` | string | No | Push message title. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `buttons` | array | No | Array of buttons that appear to respond to the push. Max of 3. |
| `message` | string | No | Push message content. |
| `payload` | object | No | Payload to send with push notification. |
| `deeplink` | object | No | Model representing deeplink URLs for different platforms. |
| `richMedia` | object | No | Model representing rich media URLs for different platforms. |
| `campaignId` | integer | No | Campaign ID. |
| `templateId` | integer | Yes | The unique identifier of the push template to update. |
| `dataFeedIds` | array | No | Ids for data feeds used in template rendering. |
| `isSilentPush` | boolean | No | Whether or not this is a silent push notification template. |
| `cacheDataFeed` | boolean | No | Cache data feed lookups for 1 hour. |
| `messageTypeId` | integer | No | Message Type ID. |
| `relevanceScore` | number | No | Relevance score for iOS notifications on iOS 15+. Number is clamped between 0 and 1.0. |
| `isDefaultLocale` | boolean | No | Ask your Iterable CSM to enroll you in the beta for this feature. Identifies if the locale associated with the response is the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | No | Client template ID. Used as a secondary key to reference the template. |
| `interruptionLevel` | string ("passive" | "active" | "time-sensitive" | "critical") | No | Interruption level for push notifications on iOS. |
| `campaignDataFields` | object | 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. |
| `mergeDataFeedContext` | boolean | No | Merge data feed contents into user context, so fields can be referenced by {{field}} instead of [[field]]. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update SMS template

**Slug:** `ITERABLE_UPDATE_SMS_TEMPLATE`

Update an existing SMS template in Iterable. Use this action when you need to modify the content or settings of an existing SMS template. Only the fields specified in the request will be updated; fields not included will retain their existing values. You must provide the templateId to identify which template to update. Note: This action modifies an existing template. The changes are irreversible and will affect all campaigns using this template.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `message` | string | No | SMS message content. |
| `imageUrl` | string | No | Image URL. |
| `campaignId` | object | No | Campaign ID. |
| `linkParams` | array | No | Parameters to append to each URL in contents. |
| `templateId` | integer | Yes | SMS template ID. Required to identify the template to update. |
| `messageTypeId` | integer | No | Message Type ID associated with this template. |
| `trackingDomain` | string | No | Tracking Domain. |
| `isDefaultLocale` | boolean | No | Identifies if the locale associated with the response is the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | No | Client template ID. Used as a secondary key to reference the template. |
| `campaignDataFields` | object | 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. |
| `googleAnalyticsCampaignName` | string | No | Google analytics utm_campaign value. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update snippet by ID or name

**Slug:** `ITERABLE_UPDATE_SNIPPET`

Updates an existing snippet by ID (numeric) or creates/updates a snippet by name (string). For numeric identifiers: only existing snippets can be updated (returns 404 if not found). For string identifiers (snippet names): creates the snippet if it doesn't exist, or updates it if it already exists. Use this action when you need to modify snippet content, description, or variables for an existing snippet, or create a new snippet by name.

#### Input Parameters

| Parameter | 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). |
| `variables` | array | No | A 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). |
| `identifier` | string | Yes | Snippet identifier. Numeric identifiers are treated as snippet IDs, string identifiers are treated as snippet names. For numeric IDs, only existing snippets can be updated. For names, creates a new snippet if one doesn't exist. |
| `description` | string | No | Description of the snippet. |
| `createdByUserId` | string | No | User ID (email) of the updater. If not provided, defaults to the project creator. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update User

**Slug:** `ITERABLE_UPDATE_USER`

Update user data or add a user if none exists in Iterable. Use when you need to create or update user profile information. This action merges data — missing fields are not deleted. Provide either email or userId (but not both) depending on how your project identifies users. There is a soft limit (default: 1,000) on the number of unique fields users can have. Types of data fields must match the types sent in previous requests, across all data fields in the project. Processing time varies based on the current load for Iterable's back-end services. To avoid race conditions, provide a buffer of at least 60 seconds between this request and subsequent dependent requests. Rate limit: 100 requests/second per project.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `dataFields` | object | No | Data to store on the user profile identified by userId or email. |
| `preferUserId` | boolean | No | Whether or not a new user should be created if the request includes a userId that doesn't yet exist in the Iterable project. Defaults to false. Only respected in API calls for email-based projects. |
| `createNewFields` | boolean | No | Whether new fields should be ingested and added to the schema. Defaults to project's setting to allow or drop unrecognized fields. |
| `mergeNestedObjects` | boolean | No | Merge top-level objects instead of overwriting them. Defaults to false. For example, if a user profile has data {'mySettings':{'mobile:true}} and the request has data {'mySettings':{'email':true}}, merging results in {'mySettings':{'mobile':true,'email':true}}. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update User Email

**Slug:** `ITERABLE_UPDATE_USER_EMAIL`

Updates a user's email address in Iterable. Use when you need to change a user's email in email-based projects. Use this action when you need to update a user's email address and migrate all profile data and events to the new email. To update an email in a userID-based or hybrid project, use POST /api/users/update instead. Specify either currentEmail or currentUserId in the request body, but not both — if both are provided, currentEmail takes precedence. This action is irreversible and will migrate all historical data to the new email address.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `newEmail` | string | Yes | The new email address to assign to the specified user. This field is required. |
| `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. If both are included, currentEmail takes precedence. |
| `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. If both are included, currentEmail takes precedence. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update User Subscriptions

**Slug:** `ITERABLE_UPDATE_USER_SUBSCRIPTIONS`

Updates user subscription preferences in Iterable. Use when you need to modify a user's subscription status for email lists, message types, and channels. IMPORTANT: This endpoint overwrites (does not merge) existing data for any non-null fields specified in the request. For example, if unsubscribedChannelIds is included in the request, it will replace the user's existing channel subscriptions entirely. Provide either email or userId (but not both), depending on how your project identifies users. Learn about identifying users by userId and email. This action is idempotent - calling it multiple times with the same parameters will result in the same subscription state.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | An email address that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `userId` | string | No | A user ID that identifies a user profile in Iterable. Provide an email or a userId (but not both), depending on how your project identifies users. |
| `campaignId` | integer | No | Campaign to attribute unsubscribes. Use with templateId to attribute unsubscribes to a specific workflow. |
| `templateId` | integer | No | Template to attribute unsubscribes. Use with campaignId to attribute unsubscribes to a specific workflow. |
| `emailListIds` | array | No | Lists that a user is subscribed to. Provide the list IDs. |
| `unsubscribedChannelIds` | array | No | Email channel IDs to unsubscribe from. |
| `subscribedMessageTypeIds` | array | No | Individual message type IDs to subscribe to. Does not impact channel subscriptions. To set this field, first have your CSM enable the opt-in message types feature. |
| `validateChannelAlignment` | boolean | No | Defaults to true (validation enabled). When false, allows subscribing users to message types that belong to unsubscribed channels. |
| `unsubscribedMessageTypeIds` | array | No | Individual message type IDs to unsubscribe from. Does not impact channel subscriptions. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Bulk Update User Subscriptions

**Slug:** `ITERABLE_UPDATE_USER_SUBSCRIPTIONS_BULK`

Bulk update subscription preferences for multiple users in Iterable. Use this action when you need to update email list subscriptions, message type subscriptions, or channel subscriptions for multiple users in a single API call. This is useful for bulk list management, compliance updates, or campaign-related subscription changes. IMPORTANT: This endpoint overwrites (does not merge) existing data for any non-null fields specified in the request. Provide email or userId for each user to identify them. This action modifies user communication preferences immediately. Learn about identifying users by userId and email.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `updateSubscriptionsRequests` | array | Yes | List of UpdateSubscriptionsRequests to process. Each request must have at least an email or userId. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Webhook

**Slug:** `ITERABLE_UPDATE_WEBHOOK`

Update an existing webhook configuration in Iterable. Use this action when you need to modify webhook settings such as endpoint URL, authentication type, enabled status, or campaign type subscriptions. Only the fields included in the request body will be updated; other fields remain unchanged. The webhook ID (id) is required to identify which webhook to update.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `id` | integer | Yes | The ID of the webhook in Iterable. This field is required to identify the webhook to update. |
| `enabled` | boolean | No | Whether or not Iterable will call the webhook when sending campaigns. |
| `headers` | array | No | Custom headers to include in webhook requests. |
| `authType` | string ("NoAuth" | "Basic" | "OAuth2") | No | Authentication type for webhook. |
| `endpoint` | string | No | The URL associated with the webhook. |
| `authToken` | string | No | Auth token to use for webhook authentication. |
| `blastSendEnabled` | boolean | No | Whether or not Iterable calls this webhook for blast campaigns. |
| `triggeredSendEnabled` | boolean | No | Whether or not Iterable calls this webhook for triggered campaigns. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upsert email template

**Slug:** `ITERABLE_UPSERT_EMAIL_TEMPLATE`

Create or update an email template in Iterable. Use this action when you need to create a new email template or update an existing one that matches the provided clientTemplateId. This endpoint performs an upsert operation: if no template exists with the given clientTemplateId, a new template is created; if one or more templates exist with the same clientTemplateId, all matching templates are updated with the provided fields. Note that only the fields specified in the request will be updated. Fields not included in the request will retain their existing values (for updates) or use default values (for new templates).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `html` | string | No | HTML contents of the email template. |
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Iterable will automatically pick the content with locale that matches a 'locale' field in the user profile. |
| `subject` | string | No | Email subject line. |
| `ccEmails` | array | No | CC email addresses for carbon copy. |
| `fromName` | string | No | From name displayed in email clients. |
| `bccEmails` | array | No | BCC email addresses for blind carbon copy. |
| `fromEmail` | string | No | From email address (must be an authorized sender). |
| `plainText` | string | No | Plain text contents of the email template. |
| `dataFeedId` | integer | No | [Deprecated - use dataFeedIds instead] ID for data feed used in template rendering. |
| `linkParams` | array | No | Parameters to append to each URL in HTML contents. |
| `dataFeedIds` | array | No | IDs for data feeds used in template rendering. |
| `replyToEmail` | string | No | Reply-to email address. |
| `cacheDataFeed` | object | No | Cache data feed lookups for 1 hour. |
| `creatorUserId` | string | No | Specify a specific creator user ID (email). The email must be an existing member of the project. Defaults to the organization creator. |
| `messageTypeId` | integer | No | Message Type ID associated with this template. |
| `preheaderText` | string | No | Preheader text displayed after the subject line in email clients. |
| `isDefaultLocale` | boolean | No | Sets the locale associated with the request content as the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | Yes | ID used by the client to identify a template. If multiple templates exist with this ID, all will be updated. |
| `mergeDataFeedContext` | boolean | No | Merge data feed contents into user context, so fields can be referenced by {{field}} instead of [[field]]. |
| `googleAnalyticsCampaignName` | string | No | Google Analytics utm_campaign value. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upsert Embedded Template

**Slug:** `ITERABLE_UPSERT_EMBEDDED_TEMPLATE`

Creates an embedded message template if it doesn't exist, or updates all embedded message templates that match the provided clientTemplateId. Use this action when you need to create or update embedded message templates in Iterable. If multiple templates exist with the same clientTemplateId, all will be updated with the provided data. This is useful for managing template versions or ensuring a template exists before sending campaigns.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `body` | string | No | Body text of the embedded message. |
| `name` | string | No | Name of the template. |
| `title` | string | No | Title of the embedded message. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `payload` | object | No | Represents the payload associated with the embedded template. |
| `elements` | object | No | Represents the visual elements of an embedded message template. |
| `placementId` | object | No | Placement ID that this template is associated with. |
| `creatorUserId` | string | No | Specify a specific creator user ID (email). The email must be an existing member of the project. Defaults to the organization creator. |
| `messageTypeId` | integer | No | Message type ID. |
| `isDefaultLocale` | boolean | No | Sets the locale associated with the request content as the template's default. Requires beta enrollment. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | Yes | ID used by the client to identify a template. If multiple templates exist with this ID, all will be updated. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upsert in-app template

**Slug:** `ITERABLE_UPSERT_IN_APP_TEMPLATE`

Create or update an in-app template in Iterable. Use this action when you need to create a new in-app template or update an existing one that matches the provided clientTemplateId. This endpoint performs an upsert operation: if no template exists with the given clientTemplateId, a new template is created; if one or more templates exist with the same clientTemplateId, all matching templates are updated with the provided fields. Note that only the fields specified in the request will be updated. Fields not included in the request will retain their existing values (for updates) or use default values (for new templates).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `html` | string | No | HTML of the in-app notification. |
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Iterable will automatically pick the content with locale that matches a 'locale' field in the user profile. |
| `payload` | object | No | Payload model for the template data. |
| `creatorUserId` | string | No | Specify a specific creator user ID (email). The email must be an existing member of the project. Defaults to the organization creator. |
| `inboxMetadata` | object | No | Metadata for the mobile inbox feature. |
| `messageTypeId` | integer | No | Message Type ID. |
| `isDefaultLocale` | boolean | No | Sets the locale associated with the request content as the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | Yes | ID used by the client to identify a template. If multiple templates exist with this ID, all will be updated. |
| `expirationDateTime` | string | No | Absolute expiration of message. Format: YYYY-MM-DD HH:MM:SS (UTC timestamp). |
| `expirationDuration` | string | No | Relative expiration of message. Example: now+90d. |
| `inAppDisplaySettings` | object | No | Display settings for in-app messages. |
| `webInAppDisplaySettings` | object | No | Display settings for web in-app messages. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upsert push template

**Slug:** `ITERABLE_UPSERT_PUSH_TEMPLATE`

Create or update a push template in Iterable. Use this action when you need to create a new push template or update an existing one that matches the provided clientTemplateId. This endpoint performs an upsert operation: if no template exists with the given clientTemplateId, a new template is created; if one or more templates exist with the same clientTemplateId, all matching templates are updated with the provided fields. Note that only the fields specified in the request will be updated. Fields not included in the request will retain their existing values (for updates) or use default values (for new templates). This action is idempotent - calling it multiple times with the same clientTemplateId will always result in the same state.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Name of the template. |
| `wake` | boolean | No | Set the content-available flag on iOS notifications, which will wake the app in the background. |
| `badge` | string | No | Badge to set for push notification. |
| `sound` | string | No | Sound to play for the push notification. |
| `title` | string | No | Push message title. |
| `locale` | string | No | The locale for the content in this request. Iterable will automatically pick the content with locale that matches a 'locale' field in the user profile. |
| `buttons` | array | No | Array of buttons that appear to respond to the push. Max of 3. |
| `message` | string | No | Push message body text. |
| `payload` | object | No | Model representing payload to send with push notification. |
| `deeplink` | object | No | Model representing deeplink URLs for different platforms. |
| `richMedia` | object | No | Model representing rich media URLs for different platforms. |
| `dataFeedIds` | array | No | Ids for data feeds used in template rendering. |
| `isSilentPush` | boolean | No | Whether or not this is a silent push notification template. |
| `cacheDataFeed` | boolean | No | Cache data feed lookups for 1 hour. |
| `creatorUserId` | string | No | Specify a specific creator user ID (email). The email must be an existing member of the project. Defaults to the organization creator. |
| `messageTypeId` | integer | No | Message Type ID associated with this template. |
| `relevanceScore` | number | No | Relevance score for iOS notifications on iOS 15+. Number is clamped between 0 and 1.0. |
| `isDefaultLocale` | boolean | No | Sets the locale associated with the request content as the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | Yes | ID used by the client to identify a template. If multiple templates exist with this ID, all will be updated. |
| `interruptionLevel` | string ("passive" | "active" | "time-sensitive" | "critical") | No | Interruption level for push notifications on iOS. |
| `mergeDataFeedContext` | boolean | No | Merge data feed contents into user context, so fields can be referenced by {{field}} instead of [[field]]. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upsert SMS template

**Slug:** `ITERABLE_UPSERT_SMS_TEMPLATE`

Create or update an SMS template in Iterable. Use this action when you need to create a new SMS template or update an existing one that matches the provided clientTemplateId. This endpoint performs an upsert operation: if no template exists with the given clientTemplateId, a new template is created; if one or more templates exist with the same clientTemplateId, all matching templates are updated with the provided fields. Note that only the fields specified in the request will be updated. Fields not included in the request will retain their existing values (for updates) or use default values (for new templates).

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | Name of the template. |
| `locale` | string | No | The locale for the content in this request. Leave empty for default locale. Iterable will automatically send the content with locale that matches a 'locale' field in the user profile. |
| `message` | string | No | SMS message content. |
| `imageUrl` | string | No | Image URL to include in the SMS. |
| `linkParams` | array | No | Parameters to append to each URL in SMS content. |
| `creatorUserId` | string | No | Specify a specific creator user ID (email). The email must be an existing member of the project. Defaults to the organization creator. |
| `messageTypeId` | integer | No | Message Type ID associated with this template. |
| `isDefaultLocale` | boolean | No | Sets the locale associated with the request content as the template's default. If empty or flexible default locales are not enabled for the project, the project's default locale is assigned. |
| `clientTemplateId` | string | Yes | ID used by the client to identify a template. If multiple templates exist with this ID, all will be updated. |
| `googleAnalyticsCampaignName` | string | No | Google Analytics utm_campaign value. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Verify SMS Code

**Slug:** `ITERABLE_VERIFY_SMS_CODE`

Verifies an SMS verification code sent to a phone number in Iterable. Use this action when you need to check whether a user has entered the correct verification code during phone number verification. The code must match the most recent, non-expired, not-yet-verified code sent to the specified phone number. If the code is correct, the verification is successful. If the code is incorrect or expired, the verification fails. This action is idempotent - verifying the same code multiple times returns the same result.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `code` | string | Yes | The SMS verification code to verify. This is the numeric or alphanumeric code that was sent to the phone number. |
| `phoneNumber` | string | Yes | The phone number that the verification code was sent to. Must be in E.164 format (e.g., +1234567890). |
| `verificationProfileId` | integer | Yes | The unique identifier for the verification profile associated with this SMS verification attempt. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
