ManyContacts
MessagingConnect AI agents to ManyContacts, a WhatsApp team inbox and CRM. Agents send and read WhatsApp messages, apply templates, tag contacts, and route conversations to the right team.
What This Integration Enables
ManyContacts is a WhatsApp team inbox with a CRM attached, and the connector is shaped by the one rule that governs everything on that channel: outside a 24-hour window from the customer's last message, you cannot send free-form text, only a Meta-approved template. Almost every design decision a flow makes here follows from that. Send Text Message, Send Media Message, and Send Interactive Message serve the open window. Send Template and Send Template With Media reach across it. List Templates tells you which approved, visible templates exist, and template names must match one exactly.
The contact surface comes in two generations and it is worth knowing which you are using. The v1 actions address a contact by its UUID: List Contacts, Get Contact, Create Contact, Update Contact, Set Custom Field, the assignment and conversation state actions, and the tag and team operations. The v2 actions address a contact directly by phone number in international format, digits only and without a plus sign: Get Contact With Notes, Create Or Update Contact By Phone, Add Tag By Name, and Move Contact To Stage. Phone-addressed actions auto-create the contact if it does not exist, with source api. Get Contact By Phone is the exception that does not, returning an empty object instead, which makes it the right read when a flow needs to know whether someone is already known without creating them by asking.
Two response behaviours will otherwise cost you an afternoon. Update Contact, Set Custom Field, Move Contact To Stage, Trigger Chatbot, and Delete Tag return HTTP 200 with no body on success, normalized here to a success flag. More importantly, message actions return an id and an error field, and when a message is sent but the provider returns a warning the API responds with HTTP 200 and puts the warning inside error. A flow that branches on the status code alone will treat a warned send as a clean one. Inspect error even on success.
There are no triggers on this connector. ManyContacts can forward organization events such as message_new, message_sent, contact_created, and contact_update_tag_added to an HTTPS URL, but that is configured in the ManyContacts app under Settings then Developers, not through this API, so no FlowRunner trigger is provided and FlowRunner does not receive those events natively. Point that URL at an endpoint of your choosing, or run a scheduled List Contacts filtered by assignment, closed state, or tags. Rate limits are per organization in a 60-second window and differ sharply by plan, so a backfill written against a paid account will behave differently on a trial one, where the API key is not available at all.
Without FlowRunner
With FlowRunner
Use Case Scenarios
Order updates that land where the customer already is
An order ships in Shopify. The agent calls Get Contact By Phone to check whether this buyer already exists, which matters because the phone-addressed write actions would create them silently. Create Or Update Contact By Phone sets the name and email, and Set Custom Field records the order number so the next agent to open the thread sees it without asking. If the customer messaged within the last 24 hours the flow sends a plain Send Text Message; otherwise Send Template delivers the approved shipping notification with the tracking number as a body variable. Add Tag By Name applies a fulfilment tag, creating it if it does not exist, and Add Note records exactly what was sent so a human picking up the conversation is not repeating the bot.
A first response that gathers rather than guesses
A new conversation opens and the flow wants to route it correctly without a human triaging first. Send Interactive Message presents quick-reply buttons, and the shape depends on how many options you pass: one to three sends reply buttons capped at 20 characters each, four to ten generates a list capped at 24 characters each. The action also requires the organization to use WhatsApp API or Coexistence through the Meta gateway and the contact to have messaged within the last 24 hours, so it is an in-window tool only. Once the customer picks an option, Add Tag To Contact records the category, Add Contact To Team routes to the right group, and Assign Contact puts it on a named agent. The agent is notified in Slack with the contact's notes attached. Note that Assign Contact returns an error if the target is an AI agent user and the organization has no AI credits, which is a failure worth handling rather than retrying.
Keeping the funnel and the CRM telling the same story
Deals move in HubSpot and the WhatsApp inbox goes stale, so agents work leads that closed a week ago. A flow watching stage changes calls Move Contact To Stage by phone number, targeting the default funnel stage by its order index starting at 0, and Add Tag By Name to mark the new state. When a deal closes it calls Close Conversation so the thread leaves the open queue, and Open Conversation reverses that when a customer replies again. List Contacts filtered by assignment and closed state gives the weekly report on what is genuinely open, appended to Google Sheets. None of this sends a message, which is the point: keeping two systems consistent should not cost anyone's attention on a personal phone.
Human-in-Loop Highlight
Send Template is the action to put a person in front of, and the reason is not that it is destructive. It is that it is unrecallable in a way nothing else in this catalog quite matches. A template send reaches a personal phone, outside the 24-hour window, meaning the recipient did not just message you and is not expecting to hear from you right now. It arrives with a notification, often on a lock screen, frequently in the evening. And this connector has no action that deletes a sent WhatsApp message. Chatra can delete an agent message; here the message is simply gone into someone's hand and there is no path back. Three specific mechanics make a mistake more likely than it sounds. Template names must match an approved, visible template exactly, so a renamed template fails or, worse, a similarly named older one succeeds. Header and body variables are passed as arrays, which means they are positional: swap two entries and a customer receives a correctly formatted message containing another customer's order number, with no error raised at all. And a warning from the Meta gateway comes back inside the error field on an HTTP 200, so a batch can report success while a portion of it went wrong. The blast radius is the recipient count, and there is no dry run. So the agent prepares everything and stops at the send. It calls List Templates to confirm the exact approved name exists, renders one sample message with the real variables filled in, and asks the operations owner: "Ready to send template appointment_reminder_v3 to 412 contacts, all outside the 24-hour window. Sample as it will appear: 'Ola Marina, sua consulta esta marcada para 14/08 as 09:30 na unidade Centro.' Variables map name, date, time, location in that order. Send to all 412, send to the 38 with appointments in the next 24 hours only, or hold?" Nothing about that question is answerable by a rule, and treating it as human-in-the-loop is what earns the right to let every in-window reply, tag, note, and routing call run without review.
Agent Capabilities
32 actionsMessages
4- Send Text Message Sends a WhatsApp text message to a contact identified by phone number or contact ID, creating the contact automatically if that number is unknown. Optionally attribute the message to an AI agent user. Free-form text requires the conversation to be inside the 24-hour window.
- Send Media Message Sends a file, image, audio, video, or document, to a contact over WhatsApp as a multipart attachment, with the type detected from the file. Provide the file as a FlowRunner file URL plus an optional caption; the extension downloads the bytes and forwards them.
- Add Note Adds an internal note to a contact's conversation. The note is not sent to the customer. Optionally hide it so it does not mark the conversation as pending, and assign a tag alongside it. The right place to record what a flow already told someone, so the human who picks up the thread does not repeat it.
- Send Interactive Message Sends an interactive WhatsApp message with quick-reply buttons or a list of options, by phone number or contact ID. One to three options send reply buttons at up to 20 characters each; four to ten generate a list at up to 24 characters each. Requires WhatsApp API or Coexistence through the Meta gateway and a contact who has messaged within the last 24 hours.
Contacts
13- List Contacts Lists contacts with optional filters on assignment, page, closed state, assigned users, and tags, paginated at 50 per page starting at page 0. The scheduled read that substitutes for a trigger.
- Get Contact Retrieves a single contact by its UUID, including tags and custom fields.
- Get Contact By Phone Retrieves a single contact by phone number, returning an empty object when no contact matches. The only phone-addressed read that does not create the contact, which makes it the safe existence check.
- Get Contact With Notes Retrieves a contact by phone number including its internal notes, using the v2 API which addresses contacts directly by phone.
- Create Contact Creates a contact, or returns the existing one, for a given phone number, optionally setting a name and assigning it to a user on creation.
- Create Or Update Contact By Phone Creates or updates a contact identified by phone number, setting name, conversation open state, notes, email, and locked state. Uses the v2 API and creates the contact when the number is unknown.
- Update Contact Updates a contact by ID: name, phone number, conversation open state, notes, email, and locked state. Returns HTTP 200 with no body on success.
- Set Custom Field Creates or updates a custom field, as a key and value, on a contact identified by ID. Where an order reference or account number belongs so an agent opening the thread has it immediately.
- Assign Contact Assigns a contact to a user, meaning an agent. If the target is an AI agent user and the organization has no AI credits, the API returns an error, which is a condition to handle rather than retry.
- Unassign Contact Removes the assigned user from a contact, returning it to the unowned queue.
- Close Conversation Closes the conversation for a contact, taking the thread out of the open queue.
- Open Conversation Opens or reopens the conversation for a contact.
- Move Contact To Stage Moves a contact, addressed by phone number, to a funnel stage identified by its order index starting at 0. Uses the v2 API and targets the default funnel.
Tags and Teams
10- Add Tag To Contact Adds a tag to a contact, both identified by ID.
- Remove Tag From Contact Removes a tag from a contact, both identified by ID.
- Add Tag By Name Adds a tag to a contact by phone number using the tag name, creating the tag if it does not exist and the contact if it does not exist. Uses the v2 API, which makes it convenient and also means a typo produces both a new tag and a new contact.
- Add Contact To Team Assigns a contact to a team, both identified by ID. The routing call that puts a conversation in front of the right group rather than the whole inbox.
- Remove Contact From Team Removes a contact from a team, both identified by ID.
- List Tags Lists the organization's tags with an optional partial, case-insensitive name filter. Read it before applying a tag by name if you would rather not create one by accident.
- Create Tag Creates a tag with a name and an optional hex color, assigning a random color when none is given.
- Update Tag Updates a tag's name or hex color.
- Delete Tag Deletes a tag by ID. Returns HTTP 200 with no body on success.
- List Teams Lists the organization's teams and their members, which is the mapping a routing flow needs to stay current as staffing changes.
Templates
3- List Templates Lists the organization's approved and visible WhatsApp message templates. The verification step before any template send, since names must match exactly.
- Send Template Sends a Meta-approved WhatsApp template to a phone number with optional header and body variable arrays, using the v2 template API. This is how a conversation starts outside the 24-hour window, and the variables are positional, so their order is part of the message's meaning.
- Send Template With Media Sends a Meta-approved WhatsApp template with a media attachment to a phone number, with the same optional header and body variable arrays and the same v2 template API.
Users
1- List Users Lists the users, meaning agents, in the organization with their ID, name, and AI flag. The AI flag is what a flow checks before assigning work to an AI agent user that may lack credits.
Chatbot
1- Trigger Chatbot Triggers the chatbot's first message to a contact identified by ID. Returns HTTP 200 with no body on success, and hands the conversation to the configured bot flow rather than sending a message you composed.
Frequently Asked Questions
What can FlowRunner do with ManyContacts?
FlowRunner agents can run Send Text Message, Send Media Message, and Add Note in ManyContacts, plus 29 more actions.
Does connecting ManyContacts to FlowRunner require OAuth?
No. ManyContacts connects to FlowRunner with an API key, no OAuth flow required.
Can ManyContacts trigger a FlowRunner workflow automatically?
ManyContacts doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with ManyContacts
$100 in credits. No card required. Connect in minutes.