Flexmail
Email MarketingFlexmail is a Belgian email marketing and transactional email platform. Agents manage contacts, interests, preferences, and opt-ins, run bulk imports and segments, send transactional messages, and track message events and webhooks across both APIs.
What This Integration Enables
Flexmail is a Belgian platform that models consent as structure rather than as a checkbox, and building on it means working with that structure rather than around it. A contact cannot be created without a recorded source, which is exactly the point of the field. Interests and preferences are separate subscription objects a person holds independently of being on the list at all. And when a contact has unsubscribed themselves from an interest, an API call trying to put them back is refused. That refusal is not a permissions problem. It is the recipient's choice outranking your integration, which is the behavior you want and rarely get.
There are two APIs behind one login here, and they share almost nothing. Marketing holds contacts, interests, imports, and segments. Transactional holds message sending, senders, sending domains, and its own separate webhook collection. Contacts do not exist on the transactional side, and transactional messages do not appear in marketing reports. FlowRunner agents work across both, and the connectors keep the two sets of operations distinct rather than pretending there is one collection, because a webhook created on one host is invisible from the other.
Without FlowRunner
With FlowRunner
Use Case Scenarios
-
Sign-up to welcome, with the consent recorded properly
A submission arrives from Typeform. The agent validates the language against Get Account Contact Languages and resolves the origin with List Sources, then calls Create Contact with the source attached. Each topic the person selected becomes its own call to Subscribe Contact To Interest, so a later unsubscribe from one topic does not silently remove the others. Send Message delivers the welcome with open tracking and link tracking set explicitly, because both default to off and a flow that later looks for engagement events on a message sent with the defaults will find none and nothing about the send will have looked wrong.
-
A warehouse import that is staged before it commits
A quarterly refresh comes out of PostgreSQL. The agent calls Create Contact Import to open the job, then Add Contact Import Records across as many calls as the volume needs, with every record carrying at least one source because the flow checks that before the request leaves. Nothing has reached the contact database yet. Get Contact Import reports the staged state, the counts post to Slack for a look, and only then does Start Contact Import commit it. The flow also checks that no other import is in flight first, because the platform allows one per account and answers a conflict rather than queuing the second.
-
Deliverability set up before the first send, not after the first failure
A new brand is being added to the account. The agent calls Add Sender for the address and Register Sending Domain for the domain, then reads Get Sending Domain to collect the DNS records that have to be published and posts them to the team that owns the zone. Get Sender reports whether the confirmation mail to the address has been acted on. Registering neither one makes it usable, and a send from an unverified sender is refused at send time rather than at registration time, so the flow treats both as open until the reads say otherwise. Once they clear, the corresponding contact records in HubSpot are flagged as mailable under the new brand.
Human-in-Loop Highlight
Unsubscribe Contact is one-way through this API. There is no matching resubscribe route, and the vendor's own stated path back is a double opt-in: call the opt-in submission, then wait for the person to confirm, and an unconfirmed opt-in is deleted after twenty-four hours. That means an over-broad automated unsubscribe is not something an agent can quietly reverse the next morning. Every affected person has to be asked again, individually, and each of them has a one-day window to act before the invitation expires.
So when a bounce or complaint feed proposes removing a cohort, the agent assembles the case and stops. It reads the contacts, groups the evidence by domain and by failure pattern, and asks: "The delivery feed proposes unsubscribing 640 contacts. 470 are hard failures at consumer providers. 170 are at one corporate domain and all failed inside the same two-hour window, which reads like a receiving outage. Unsubscribing is one-way here: getting any of these back needs a fresh opt-in that each person confirms within a day. Unsubscribe all 640, or hold the 170?" The marketing owner answers, and the agent applies the decision across the whole set. What made this safe was not the agent's grouping. It was that a removal nobody can undo belonged to a person.
Agent Capabilities
59 actionsContacts
12- List Contacts Returns contacts with filtering. The email and interest filters cannot be combined, and the connector catches that before the platform refuses it.
- Get Contact Reads one contact in full.
- Create Contact Creates a contact. A source is required, the language must be one the account actually holds, and custom field keys are placeholder names rather than display labels, so an unknown key is a refusal rather than a silently ignored field.
- Update Contact Merges changes into a contact, leaving anything not mentioned alone.
- Replace Contact Rewrites the contact record. Anything left out is cleared, which makes this the write a flow reaches for deliberately rather than by default.
- Unsubscribe Contact Removes the contact from all communication. One-way through this API, and the operation this page's human gate exists for.
- Get Contact Interests Reads which topics a contact is subscribed to.
- Subscribe Contact To Interest Adds a topic subscription. Refused when the contact unsubscribed themselves from that interest, because their choice outranks the write.
- Unsubscribe Contact From Interest Removes one topic subscription without touching the rest or the contact's overall subscription.
- Get Contact Interest Labels Reads the labels attached to a contact's interests.
- Get Contact Preferences Reads the preference subscriptions a contact holds.
- Get Contact Sources Reads where a contact came from, which is the field that makes a consent record auditable.
Bulk Import
4- Create Contact Import Opens an import job. Nothing reaches the contact database at this point.
- Add Contact Import Records Adds records to an open import, across as many calls as the volume needs. Every record needs at least one source, checked before the request is sent.
- Start Contact Import Commits the staged records. The only call in the sequence that writes, and one import may run per account at a time.
- Get Contact Import Polls an import. Processing is asynchronous, so the start response is not completion.
Interests
8- List Interests Returns the topics defined on the account.
- Get Interest Reads one interest's configuration.
- Create Interest Defines a new topic people can subscribe to.
- Update Interest Changes a topic's configuration.
- Delete Interest Removes a topic. Refused while contacts are subscribed to it, an opt-in form references it, or a segment uses it, so a failing delete usually means it is still in use.
- Get Interest Translations Reads the translated names of a topic, which is what a multilingual audience actually sees.
- Replace Interest Translations Rewrites those translations as a complete set.
- List Interest Labels Returns the labels available for grouping interests.
Preferences
3- List Preferences Returns the preferences defined on the account, which are a separate axis of consent from interests.
- Subscribe Contact To Preference Records a preference subscription for a contact.
- Unsubscribe Contact From Preference Removes one preference subscription.
Account Configuration
5- List Custom Fields Returns the account's custom fields with the placeholder names that writes have to use.
- Get Account Contact Languages Returns the languages this account was configured with. The authority a flow checks a language value against before creating a contact.
- List Sources Returns valid contact origins, which every contact creation has to reference.
- Get Source Reads one source's detail.
- List Segments Returns valid and active segments only, so a segment being absent is not proof it was deleted.
Opt-in
3- List Opt In Forms Returns the account's opt-in forms.
- Get Opt In Form Reads one form's configuration.
- Submit Opt In Starts a double opt-in for an address. The vendor's stated route back after an unsubscribe, and the invitation expires if the person does not confirm within a day.
Marketing Webhooks
6- List Webhook Events Returns the marketing events that can be subscribed to.
- List Webhooks Returns the marketing webhooks registered on the account. Transactional webhooks are a separate collection and do not appear here.
- Get Webhook Reads one marketing webhook.
- Create Webhook Registers a marketing webhook. The platform calls the target URL during creation and expects the receiver to echo a verification token back, so this is for receivers a flow controls rather than for arbitrary endpoints.
- Update Webhook Target URL Changes where a marketing webhook points. Runs the verification callback again.
- Delete Webhook Removes a marketing webhook.
Transactional Messages
5- Get API Info Reads the transactional API's own information. The cheapest confirmation that the transactional host is reachable with the same credential.
- Send Message Sends a transactional message. Open and link tracking both default to off, substitutions with no matching value are removed from the content rather than left visible, and only a short list of attachment types is accepted.
- List Messages Lists transactional messages over a period, with event filters that can find messages that do have an event and messages that do not.
- Get Message Reads one transactional message.
- Get Message Statistics Reads aggregate transactional results over a period.
Senders and Sending Domains
9- List Senders Returns the sender addresses registered on the account.
- Add Sender Registers a sender address, which the platform then confirms by mailing that address.
- Get Sender Reads a sender's verification state. Registering is not the same as being usable.
- Delete Sender Removes a sender address from the account.
- List Sending Domains Returns the registered sending domains.
- Register Sending Domain Registers a domain and returns the DNS records that have to be published before it works.
- Get Sending Domain Reads a domain's verification state and its required records.
- Update Sending Domain Changes the return path. The domain itself cannot be changed after registration.
- Delete Sending Domain Removes a sending domain from the account.
Transactional Webhooks
4- List Transactional Webhooks Returns the webhooks registered on the transactional host, which are invisible to the marketing collection.
- Create Transactional Webhook Registers a transactional webhook, with the same verification callback the marketing host performs.
- Update Transactional Webhook Target URL Changes where a transactional webhook points, and re-runs the verification.
- Delete Transactional Webhook Removes a transactional webhook.
Frequently Asked Questions
What can FlowRunner do with Flexmail?
FlowRunner agents can run List Contacts, Get Contact, and Create Contact in Flexmail, plus 56 more actions.
Does connecting Flexmail to FlowRunner require OAuth?
No. Flexmail connects to FlowRunner with basic authentication (a username and password), no OAuth flow required.
Can Flexmail trigger a FlowRunner workflow automatically?
Flexmail doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Flexmail
Free plan, no card required. Connect in minutes.