iterable_get_ email_ templateGet one email template: subject, html, plainText, sender, messageTypeId.
See how recent campaigns performed, look up a customer's profile, events and messages in one call, add people to a list, send a proof of a template, start a journey, and export data of any size.
PopMCPIterable
Every endpoint in Iterable's API that a server-side key can call, with the everyday tools loaded by default, the rest one search away, and report and export answers returned as JSON an AI can read.
151 tools in the full catalog: 59 read and 92 write. 43 load by default, and the rest are found with tool search.
iterable_get_ email_ templateGet one email template: subject, html, plainText, sender, messageTypeId.
iterable_list_ templatesList templates (templateId, name, type, medium, timestamps), filtered by templateType and messageMedium.
iterable_send_ email_ template_ proofSend a proof of an email template to one person (templateId, recipientEmail or recipientUserId).
iterable_upsert_ email_ templateCreate an email template, or update the one with the same clientTemplateId.
iterable_bulk_ update_ usersBulk update user data.
iterable_get_ sent_ messagesList messages sent to an user (messageId, campaignId, templateId, createdAt).
iterable_get_ user_ by_ emailGet one user's profile by email: dataFields, signup date, updates, devices, subscriptions.
iterable_get_ user_ by_ user_ idGet one user's profile by userId.
iterable_get_ user_ fieldsList every user profile field in the project and its type (date, string, long, double, boolean, object).
iterable_get_ user_ overviewEverything about one user in one call: profile and data fields, recent events and recent messages.
iterable_update_ userCreate or update one user.
iterable_update_ user_ subscriptionsUpdate user subscriptions.
iterable_abort_ campaignStop a running campaign.
iterable_cancel_ campaignCancel a scheduled or recurring campaign before it sends.
iterable_create_ campaignCreate a blast or triggered campaign from an existing template.
iterable_get_ campaignGet a campaign.
iterable_get_ campaign_ metricsGet performance metrics for campaigns by id, returned as one JSON object per campaign (sends, opens, clicks, purchases, revenue and more).
iterable_get_ campaign_ reportHow campaigns performed: name, state, type and audience joined with their metrics, as JSON.
iterable_list_ campaignsList campaigns (id, name, state, type, medium, templateId, listIds, timestamps), newest pages via page.
iterable_schedule_ campaignSchedule an existing blast campaign (state Ready) for up to 7 days ahead.
iterable_send_ campaignSend an existing blast campaign (state Ready) to its lists now.
iterable_trigger_ campaignSend a triggered campaign (type Triggered, activated) to one or more lists now.
iterable_list_ catalog_ itemsList items in a catalog.
iterable_list_ catalogsList the project's catalogs.
iterable_create_ listCreate a static list.
iterable_get_ list_ sizeCount the users in a list.
iterable_list_ listsList all lists: id, name, type (Standard, Dynamic, Suppression, Internal), createdAt.
iterable_preview_ list_ usersGet a random sample of users in a list as a JSON list (size up to 5000, default 1000).
iterable_subscribe_ to_ listAdd users to a Standard list: {"listId":123,"subscribers":[{"email":"a@example.com"}]}.
iterable_unsubscribe_ from_ listRemove users from a Standard list: {"listId":123,"subscribers":[{"email":"a@example.com"}]}.
iterable_get_ export_ filesGet an export job's state and, once Completed, its files with download links (valid 30 minutes).
iterable_start_ exportStart a bulk export job for any size of data.
iterable_get_ user_ eventsGet an user's recent events by email: custom events, sends, opens, clicks, purchases.
iterable_track_ eventRecord a custom event for an user (eventName, email or userId, dataFields).
iterable_get_ project_ overviewA map of this Iterable project: channels, message types, lists, journeys, the newest campaigns and how many templates.
iterable_list_ channelsList the project's message channels.
iterable_list_ message_ typesList message types.
iterable_send_ emailSend one person an email from an activated triggered email campaign.
iterable_list_ journeysList journeys (workflows): id, name, enabled, trigger event names, archived.
iterable_send_ pushSend one person a push notification from an activated triggered push campaign.
iterable_send_ smsSend one person a text from an activated triggered SMS campaign.
iterable_track_ purchaseRecord a purchase: user (email or userId), items (id, name, price, quantity) and total.
iterable_trigger_ journeyStart a journey for one user (email or userId) or a whole list (listId).
iterable_bulk_ delete_ templatesBulk delete templates.
iterable_get_ embedded_ templateGet an embedded message template.
iterable_get_ in_ app_ templateGet an in-app template.
iterable_get_ push_ templateGet a push template.
iterable_get_ sms_ templateGet an SMS template.
iterable_get_ templates_ by_ client_ idGet an email template by clientTemplateId.
iterable_preview_ email_ templatePreview email template with custom data.
iterable_preview_ in_ app_ templatePreview in-app template with custom data.
iterable_send_ in_ app_ template_ proofSend a proof of an in-app template.
iterable_send_ push_ template_ proofSend a proof of a push template.
iterable_send_ sms_ template_ proofSend a proof of an SMS template.
iterable_update_ email_ templateChange an existing email template by templateId.
iterable_update_ embedded_ templateUpdate embedded message template.
iterable_update_ in_ app_ templateUpdate in-app template.
iterable_update_ push_ templateUpdate push template.
iterable_update_ sms_ templateUpdate SMS template.
iterable_upsert_ embedded_ templateCreate an embedded message template.
iterable_upsert_ in_ app_ templateCreate an in-app template.
iterable_upsert_ push_ templateCreate a push template.
iterable_upsert_ sms_ templateCreate an SMS template.
iterable_bulk_ update_ user_ subscriptionsBulk update user subscriptions.
iterable_delete_ user_ by_ emailDelete an user by email, with their history.
iterable_delete_ user_ by_ user_ idDelete an user by userId, with their history.
iterable_forget_ userForget an user under GDPR: their data is deleted and they can no longer be messaged or re-created.
iterable_get_ user_ by_ email_ queryGet an user by email (query parameter).
iterable_get_ user_ by_ user_ id_ queryGet an user by userId (query parameter).
iterable_invalidate_ user_ jwtsInvalidate all JWTs issued for an user.
iterable_list_ forgotten_ user_ idsGet hashed forgotten userIds in compliance with GDPR.
iterable_list_ forgotten_ usersGet hashed forgotten users in compliance with GDPR.
iterable_merge_ usersMerge one user into another (source into destination by email or userId).
iterable_unforget_ userAllow a forgotten user to be stored again.
iterable_update_ user_ emailUpdate user email.
iterable_activate_ triggered_ campaignActivate a triggered campaign.
iterable_archive_ campaignsArchive campaigns.
iterable_deactivate_ triggered_ campaignDeactivate a triggered campaign.
iterable_list_ recurring_ child_ campaignsGet child campaigns of a recurring campaign.
iterable_cancel_ experimentCancel an experiment.
iterable_copy_ experiment_ variantCopy a template as a new variant.
iterable_create_ experimentCreate an experiment.
iterable_declare_ experiment_ winnerDeclare a winner and end experiment.
iterable_delete_ experimentDelete an experiment.
iterable_get_ experimentGet an experiment.
iterable_get_ experiment_ metricsGet metrics for experiments.
iterable_get_ experiment_ totalsGet experiment totals.
iterable_get_ experiment_ trendsGet experiment trends.
iterable_list_ experiment_ variantsGet experiment variants.
iterable_list_ experimentsList experiments.
iterable_start_ experimentStart an experiment.
iterable_update_ experiment_ settingsUpdate experiment settings.
iterable_bulk_ delete_ catalog_ itemsBulk delete catalog items.
iterable_bulk_ upsert_ catalog_ itemsCreate or replace up to 1,000 items in one call: {"documents":{"item-id":{"price":10}},"replaceUploadedFieldsOnly":false}.
iterable_create_ catalogCreate a catalog.
iterable_delete_ catalogDelete a catalog and all its items.
iterable_delete_ catalog_ itemDelete a catalog item.
iterable_get_ catalog_ field_ mappingsGet field mappings for a catalog.
iterable_get_ catalog_ itemGet a specific catalog item.
iterable_replace_ catalog_ itemCreate or fully replace one catalog item: fields you leave out are removed.
iterable_update_ catalog_ field_ mappingsSet field types for a catalog so they can be sorted and filtered: {"mappingsUpdates":[{"fieldName":"price","fieldType":"double"}]}.
iterable_update_ catalog_ itemChange some fields of one catalog item, creating it if missing: send only the fields to change.
iterable_delete_ listDelete a list.
iterable_get_ list_ usersGet the users in a list as a JSON list, stopping at maxRows.
iterable_cancel_ exportCancel export.
iterable_export_ data_ csvRead the first rows of an analytics export directly, as JSON objects, stopping at maxRows.
iterable_export_ data_ jsonRead the first rows of an analytics export directly, as JSON, stopping at maxRows.
iterable_export_ user_ eventsRead one user's full event history (email or userId), stopping at maxRows.
iterable_list_ export_ jobsGet export jobs.
iterable_bulk_ update_ subscription_ groupBulk subscription action on a list of users.
iterable_delete_ metadata_ keyDelete a single metadata key/value.
iterable_delete_ metadata_ tableDelete a metadata table and everything in it.
iterable_get_ metadata_ valueGet the metadata value of a single key.
iterable_list_ metadata_ keysList keys in a table.
iterable_list_ metadata_ tablesList available tables.
iterable_put_ metadata_ valueCreate or replace metadata.
iterable_start_ double_ opt_ inTrigger a double opt-in subscription flow.
iterable_subscribe_ user_ by_ emailSubscribe a single user.
iterable_subscribe_ user_ by_ user_ idSubscribe a single user by their userId.
iterable_unsubscribe_ user_ by_ emailUnsubscribe a single user.
iterable_unsubscribe_ user_ by_ user_ idUnsubscribe a single user by userId.
iterable_create_ snippetCreate a snippet.
iterable_delete_ snippetDelete a snippet.
iterable_get_ snippetGet snippet by ID or name.
iterable_list_ snippetsGet all snippets.
iterable_update_ snippetCreate or update a snippet.
iterable_cancel_ in_ app_ messageCancel a scheduled in-app message.
iterable_get_ embedded_ messagesGet an user's embedded messages.
iterable_get_ in_ app_ messagesGet an user's in-app messages.
iterable_get_ user_ events_ by_ user_ idGet user events by userId.
iterable_get_ web_ in_ app_ messagesGet an user's web in-app messages.
iterable_send_ in_ app_ messageSend one person an in-app message from an activated triggered in-app campaign.
iterable_track_ embedded_ clickTrack an embedded message click.
iterable_track_ embedded_ receivedTrack an embedded message received event.
iterable_track_ embedded_ sessionTrack an embedded message session and related impressions.
iterable_track_ events_ bulkBulk track events.
iterable_cancel_ emailCancel an email to an user.
iterable_view_ sent_ emailView a previously sent email.
iterable_begin_ sms_ verificationBegin SMS Verification.
iterable_cancel_ pushCancel a push notification to an user.
iterable_cancel_ rcsCancel a scheduled RCS message.
iterable_cancel_ smsCancel an SMS to an user.
iterable_cancel_ web_ pushCancel a web push notification to an user.
iterable_cancel_ whatsappCancel a scheduled WhatsApp message.
iterable_check_ sms_ verificationCheck SMS Verification Code.
iterable_list_ webhooksList the project's system webhooks: id, endpoint, auth type, enabled, channels and message types.
iterable_send_ rcsSend one person an RCS message from an activated triggered RCS campaign.
iterable_send_ web_ pushSend one person a web push notification from an activated triggered web push campaign.
iterable_send_ whatsappSend one person a WhatsApp message from an activated triggered WhatsApp campaign.
iterable_update_ cartReplace an user's shopping cart with items.
iterable_update_ webhookChange an existing system webhook by id (endpoint, enabled, which sends it fires for).
Credentials off one Iterable screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Iterable open Integrations, API Keys and choose New API Key. Name it, pick the Server-side type, create it and copy the key into PopMCP. Iterable shows it once. PopMCP works out whether your project is in the US or the EU, so there is nothing else to fill in.
••••••••••••3f7aAcme productionSends, triggered campaigns, journey starts and deleted users take effect in Iterable the moment the AI calls them, and they reach real people. Creating a blast campaign does not send it unless the AI gives a time or says to send. New connections start read-only until an owner or admin allows writes, and only clients you tick on the PopMCP consent screen reach Iterable.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Iterable credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
How did our last five campaigns do? Compare sends, opens, clicks, unsubscribes and revenue
iterable_list_campaignsok
Then just ask for the work
“How did our last five campaigns do? Compare sends, opens, clicks, unsubscribes and revenue”
“Why did jane@northwind.co stop getting our emails? Show her profile, recent events and what we last sent her”
“Build a Black Friday blast from the holiday template for the VIP list, send me a proof, and don't send it to anyone else yet”
“Add these customers to the VIP list and start the welcome journey for each of them”
“Export last week's email bounces and give me the download links”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Iterable behind an AI client.
One API key. In Iterable open Integrations, then API Keys, and choose New API Key. Give it a name, select the Server-side type, click Create and copy the key. Iterable shows it once. You need to be an org admin or have the Manage Integrations permission on the project.
Server-side reaches everything, including users, events, catalogs, exports and sending. Read-only is limited by Iterable to campaigns, templates, lists, journeys, experiments, snippets, metadata and reports: it cannot see user profiles or events. PopMCP detects which you pasted and says so. JavaScript, Mobile and Web keys only work inside apps and sites, so PopMCP refuses them and tells you why.
No. A key works in only one of Iterable's data centers, so PopMCP tries it and remembers where it worked. Every call then goes to the right place.
No. An Iterable key belongs to one project. To work with another project, connect it with its own key in another PopMCP workspace. You can give each connection a project name under More options, since Iterable's API does not share project names.
Iterable's API schedules a new blast campaign by default, and PopMCP turns that off: a blast stays unsent unless the AI gives a send time or says to send it. New connections also start read-only, and sending needs an owner or admin to allow writes.
Yes. Reading an export directly stops at a row limit and says there is more. For all of the data, the AI starts an export job and hands you the download links once the files are ready. Iterable keeps those links valid for 30 minutes.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Iterable in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Iterable on the consent screen. The Iterable tools are then available in that session, and no Iterable credential is stored on your machine.
Loading 151 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 43-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 151 here. A trigger is something PopMCP watches for you: 17 Iterable events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Iterable.
Launch a hosted MCP endpoint for Iterable, keep tool access under control, and start testing real workflow prompts right away.