> This page is for Agent Handler.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.merge.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.merge.dev/_mcp/server.

# Iterable

**Authentication:** API key. See [Magic Link](/merge-agent-handler/features/magic-link) for the runtime auth flow.

## Sample use cases

* List the users in the `Newsletter Subscribers` list and flag the ones who unsubscribed this week
* Look up user `jane.doe@example.com` and update their subscriptions
* Activate the triggered campaign `Order Shipped` for a list of users

## Available Tools

#### abort_campaign

Abort a campaign that is currently sending. Messages not yet delivered are not sent; those already delivered are unaf...

#### activate_triggered_campaign

Activate a triggered campaign so it can fire. Use list_campaigns to find a campaign whose type is 'Triggered'. Use de...

#### archive_campaigns

Archive one or more campaigns, hiding them from the Campaigns page. Scheduled and recurring campaigns are cancelled a...

#### begin_sms_verification

Send a verification code by SMS to a phone number. This delivers a real text message. Check the code the user receive...

#### bulk_create_catalog_items

Create or overwrite up to 1000 catalog items in one request. Set replace_uploaded_fields_only true to change only the...

#### bulk_delete_catalog_items

Delete several items from a catalog in one request. Use list_catalog_items to find item IDs. Deletion is asynchronous...

#### bulk_delete_templates

Delete base templates by ID. A template any campaign references is reported in failed rather than deleted, so check t...

#### bulk_update_group_subscriptions

Subscribe or unsubscribe many users to or from one list, message type or channel. Name users by email in users, by us...

#### bulk_update_user_subscriptions

Set list, channel and message-type subscriptions for many users in one request. Each entry REPLACES the stored lists...

#### bulk_update_users

Create or update up to 1000 user profiles in one request. Each user is identified by email or user_id. Use list_user\_...

#### cancel_campaign

