---
title: "Mailrelay Integration"
description: "Mailrelay is a Spanish email marketing platform with SMS, WhatsApp, and e-commerce tracking. Agents manage subscribers, groups, tags, and custom fields, run campaigns, RSS campaigns, and A/B tests, send transactional email, message over SMS and WhatsApp, and sync stores, products, and carts."
url: https://flowrunner.ai/integrations/mailrelay
date_modified: 2026-09-04T14:28:58-07:00
---

# Mailrelay

[Email Marketing](https://flowrunner.ai/integrations/category/email-marketing)

Mailrelay is a Spanish email marketing platform with SMS, WhatsApp, and e-commerce tracking. Agents manage subscribers, groups, tags, and custom fields, run campaigns, RSS campaigns, and A/B tests, send transactional email, message over SMS and WhatsApp, and sync stores, products, and carts.

[Verified](https://flowrunner.ai/integrations/verified "What does verified mean?") · 172 actions · API key · available

[Mailrelay website](https://mailrelay.com/) · [Platform Documentation](https://apidocs.mailrelay.com/) · Capability data verified 2026-08-19

1.  The nightly customer sync starts against the system of record
2.  Agent reads the changed customer rows and maps them onto subscriber fields
3.  Sync Subscriber creates or updates each record, which neither duplicates nor fails
4.  Agent diffs the incoming group assignments against what each subscriber already holds
5.  Add Subscriber Tags applies the new lifecycle tags without disturbing the existing ones
6.  Every subscriber whose group set would shrink is listed with the campaigns aimed at those groups
7.  The lifecycle owner approves the group changes before any replacing write is allowed to run

## What This Integration Enables

Mailrelay is a Spanish email marketing platform that also sends SMS and WhatsApp and holds your store's data, and the interesting thing is that all of it hangs off one subscriber record. The person who left a cart, the person who gets the recovery email, and the person who receives the WhatsApp follow-up are the same row, with separate consent states per channel, so someone can leave SMS and stay on email without an operations person reconciling anything. The e-commerce objects are not reporting decoration either: carts carry a status, and a cart left pending after the customer bought will keep chasing them, which tells you exactly what those objects are for.

The other structural decision worth knowing is that your identifiers are the join key. Product, category, and cart identifiers are yours rather than the platform's, which is what lets a catalog sync match against what is already stored without a mapping table. There is also no shared API host: every account has its own, and the connection points at the host you log in at. FlowRunner agents work the whole published surface, from subscribers and groups through campaigns, A/B tests, feed-driven newsletters, senders, imports, media, deliverability, batches and event subscriptions, to the SMS, WhatsApp, and store objects. Several of those operations replace rather than merge, and one import mode is destructive in a way the response does not advertise, so the writes that redraw an audience are held behind a [human-in-the-loop](https://flowrunner.ai/concepts/human-in-the-loop) step.

### Without FlowRunner

**Three channels, three contact lists**: The same customer exists separately in email, SMS, and WhatsApp, and opts out of one at a time

**Store data arrives as a nightly file**: Abandoned cart recovery runs on yesterday's carts, including the ones that were bought this morning

**Replace and merge look alike in the API**: An update that was meant to add a group quietly removes the other four

### With FlowRunner

**One subscriber, three channels**: The same record carries the email consent, the SMS consent, and the WhatsApp reachability separately

**Store data synced as it changes**: Carts move to completed the moment the order does, so the recovery message stops chasing a buyer

**Replacing writes shown before they run**: The agent diffs the intended state against the current one and names what would be removed

## Use Case Scenarios

### Cart recovery that stops when the order lands

Every cart change in [WooCommerce](https://flowrunner.ai/integrations/woocommerce) reaches the agent, which calls Sync Cart with your own cart identifier so the record is created or updated without duplicating. The status is what makes the automation work: pending means the cart is still open and eligible for recovery, and completed means it is not. When the order completes in [Stripe](https://flowrunner.ai/integrations/stripe), the same agent syncs the cart to completed within seconds, so the recovery sequence stops rather than emailing a customer about something they already bought. The checkout link stored on the cart is what the recovery message sends them back to.

### One person, three channels, three consents

A customer replies STOP to a text. The agent records the SMS opt out and leaves the email consent alone, because the platform tracks them separately and a person who is tired of texts has not asked to stop receiving receipts. A later WhatsApp follow-up is checked against the approved template list first, since WhatsApp will not carry free text to a cold contact and only an approved template can be sent. The subscriber record, the group memberships, and the tags are shared across all three, so the segmentation that drives the email program also drives the other two without a second audience to maintain.

### A newsletter that assembles itself from the blog

An RSS campaign watches the company blog. The agent creates it with Create RSS Campaign, setting the schedule from the fields the platform assembles it out of and capping how many entries each issue carries. Weekly, the agent reads List RSS Campaign Entries to confirm which posts were picked up and when, and posts a summary to [Slack](https://flowrunner.ai/integrations/slack) so an editor can see that yesterday's article made the issue. Where a post was missed because it published after the cut, the agent flags it rather than silently letting it fall out of the cycle.

## Human-in-Loop Highlight

Create Import carries three modes for handling addresses that already exist, and the third one is the destructive one. Replace and clear groups overwrites the subscriber record and removes its existing group memberships. In Mailrelay, group membership is not metadata: it is the audience. A campaign is aimed at groups or at a segment, and the platform is explicit that deleting a group leaves the subscribers in place while the campaigns aimed at it lose their audience. So an import run in that mode redraws every campaign audience on the account, and it does it silently. There is no dry run either. Which rows were affected only becomes visible afterward, through Get Import Data, once the job has already finished.

So the import agent stages and stops. It posts: "Import of 12,400 rows from the CRM export is ready. 9,850 addresses already exist on the account. In the safe mode, their group memberships are preserved. In replace-and-clear mode, 9,850 subscribers lose their current groups, which affects the Newsletter group (4,200 of them), VIP (610), and Webinar Attendees 2026 (1,100). Three active campaigns and one RSS campaign are aimed at those groups. Run in ignore mode, replace mode, or replace and clear?" The lifecycle owner picks the mode. Mapping columns, staging the file, and reconciling the failed rows afterward are all things the agent should do without asking. Choosing the mode that can empty four audiences in one job is a decision with a person's name on it.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

172 actions

### General

3

-   **Ping** Confirms the account host and API key work together. The cheapest possible call, and the right first step because both halves of this connection are account specific.
-   **Get Stats** Returns the account's summary statistics across its sending. Used for periodic reporting.
-   **Get Package** Returns the plan and its sending allowance, which is what actually limits a large send. Used before a campaign is scheduled.

### Transactional Sending

4

-   **Send Email** Sends a transactional email to one or more recipients, with the sender and each recipient given as an object. The platform can derive the plain text body from the HTML when one is not supplied. Tags group these messages for reporting. Used for receipts, notices, and account mail.
-   **List SMTP Emails** Returns the transactional messages sent through the API or SMTP with their delivery state. This is where a question about whether a message arrived gets answered.
-   **Get SMTP Email** Reads one transactional message, including what happened to it after sending. Used in support workflows.
-   **List SMTP Tags** Returns the tags transactional messages have been sent under, which is how a stream of receipts stays separate from a stream of password resets. Used to build per-stream reporting.

### Subscribers

16

-   **List Subscribers** Returns the account's subscribers, filtered with the platform's own nested filter keys so a query can narrow on an address fragment, a status, or a date range in one object. Used for exports and audience analysis.
-   **Get Subscriber** Reads one subscriber with its groups, tags, and custom field values. Used before any conditional write.
-   **Create Subscriber** Adds a subscriber. The status is required and decides whether the address may be mailed: active mails immediately, inactive holds the subscriber pending confirmation. Custom field values are passed under the field's own tag name. Used where the address is known to be new.
-   **Update Subscriber** Updates a subscriber. The address and the status are not editable here. The group list replaces the subscriber's groups rather than adding to them, which is the detail that catches people out.
-   **Sync Subscriber** Creates a subscriber, or updates the existing one with that address. Three flags decide what an update does to what is already there: the group and tag replacement switches overwrite rather than merge, and the restore switch brings back a subscriber that was deleted. This is what a signup flow should call.
-   **Delete Subscriber** Deletes a subscriber, recoverably. The record is still visible in the deleted listing and can be restored, which also means deleting does not suppress the address. Used for data errors, not for consent.
-   **List Deleted Subscribers** Returns subscribers deleted but not purged, which is where a mistaken deletion is found. Used in recovery workflows.
-   **Restore Subscriber** Brings back a deleted subscriber with its history intact. Used to correct an over-broad cleanup.
-   **Ban Subscriber** Bans a subscriber, which stops them being mailed and keeps them that way through later imports. This is the durable way to honor an opt out, where deleting is not.
-   **Unban Subscriber** Lifts a ban, making the subscriber mailable again. Used only with the person's renewed consent, and a natural candidate for an approval step.
-   **Resend Confirmation Email** Sends the confirmation again to a subscriber still marked inactive, which is how a stalled double opt-in is chased. Used in signup recovery flows.
-   **Bulk Update Subscribers** Applies one action to many subscribers at once, running in the background with a callback when it finishes. The published action removes them from a group, and the all-subscribers switch means every subscriber on the account rather than every one in the group, so it is paired with a group deliberately.
-   **List Subscriber Tags** Returns the tags on one subscriber. Used before any tag write, so an addition does not become a replacement by accident.
-   **Add Subscriber Tags** Adds tags to a subscriber by name, keeping the ones already there. The right default for lifecycle tagging.
-   **Replace Subscriber Tags** Replaces a subscriber's tags with the ones given, so any tag not named is removed. Used only where the complete intended set is known.
-   **Remove Subscriber Tags** Removes specific tags from a subscriber, leaving the rest in place. Used for targeted lifecycle changes.

### Groups

5

-   **List Groups** Returns the account's subscriber groups, which are what a campaign is normally aimed at. Used for discovery before an audience is built.
-   **Get Group** Reads one group with its subscriber count. Used to size an audience.
-   **Create Group** Creates a subscriber group. Used to provision an audience for a new program or event.
-   **Update Group** Renames a group or changes its description, leaving its members alone. Used for maintenance.
-   **Delete Group** Deletes a group. The subscribers stay on the account and lose that membership, so campaigns aimed at the group lose their audience. Used in cleanup, with the dependent campaigns checked first.

### Tags

5

-   **List Tags** Returns the account's tags with the color each is shown in. Used for discovery.
-   **Get Tag** Reads one tag. Used before renaming or deleting it.
-   **Create Tag** Creates a tag. The subscriber tag operations take names rather than identifiers, so creating one in advance is optional. Used when a new segmentation dimension is introduced.
-   **Update Tag** Renames a tag or changes its color. Subscribers carrying it keep it. Used for taxonomy maintenance.
-   **Delete Tag** Deletes a tag, removing it from every subscriber that carried it. Used in cleanup, with the audiences that depend on it checked first.

### Custom Fields

5

-   **List Custom Fields** Returns the custom field definitions. The tag name is what a subscriber's value is keyed by and what merge tags in content reference, so it matters more than the label. Used before writing custom field values.
-   **Get Custom Field** Reads one custom field definition with its options. Used before editing it.
-   **Create Custom Field** Creates a custom field. The type is fixed at creation, and the choice types need their options supplied. Used when a new data point starts arriving from the store or the CRM.
-   **Update Custom Field** Updates a custom field. The type is not editable, and changing the tag name changes what subscriber writes and merge tags must reference, so it is not a cosmetic rename.
-   **Delete Custom Field** Deletes a custom field and the values stored against it. Content referencing its merge tag renders empty afterward. Used in cleanup, after a content audit.

### Campaigns

12

-   **List Campaigns** Returns the account's campaigns, which are drafts until sent, filtered with the platform's own nested filter keys. Used for discovery and reporting.
-   **Get Campaign** Reads one campaign with its content and audience. Used to inspect a draft before approval.
-   **Create Campaign** Creates a campaign as a draft. It is not sent by this call. The target chooses between groups and a segment, and the platform can inline your CSS, which most email clients need. Used to assemble a campaign from content that lives elsewhere.
-   **Update Campaign** Updates a draft campaign, changing only what is supplied. Used for corrections before a send.
-   **Delete Campaign** Deletes a draft campaign. One already sent keeps its record on the sent side. Used in cleanup.
-   **Send Campaign** Sends a campaign. The audience is given again here rather than taken from the campaign, so a campaign built for one group can be sent to another. Leaving the scheduled time empty sends immediately. The call returns as soon as the job is queued, so a callback is how a flow learns it finished.
-   **Send Campaign Test** Sends a proof to test addresses without touching the audience. Used as the review step before approval is asked for.
-   **List Campaign Folders** Returns the folders campaigns are organized into. Used for discovery.
-   **Get Campaign Folder** Reads one campaign folder. Used before renaming or deleting it.
-   **Create Campaign Folder** Creates a folder to organize campaigns under. Used when a flow provisions a new program.
-   **Update Campaign Folder** Renames a campaign folder. Used for maintenance.
-   **Delete Campaign Folder** Deletes a campaign folder. The campaigns inside are not deleted, they lose the grouping. Used in cleanup.

### Sent Campaigns

9

-   **List Sent Campaigns** Returns campaigns that have been sent or are sending, with their delivery counters. Separate from the draft listing. Used for reporting.
-   **Get Sent Campaign** Reads one sent campaign with its counters. Used as the standard post-send summary.
-   **List Sent Campaign Clicks** Returns the individual clicks recorded for a sent campaign, with who clicked and which link. Used to build intent-based follow-ups.
-   **List Sent Campaign Impressions** Returns the opens recorded for a sent campaign. Used to build engaged-audience segments.
-   **List Sent Campaign Emails** Returns every message a sent campaign produced, with its per recipient delivery state. This is the row-level view behind the counters, and where a delivery question gets settled.
-   **List Sent Campaign Unsubscribes** Returns the unsubscribes a campaign caused, which is the number to watch alongside the open rate. Used to propagate opt outs to other systems.
-   **Pause Sent Campaign** Pauses a campaign that is still going out. Messages already delivered are unaffected. Used when a problem is spotted mid-send.
-   **Resume Sent Campaign** Resumes a paused campaign, continuing from where it stopped rather than starting again. Used once the cause is fixed.
-   **Cancel Sent Campaign** Cancels a campaign that is sending. Unlike a pause this cannot be resumed, and whatever has gone out stays out. Used when the remainder must not go at all.

### A/B Tests

7

-   **List AB Tests** Returns the account's A/B tests. Used for discovery and reporting.
-   **Get AB Test** Reads one test with its combinations and current state. Used to check progress before a decision.
-   **Create AB Test** Creates an A/B test on a campaign. The percentage is the share of the audience that receives the test combinations, with the remainder getting the winner afterward. The test type decides what varies, and the deciding mode decides whether the platform picks the winner or waits for a person.
-   **Delete AB Test** Deletes an A/B test. Used in cleanup.
-   **Cancel AB Test** Cancels a running test, so the remainder of the audience is never sent to. Used when the test itself has to stop.
-   **Set AB Test As Manual** Switches a test to manual deciding, so it waits for a person rather than picking a winner itself. Useful when the automatic decision would land at a bad time.
-   **Choose Winning Combination** Picks which combination goes to the rest of the audience, completing a manually decided test. Until it is called, the remainder receives nothing. This is the natural place for a person in an A/B workflow.

### RSS Campaigns

6

-   **List RSS Campaigns** Returns the feed-driven campaigns, each of which watches a feed and mails an issue on a schedule. Used for discovery.
-   **Get RSS Campaign** Reads one feed-driven campaign with its feed, schedule, and audience. Used to audit what is running.
-   **Create RSS Campaign** Creates a campaign that watches a feed and mails its new entries. The enabled flag is what puts it into service, the schedule is assembled from frequency, day, and time fields, and a cap limits how many items each issue carries.
-   **Update RSS Campaign** Updates a feed-driven campaign's feed, schedule, audience, or content. Turning it off suspends it without losing the definition. Used for maintenance.
-   **Delete RSS Campaign** Deletes a feed-driven campaign. Issues it already sent keep their records on the sent side. Used in cleanup.
-   **List RSS Campaign Entries** Returns the feed entries a campaign has already processed, which is how you tell whether an item was picked up and when. Used to confirm coverage rather than assume it.

### Senders

6

-   **List Senders** Returns the account's sending identities. A campaign can only go out from a confirmed one, which makes this the first check when a send is refused. Used as a pre-send guard.
-   **Get Sender** Reads one sending identity, including whether it has been confirmed. Used during setup.
-   **Create Sender** Adds a sending identity. Creating it does not make it usable: the address receives a confirmation first. Used when a new brand or department starts sending.
-   **Update Sender** Updates a sending identity's name or makes it the account default. The address itself is not editable, so a wrong one has to be replaced.
-   **Delete Sender** Deletes a sending identity, and the platform requires a replacement, because campaigns pointing at the deleted one would otherwise have no From address. Used in cleanup, with the replacement chosen deliberately.
-   **Send Sender Confirmation Email** Sends the confirmation again to an unconfirmed sending identity. Used to chase a stalled setup.

### Imports and Forms

6

-   **List Imports** Returns the subscriber import jobs and their status. Used to monitor a running load.
-   **Get Import** Reads one import job and its progress. Polled after an import is started rather than assuming the file landed.
-   **Create Import** Starts a subscriber import from a file, mapping the file's columns onto subscriber fields, running in the background with a callback when it finishes. The mode for handling existing addresses matters: the third option overwrites the record and removes its existing group memberships, which redraws every audience those groups feed.
-   **Cancel Import** Cancels an import still running. Rows already imported stay imported. Used when a mistake is spotted mid-job.
-   **Get Import Data** Returns an import's rows one by one with what happened to each, which is where the addresses that failed are found since the job summary only counts them. Used to reconcile after every load.
-   **List Signup Forms** Returns the account's signup forms. The platform publishes only a listing, so a flow can find a form but not create or change one. Used to report on acquisition sources.

### Media

12

-   **List Media Files** Returns the images and files in the media library that campaign content links to. Used for asset discovery.
-   **Get Media File** Reads one media file including the URL campaign content should link to. Used when composing content programmatically.
-   **Create Media File** Uploads a file to the media library, optionally into a folder. Used to publish generated assets into the sending platform.
-   **List Trashed Media Files** Returns media files currently in the trash, which is where a mistaken removal is found. Used in recovery.
-   **Trash Media File** Moves a media file to the trash. Content that linked to it stops rendering the image, so this comes after the references are checked. Reversible.
-   **Restore Media File** Brings a media file back out of the trash, at the same URL. Used to undo a premature cleanup.
-   **Delete Media File** Permanently deletes a media file. This is the hard delete: it cannot be undone and any content linking to the file breaks for good. Used only after nothing references it.
-   **List Media Folders** Returns the folders the media library is organized into. Used for discovery.
-   **Get Media Folder** Reads one media folder. Used before renaming or deleting it.
-   **Create Media Folder** Creates a folder in the media library. Used when a flow organizes assets by campaign or brand.
-   **Update Media Folder** Renames a media folder. Used for maintenance.
-   **Delete Media Folder** Deletes a media folder. Used in cleanup.

### Deliverability

5

-   **List Unsubscribe Events** Returns the unsubscribes recorded on the account, with the reason each person gave. Used to turn an opt-out count into something actionable.
-   **Get Unsubscribe Event** Reads one unsubscribe event. Used in support and audit workflows.
-   **Create Unsubscribe Event** Records an unsubscribe against a specific sent message, which is how an opt out collected on your own page is written back so the platform stops mailing the person. Used to honor consent captured outside the platform.
-   **Delete Unsubscribe Event** Deletes an unsubscribe record, which makes the address mailable again. Treated as a correction of a mistaken record rather than a way to resubscribe someone.
-   **Delete Bounces** Clears the account's bounce records, making previously bounced addresses deliverable again. A hard bounce usually means the mailbox is gone, so this belongs only after the underlying cause has been fixed.

### Automation

8

-   **List API Batches** Returns the API batches, which are sets of operations the platform runs together in the background. Used to monitor a large synchronization.
-   **Get API Batch** Reads one batch and its progress. Polled rather than assumed.
-   **Create API Batch** Queues many operations to run together in the background, which is how a large synchronization avoids one request per record. A callback is how a flow learns it finished.
-   **List Event Subscriptions** Returns the account's event subscriptions, which are the platform's webhooks. Used to audit what is subscribed.
-   **Get Event Subscription** Reads one event subscription with the events it listens for. Used to verify configuration.
-   **Create Event Subscription** Subscribes to account events, delivered either to a webhook URL or by email. Custom headers travel with every delivery, which is how the receiving end verifies the call is genuine. Used to drive downstream systems without polling.
-   **Update Event Subscription** Updates an event subscription. Turning it off suspends delivery without losing the definition, and sending an event list replaces the stored set. Used during downstream maintenance.
-   **Delete Event Subscription** Deletes an event subscription, after which nothing further is delivered. Used in cleanup.

### SMS

16

-   **Send SMS** Sends a text message to one or more numbers. The sender name recipients see is subject to each country's own rules on alphanumeric sender identities, so a name that works in one market may be rewritten or rejected in another. Used for time-critical operational messages.
-   **List SMS Campaigns** Returns the SMS campaigns, which are drafts until sent. Used for discovery.
-   **Get SMS Campaign** Reads one SMS campaign. Used to inspect a draft.
-   **Create SMS Campaign** Creates an SMS campaign as a draft. The audience is chosen at send time rather than here. Used to prepare a text campaign programmatically.
-   **Update SMS Campaign** Updates a draft SMS campaign. Used for corrections before a send.
-   **Delete SMS Campaign** Deletes a draft SMS campaign. Used in cleanup.
-   **Send SMS Campaign** Sends an SMS campaign. The target differs from the email side: as well as groups, an SMS campaign can go to a plain list of numbers, which has no email equivalent. Leaving the scheduled time empty sends immediately.
-   **List SMS Sent Campaigns** Returns SMS campaigns that have been sent or are sending, with their counters. Used for reporting.
-   **Get SMS Sent Campaign** Reads one sent SMS campaign with its counters. Used as the post-send summary.
-   **List SMS Sent Campaign Messages** Returns the individual messages a sent SMS campaign produced, with their delivery state. Used to settle a delivery question.
-   **List SMS Sent Campaign Unsubscribes** Returns the opt outs an SMS campaign caused. These are separate from email opt outs, so a person can leave one channel and stay on the other.
-   **Pause SMS Campaign** Pauses an SMS campaign being processed. Used when a problem is spotted mid-send.
-   **Resume SMS Campaign** Resumes a paused SMS campaign from where it stopped. Used once the cause is fixed.
-   **Cancel SMS Campaign** Cancels an SMS campaign that is sending. Messages already sent cost money and cannot be recalled; this only stops the remainder.
-   **List SMS Sent Messages** Returns every text message the account has sent, across campaigns and transactional sends alike. Used for cost reporting and audit.
-   **Get SMS Sent Message** Reads one sent text message and what happened to it. Used in support workflows.

### E-commerce

23

-   **List Stores** Returns the stores connected to the account. A store is the container products, categories, and carts belong to. Used for discovery.
-   **Get Store** Reads one store. Used before a catalog sync.
-   **Create Store** Registers a store. The currency is required and is what every cart total is interpreted in. Used when connecting a new storefront.
-   **Update Store** Updates a store's name, currency, or URL. Used for maintenance.
-   **Delete Store** Deletes a store and everything recorded under it. Used in cleanup, and never casually.
-   **List Product Categories** Returns a store's product categories. Used to reconcile against the source catalog.
-   **Get Product Category** Reads one product category. Used before an update.
-   **Create Product Category** Creates a product category under your own identifier rather than the platform's, which is what lets a sync match your catalog to what is stored. Used at the front of a catalog load.
-   **Sync Product Category** Creates a category or updates the existing one with the same identifier. This is what a running catalog sync should call, because the plain create fails on a duplicate.
-   **Update Product Category** Updates a product category. Used for targeted corrections.
-   **Delete Product Category** Removes a product category from a store. Used when a taxonomy changes.
-   **List Products** Returns a store's products. Used to reconcile the catalog.
-   **Get Product** Reads one product with its variants. Used before an update, and to resolve what a cart line points at.
-   **Create Product** Creates a product in a store, with variants given in the platform's own shape, since a cart line points at a variant rather than a product. Used at the front of a catalog load.
-   **Sync Product** Creates a product or updates the existing one with the same identifier. This is what a running catalog sync should call.
-   **Update Product** Updates a product. Used for pricing and naming corrections.
-   **Delete Product** Removes a product from a store. Used when an item is discontinued.
-   **List Carts** Returns a store's carts. A pending cart is an abandoned one, which is what a recovery automation watches. Used to size the recovery opportunity.
-   **Get Cart** Reads one cart with its line items. Used to compose a recovery message that names what was left behind.
-   **Create Cart** Records a cart. The status is what makes recovery work, and the checkout link is where a recovery email sends the customer back to. Used when a store first reports a cart.
-   **Sync Cart** Creates a cart or updates the existing one with the same identifier. This is what a live store should call on every cart change, because it neither duplicates nor fails.
-   **Update Cart** Updates a recorded cart, which is usually how it moves from pending to completed once the order goes through. Used the moment the payment confirms.
-   **Delete Cart** Removes a recorded cart, which also removes it from any recovery automation still watching it. Used for corrections.

### WhatsApp

24

-   **Send WhatsApp Message** Sends a WhatsApp message to one or more numbers. WhatsApp does not allow free text to a cold contact, so this renders an approved template with its parameters rather than a body. Used for transactional notifications on the channel customers actually read.
-   **List WhatsApp Phone Numbers** Returns the WhatsApp numbers registered to the account, which are what a send or campaign goes out from. Used as a pre-send check.
-   **Get WhatsApp Phone Number** Reads one registered number. Used during setup.
-   **Delete WhatsApp Phone Number** Removes a number from the account. Campaigns configured to send from it will fail afterward. Used in cleanup, with the dependent campaigns checked first.
-   **List WhatsApp Templates** Returns the message templates and their approval state. Only an approved template can be sent, and approval is Meta's decision rather than the platform's. Used before any WhatsApp send is attempted.
-   **Get WhatsApp Template** Reads one template with its components and approval state. Used to build a send that fills the placeholders correctly.
-   **Create WhatsApp Template** Creates a WhatsApp template. Creating it does not make it usable, since templates need Meta's approval. The category is Meta's own classification and affects both approval and cost.
-   **Update WhatsApp Template** Updates a template. Changing the content usually means re-approval, so the status is expected to return to pending, which takes the template out of service until it clears.
-   **Submit WhatsApp Template** Submits a template to Meta for approval. Until it is approved nothing can be sent with it, and approval can take time and be refused. Used as the deliberate step between authoring and sending.
-   **Delete WhatsApp Template** Deletes a template. Campaigns referencing it will fail afterward. Used in cleanup.
-   **List WhatsApp Campaigns** Returns the WhatsApp campaigns, which are drafts until sent. Used for discovery.
-   **Get WhatsApp Campaign** Reads one WhatsApp campaign. Used to inspect a draft.
-   **Create WhatsApp Campaign** Creates a WhatsApp campaign as a draft, rendering an approved template rather than free text. Used to prepare a channel campaign programmatically.
-   **Update WhatsApp Campaign** Updates a draft WhatsApp campaign. Used for corrections before a send.
-   **Delete WhatsApp Campaign** Deletes a draft WhatsApp campaign. Used in cleanup.
-   **Send WhatsApp Campaign** Sends a WhatsApp campaign. The audience is given here rather than taken from the campaign, and leaving the scheduled time empty sends immediately.
-   **List WhatsApp Sent Campaigns** Returns WhatsApp campaigns that have been sent or are sending. Used for reporting.
-   **Get WhatsApp Sent Campaign** Reads one sent WhatsApp campaign with its counters. Used as the post-send summary.
-   **List WhatsApp Sent Campaign Messages** Returns the individual messages a sent WhatsApp campaign produced. Used to settle a delivery question.
-   **Pause WhatsApp Campaign** Pauses a WhatsApp campaign being sent. Used when a problem is spotted mid-send.
-   **Resume WhatsApp Campaign** Resumes a paused WhatsApp campaign from where it stopped. Used once the cause is fixed.
-   **Cancel WhatsApp Campaign** Cancels a WhatsApp campaign that is sending. Messages already delivered cannot be recalled; this stops the remainder.
-   **List WhatsApp Sent Messages** Returns every WhatsApp message the account has sent, across campaigns and direct sends. Used for cost reporting and audit.
-   **Get WhatsApp Sent Message** Reads one sent WhatsApp message and what happened to it. Used in support workflows.

## Frequently Asked Questions

### What can FlowRunner do with Mailrelay?

FlowRunner agents can run Ping, Get Stats, and Get Package in Mailrelay, plus 169 more actions.

### Does connecting Mailrelay to FlowRunner require OAuth?

No. Mailrelay connects to FlowRunner with an API key, no OAuth flow required.

### Can Mailrelay trigger a FlowRunner workflow automatically?

Mailrelay doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

**Work at Mailrelay?** This integration exposes Mailrelay to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/mailrelay. Site index: https://flowrunner.ai/llms.txt