Cancel a scheduled or recurring campaign so it does not send. Use list_campaigns with campaign_state \['Scheduled', 'R...

#### cancel_email

Cancel a scheduled email before it is delivered. Identify it by scheduled_message_id, or by campaign_id plus the reci...

#### cancel_experiment

Stop a running experiment without choosing a winner. Use declare_experiment_winner to end it on a chosen arm instead...

#### cancel_export_job

Cancel a queued or running export job. Use list_export_jobs to find a job_id, or pass the one start_export returned...

#### cancel_in_app

Cancel a scheduled in-app message before it is delivered to the user's device. Identify it by scheduled_message_id, o...

#### cancel_push

Cancel a scheduled mobile push notification before it is delivered. Identify it by scheduled_message_id, or by campai...

#### cancel_rcs

Cancel a scheduled RCS message before it is delivered. Identify it by scheduled_message_id, or by campaign_id plus th...

#### cancel_sms

Cancel a scheduled SMS before it is delivered. Identify it by scheduled_message_id, or by campaign_id plus the recipi...

#### cancel_web_push

Cancel a scheduled browser push notification before it is delivered. Identify it by scheduled_message_id, or by campa...

#### cancel_whatsapp

Cancel a scheduled WhatsApp message before it is delivered. Identify it by scheduled_message_id, or by campaign_id pl...

#### check_sms_verification

Check a verification code against the number begin_sms_verification sent it to. Use the same phone_number and verific...

#### create_campaign

Create a blast or triggered campaign from an existing template, in Ready state so it sends nothing until scheduled. S...

#### create_catalog

Create an empty catalog. The name must be unique in the project, use only alphanumeric characters and dashes, and be...

#### create_experiment

Attach a new experiment to a campaign, choosing what it varies. Use list_campaigns to find campaign IDs. experiment_t...

#### create_experiment_variant

Add a variant to an experiment by copying an existing template into it. Use list_templates for the template to copy a...

#### create_list

Create a static list. Returns the new list_id for use with subscribe_to_list and create_campaign. Dynamic (segment) l...

#### create_snippet

Create a snippet. The name must be unique in the project. Use upsert_snippet to create-or-update by name instead. Ret...

#### deactivate_triggered_campaign

Deactivate a triggered campaign so it stops firing. Use list_campaigns to find a campaign whose type is 'Triggered'...

#### declare_experiment_winner

End an experiment by declaring one variant the winner, after which the campaign sends that variant to everyone. Use l...

#### delete_catalog

Delete a catalog and every collection that references it. Use list_catalogs to find catalog names. This is the invers...

#### delete_catalog_item

Delete one item from a catalog. Use list_catalog_items to find item IDs; they are case-sensitive. Deletion is asynchr...

#### delete_experiment

Delete an experiment from its campaign. Use cancel_experiment to stop a running experiment while keeping its results...

#### delete_list

Delete a list. The users on it are not deleted, only their membership. Use list_lists to find list IDs. This is the i...

#### delete_metadata_key

Delete one key and its value from a metadata table. The delete is asynchronous, so the key may still read back briefl...

#### delete_metadata_table

Delete a whole metadata table and every key in it. The delete is asynchronous, so the table may still list briefly -...

#### delete_snippet

Delete a snippet by its numeric ID or its name. Use list_snippets to find both. A template still referencing the snip...

#### export_data

Download campaign analytics immediately as CSV or JSON lines, without a background job. Supply range, or both start_d...

#### export_user_events

Download one user's complete event history as JSON lines, identified by email or user_id. Use list_user_events for a...

#### get_campaign

Read one campaign by ID, including its state, template, lists and send times. Use list_campaigns to find campaign IDs...

#### get_campaign_metrics

Get send and engagement metrics for one or more campaigns as CSV. Use list_campaigns to find campaign IDs. Iterable r...

#### get_catalog_field_mappings

Read a catalog's declared field types and the fields that have none. Call this before set_catalog_field_mappings - a...

#### get_catalog_item

Read one catalog item's stored fields. Use list_catalog_items to find item IDs; they are case-sensitive. Use list_cat...

#### get_email_template

Read one email template's full content: subject, HTML, plain text, sender and link settings. Use list_templates with...

#### get_embedded_template

Read one embedded-message template's full content: title, body, elements and placement. Use list_templates to find te...

#### get_experiment

Read one experiment: its type, status, variants, traffic allocation and targeting. Use list_experiments to find exper...

#### get_experiment_metrics

Get a metrics report across several experiments or campaigns as rows of comma-separated values. Supply experiment_ids...

#### get_experiment_totals

Read lifetime send and conversion totals for every variant in an experiment. Use get_experiment_trends for the same n...

#### get_experiment_trends

Read an experiment's per-variant metrics as a time series, with the holdout group reported separately. Use get_experi...

#### get_in_app_template

Read one in-app template's full content: HTML, display settings, inbox metadata and expiry. Use list_templates with m...

#### get_list_size

Count the users on a list without reading them. Use list_lists to find list IDs. Iterable rate-limits this to 5 reque...

#### get_list_users

Read every user on a list as email addresses, or user IDs when prefer_user_id is true. Use get_list_size first for th...

#### get_metadata_value

Read one key's stored JSON value from a metadata table. Use list_metadata_keys to find keys; they are case-sensitive...

#### get_priority_in_app_message

Read the single most relevant in-app message waiting for one user. Use list_in_app_messages to see everything queued...

#### get_push_template

Read one push template's full content: title, message, deep links, buttons and payload. Use list_templates with messa...

#### get_sms_template

Read one SMS template's full content: message body, image and link settings. Use list_templates with message_medium '...

#### get_snippet

Read one snippet by its numeric ID or its name. Use list_snippets to find both. Read it before upsert_snippet, which...

#### get_template_by_client_id

Find the templates carrying a given client template ID, the secondary key set when a template is created through upse...

#### get_user_by_email

Read one user profile by email address, including every custom data field. Use get_user_by_user_id when you hold a us...

#### get_user_by_user_id

Read one user profile by user ID, including every custom data field. Use get_user_by_email when you hold an email add...

#### list_campaigns

List campaigns in the project, with optional state filter and sort. Use this to find a campaign_id before reading met...

#### list_catalog_items

List a catalog's items with their stored fields, optionally ordered by a typed field. Use list_catalogs for catalog n...

#### list_catalogs

List the project's catalog names. Use this to find a catalog_name before reading or writing catalog items. Page forwa...

#### list_channels

List the project's message channels and whether each is Marketing or Transactional. Call this before upsert_email_tem...

#### list_child_campaigns

List the individual sends a recurring campaign has generated. Use list_campaigns with campaign_state \['Recurring'] to...

#### list_embedded_messages

List the embedded messages waiting for one user, grouped by placement. Read messageId out of each message's metadata...

#### list_experiment_variants

List an experiment's variants with the template content each sends and its share of the audience. Use this to find th...

#### list_experiments

List the project's experiments, filtered by campaign, state or start date. Use this to find an experiment_id before r...

#### list_export_files

Read an export job's state and the files it has written, each with a signed download URL that expires after 30 minute...

#### list_export_jobs

List the project's recent export jobs with their state and size. Use this to find a job_id when you no longer have th...

#### list_in_app_messages

List the in-app messages waiting for one user on a mobile platform, in display priority order. Use get_priority_in_ap...

#### list_journeys

List the project's journeys with their trigger events and enabled state. Use this to find the journey id that trigger...

#### list_lists

List every list in the project with its type and size-relevant metadata. Use this to find a list_id before creating a...

#### list_message_types

List the project's message types with their channel, subscription policy and send caps. Use this to find the message\_...

#### list_metadata_keys

List the keys in one metadata table, without their values. Use list_metadata_tables to find table names and get_metad...

#### list_metadata_tables

List the project's metadata tables. Metadata is Iterable's own JSON key/value store, which templates read with the me...

#### list_sent_messages

List the messages Iterable has sent to one user, with campaign, date and channel filters. Identify the user by email...

#### list_snippets

List the project's snippets with their content and variables. Use this to find a snippet's ID or name before reading...

#### list_templates

List the project's templates with their IDs, names and message types, filtered by type, channel or creation date. Use...

#### list_user_events

Read one user's recent events, newest first, identified by email or user_id. Use this to see what a user has done bef...

#### list_user_fields

List every user-profile field defined in the project and its data type. Call this before update_user to learn which f...

#### list_web_in_app_messages

List the in-app messages waiting for one user in the browser. Use list_in_app_messages for mobile platforms. Identify...

#### list_webhooks

List the project's system webhooks with their endpoints, authentication and scope. Use this to find the webhook id th...

#### patch_catalog_item

Set individual fields on a catalog item, leaving the rest as they are, creating the item if it does not exist. Use up...

#### preview_email_template

Render an email template against sample data and return the HTML, without sending anything. Use this to check merge f...

#### preview_in_app_template

Render an in-app template against sample data and return the HTML, without sending anything. Use this to check merge...

#### preview_list_users

Read a random sample of up to 5000 users on a list. Use this instead of get_list_users to inspect a large list cheapl...

#### schedule_campaign

Schedule an existing campaign to send at a given time. Use list_campaigns to find campaign IDs. Pass start_time_zone...

#### send_email_template_proof

Send a real test email rendered from a template to one recipient. This delivers an actual message - use preview_email...

#### send_in_app_template_proof

Send a real test in-app message rendered from a template to one recipient. This delivers an actual message - use prev...

#### send_push_template_proof

Send a real test push notification rendered from a template to one recipient. This delivers an actual notification to...

#### send_sms_template_proof

Send a real test SMS rendered from a template to one recipient. This delivers an actual text message to the phone num...

#### set_catalog_field_mappings

Declare data types for a catalog's fields so they can be sorted and filtered on. Call get_catalog_field_mappings firs...

#### set_metadata_value

Create or REPLACE one key's JSON value, creating the table if it does not exist. The write is asynchronous: a 200 mea...

#### start_experiment

Start an experiment so it begins allocating traffic across its variants. Add variants with create_experiment_variant...

#### start_export

Queue a background export of events or user profiles and return its job_id. Poll list_export_files with that job_id f...

#### subscribe_to_double_opt_in

Send a user an SMS confirmation and subscribe them to the named message types once they reply. Only SMS message types...

#### subscribe_to_list

Add users to a static list, creating profiles for identifiers that do not exist yet. Use list_lists to find a list wh...

#### subscribe_user_to_group

Subscribe one user to a list, message type or channel. Use list_lists, list_message_types or list_channels for the gr...

#### track_bulk_events

Record many custom events in one request. Iterable processes bulk and single event calls on separate pipelines, so se...

#### track_embedded_message_click

Record a click on an embedded message, creating an embeddedClick event. Iterable's mobile SDKs send this themselves...

#### track_embedded_message_received

Record that a device retrieved an embedded message, creating an embeddedReceived event. This means retrieved, not dis...

#### track_embedded_message_session

Record a viewing session and one impression per embedded message seen during it, creating an embeddedSession event an...

#### track_event

Record one custom event against a user profile. An event whose name appears in a journey's trigger_event_names enrols...

#### track_purchase

Record a completed purchase against a user profile, creating the profile if it does not exist. This also CLEARS the p...

#### trigger_campaign

Fire a triggered campaign at the members of one or more lists. This sends real messages immediately. Use list_campaig...

#### trigger_journey

Enrol one user, or every member of a list, in a journey. This starts real message sends on the journey's schedule. Us...

#### unsubscribe_from_list

Remove users from a list. Set channel_unsubscribe true to also opt them out of the list's whole channel, which is eff...

#### unsubscribe_user_from_group

Unsubscribe one user from a list, message type or channel. Use list_lists, list_message_types or list_channels for th...

#### update_cart

Replace the items in a user's shopping cart, creating the profile if it does not exist. The list given REPLACES the s...

#### update_email_template

Update one existing email template by ID. Read it with get_email_template first and send back the fields you want kep...

#### update_embedded_template

Update one existing embedded-message template by ID. Read it with get_embedded_template first and send back the field...

#### update_experiment_settings

Change how an experiment splits traffic and picks a winner. Read the current settings with get_experiment first - a b...

#### update_in_app_template

Update one existing in-app template by ID. Read it with get_in_app_template first and send back the fields you want k...

#### update_push_template

Update one existing push template by ID. Read it with get_push_template first and send back the fields you want kept...

#### update_sms_template

Update one existing SMS template by ID. Read it with get_sms_template first and send back the fields you want kept -...

#### update_user

Create or update one user profile, merging the fields given into whatever is already stored. Identify the user by ema...

#### update_user_email

Move a user profile to a new email address. Identify the profile by current_email or current_user_id. This is for ema...

#### update_user_subscriptions

Set one user's list, channel and message-type subscriptions. Each list given REPLACES the stored one rather than addi...

#### update_webhook

Change an existing webhook's endpoint, authentication, scope or enabled state. Use list_webhooks to find webhook IDs...

#### upsert_catalog_item

Create a catalog item, or REPLACE an existing one entirely - fields left out of value are removed. Use patch_catalog\_...

#### upsert_email_template

Create an email template, or update every template sharing the client_template_id. Use list_message_types for message...

#### upsert_embedded_template

Create an embedded-message template, or update every template sharing the client_template_id. Use list_message_types...

#### upsert_in_app_template

Create an in-app template, or update every template sharing the client_template_id. Use list_message_types to find an...

#### upsert_push_template

Create a push template, or update every template sharing the client_template_id. Use list_message_types to find a pus...

#### upsert_sms_template

Create an SMS template, or update every template sharing the client_template_id. message_type_id must belong to a cha...

#### upsert_snippet

Create or update a snippet by name, or update one by numeric ID. A numeric identifier only updates an existing snippe...

#### view_email_in_browser

Fetch the rendered HTML of an email already sent to a user, with that recipient's merge data applied. Use list_sent_m...