Blooio
MessagingConnect AI agents to Blooio, a business messaging platform that puts iMessage, SMS, RCS, and WhatsApp behind one API. Agents send messages across channels with automatic fallback, manage contacts and group chats, look up phone numbers, and react to inbound events so conversations run on the channel each customer actually uses.
What This Integration Enables
Blooio puts iMessage, SMS, RCS and WhatsApp behind one API key, and the common send is deliberately scalar: a recipient and some text, with the platform choosing the channel. That single design choice is what the whole connector is organized around. Leave the sender empty and the message follows the key's routing waterfall, going out over whichever channel reaches this person. Name a sender explicitly and routing is bypassed entirely, which is why the From parameter cannot be combined with priority, channel type or hybrid: the vendor marks them mutually exclusive because the alternative is an undefined answer to the question of what the recipient sees and replies to. All three sends accept a Dry Run flag that validates and routes without delivering.
Two things deserve to be said plainly before you build on this. iMessage here runs through a linked Apple account and a device, not an official Apple integration, because Apple publishes no public iMessage API. The API surfaces that fact rather than hiding it. Chat backgrounds read live from the device, groups carry a linked flag and refuse icon changes without it, and reactions are rejected until a message has reached the device. The platform also emits its own safety and number-banned events, because channel standing is a real operating condition here rather than a hypothetical one. WhatsApp on this platform is a different story and carries different guarantees. It is Meta's official Business Platform, evidenced by the API's own structure: across the whole surface there is no instance, session, QR pairing or connect and disconnect route anywhere, and templates are supported. Treat the two channels as having separate risk profiles rather than accepting one blanket verdict for the vendor. The second thing is the reach of the rest of the surface. Contacts carry multiple identities that can be attached, updated, detached and merged, with a timeline that spans every channel and every thread they take part in. Groups, polls, reactions, typing indicators and chat backgrounds are Blooio-channel features and are rejected elsewhere. There is a real webhook subscription API with per-subscription secrets, which is why this connector ships an On Event trigger rather than a polling substitute. Note that Blooio has retired per-subscription event filtering: every subscription receives every event, so the trigger's filter runs on our side rather than at the vendor.
Without FlowRunner
With FlowRunner
Use Case Scenarios
Blue or green, decided before the message is written
A customer replies to an order notification. On Event fires, and before composing anything the agent calls Get Contact Capabilities for that contact, which performs a live per-number lookup through an active iMessage channel and reports how each identity can actually be reached. If iMessage is available, the reply goes out as a rich message with an attachment and a tapback is available afterward. If only SMS is, the agent shortens the copy and drops the attachment to a link. Same flow, same code path, and the customer never sees a message that arrived degraded because nobody checked.
One person, several numbers, one conversation
A customer messages from their work phone in the morning and their personal phone in the evening. Blooio creates a contact automatically when a message arrives from an unknown number, so the account now holds two. The agent calls List Contacts to find the near duplicate, calls Attach Contact Identity to bring the second number onto the primary record, and where two full records already exist calls Merge Contact with the survivor named explicitly. Conversations follow identities rather than contacts, so history is not rewritten or lost. Get Contact Timeline then returns one chronological feed across every channel and every thread, including the absorbed record's history, which is what an agent needs before it answers a question that references something said last week on a different number.
A support thread that feels like a person is on it
An escalation lands in the queue and a specialist in Slack picks it up. While they read, the agent calls Set Typing Indicator so the customer sees activity rather than silence, then Stop Typing Indicator when the draft is ready, because an indicator left running looks worse than no indicator at all. The specialist's answer goes out with Send Message To Chat. If the customer sends a tapback, List Message Events records it in order alongside the delivery and read receipts, so the record of the conversation includes the reactions and not just the text.
Human-in-Loop Highlight
A priority on Blooio is a routing waterfall: channels sharing a tier form a pool, ascending tiers are tried in order, and one priority is the key's default. That default decides where every send goes that does not name a sender, which on a well built flow is most of them. Three details make it the gate on this connector. The first priority a key creates becomes its default automatically unless the flag is explicitly turned off. Update Priority replaces the entire channel set rather than adding to it, so a partial list silently drops every channel it omits. And deleting a default does not cause sends to fail: unaddressed sends quietly fall back to the implicit pool of the key's own Blooio numbers.
Every one of those is a silent change to the number a customer sees. Nothing errors, delivery reports stay green, and the failure shows up days later as replies arriving on a line no flow is watching, on threads that no longer connect to the history the agent built. There is no undo, because the messages already went out under the old identity. So an agent can send, route, reply, react, merge contacts and manage chats all day without asking anyone. When it reaches a change to a priority, it stops. It reads the current waterfall with Get Priority, diffs it against what it is about to write, and asks the owner: "This update replaces the default waterfall for this key. Tier 1 currently holds the iMessage channel and the SMS line ending 0142. The new set drops 0142 and adds the WhatsApp channel. Every send that does not name a sender will route differently from the moment this is saved, and customers who reply to 0142 will land on a line no flow is watching. Apply, apply without making it the default, or cancel?" A person answers once. That is human-in-the-loop aimed at the configuration change rather than at the messages, which is where the irreversibility actually lives on a platform whose whole premise is that it picks the channel for you. Two neighboring operations deserve the same treatment for related reasons. Purchase Numbers charges the organization's payment method and requires an idempotency key precisely because a naive retry would charge twice. Rotate Webhook Secret invalidates the old secret immediately, so every receiver verifying signatures rejects deliveries until the new value is deployed.
Agent Capabilities
89 actionsAccount
7- Get Account Returns the authenticated organization with its linked devices and numbers, current usage, and whether the API key is still valid. The cheapest call that proves the key works, which makes it the natural first step in any flow that later sends.
- List Sender Numbers Lists the phone numbers and sender addresses this key may send from. These are exactly the values the From parameter accepts on a send, so this is the ground truth behind any explicit sender choice.
- Request Call Forwarding Asks Blooio to forward voice calls placed to one of your numbers on to another US number. Blooio lines are messaging lines, so forwarding is what stops a caller reaching a dead end. It changes how real inbound calls behave, so the destination is worth confirming before the call is made.
- Get Number Contact Card Returns the contact card shared from one of your numbers: the name and avatar a recipient sees when your message arrives, together with the sharing settings that govern it.
- Update Number Contact Card Sets the name, avatar and sharing settings on the card a number shares. This is the sender identity recipients see, so it changes how every future message from this number is presented, not just the next one. At least one field is required.
- Upload Number Contact Card Avatar Uploads an avatar image for a number's contact card from a public URL, fetched and posted as file bytes with a 10MB maximum. Use the update action instead when you already have a hosted URL Blooio can read.
- Get Default Priority Returns the channel priority this key routes through when a send names no sender. A null result means no priority is configured, in which case routing falls back to the key's own Blooio numbers. Read this to find out where an unaddressed send will actually go before assuming.
Channels
8- List Channels Lists the organization's messaging channels, the concrete lines behind iMessage, SMS, WhatsApp and RCS delivery, with their addresses, status and capabilities. An ordinary send needs no channel id; this is for inspecting what a channel can do or obtaining an exact id for advanced routing.
- Get Channel Returns one channel by phone number, alias or channel id. All three forms are accepted anywhere this connector takes a channel reference, and a leading plus on a phone number is encoded automatically.
- Get Channel Capabilities Returns the protocols, content types, actions and interactive features a channel supports. Worth checking before sending rich content, because polls, reactions, typing indicators and chat backgrounds are Blooio-channel features and are rejected elsewhere.
- Update Channel Profile Stores profile metadata for a channel such as a display name or avatar. Blooio keeps the object verbatim under the channel's metadata, so any shape the vendor documents can be supplied without the connector reshaping it into a guess.
- List Available Numbers Browses the number inventory available to buy. Shared returns available shared lines while dedicated and inbound return unassigned dedicated inventory. Supplying area codes turns the response into a quote instead, with each code either in stock or requiring a custom order that carries a fee. Requires the number purchase feature to be enabled.
- Purchase Numbers Buys Blooio lines and charges the organization's payment method. The purchase is asynchronous and returns a purchase id, with lines provisioned once payment clears. An idempotency key is required and is what makes a retry safe, since replaying the same key returns the original purchase instead of charging twice. Out of stock area codes incur a custom fee and open a provisioning ticket.
- Get Purchase Status Polls an asynchronous purchase by its id, returning pending or provisioning while in flight, completed with the provisioned allocations, or failed. Used when a flow needs the new numbers before it can continue.
- Remove Number Cancels a line's subscription and releases it, the same act as the dashboard's unsubscribe button. The number stops receiving messages and is not recoverable, so any conversation history tied to it becomes unreachable from that line. Blooio requires at least one churn reason and records it against the account.
Messaging
8- Send Message The primary send, scalar in the common case: a recipient and some text, with Blooio picking the channel. From selects an exact sender as a phone number, alias or channel id, and leaving it empty uses the key's default routing so the message may go out over iMessage, SMS, RCS or WhatsApp. From cannot be combined with priority, channel type or hybrid. Several recipients on a group capable channel form one thread; elsewhere they fan out to individual sends, up to 100. Dry Run validates and routes without sending.
- Send Message On Channel Sends from one named channel with no routing decision at all, addressed by phone number, alias or channel id in the path. Use it when the sender must be a specific line, such as a support number customers have saved. The channel scoped equivalent of naming a sender explicitly.
- Send Message To Chat Sends into an existing conversation, where both sender and recipient come from the chat itself, so neither can be wrong. This is the action for a reply. The response is the message object at the top level rather than inside a data envelope, which matters for anything parsing it.
- List Chat Messages Lists the messages in a conversation, newest first unless reversed. The polling read for inbound traffic when a flow cannot expose a webhook URL, with the On Event trigger as the push equivalent.
- Get Message Returns one message with its full content, attachments and delivery state. Outbound messages carry their own id form; inbound messages use the id the list route reports.
- Get Message Status Returns just the delivery state of a message, queued, sent, delivered, read or failed, together with the transport it actually went out over. Lighter than fetching the whole message when a flow is only waiting on delivery, and the transport field is what tells you which channel the routing chose.
- List Message Events Lists the lifecycle events recorded for one message in the order they occurred: sent, delivered, read, reactions and failures. Used to reconstruct what happened to a message rather than only where it ended up.
- React To Message Adds or removes a tapback reaction on any message in a conversation, inbound or outbound. The reaction carries its own sign, so a leading plus adds and a leading minus removes rather than these being two different reactions. Blooio channels only, and a message that has not yet reached the device is rejected.
Chats
14- List Chats Lists conversations most recent first, optionally narrowed to one channel type, state, channel or contact. A closed chat is not deleted, only moved out of the way, so filter by state rather than assuming the list contains only active threads.
- Find Or Create Chat Finds the existing one-to-one conversation with a recipient on a channel, or opens one if there is none, and reports whether the chat was newly created. Safe to call repeatedly, which makes it the standard way to obtain a chat id before sending into a thread.
- Get Chat Returns one conversation with its channel, contact, state and capabilities. The window expiry field matters on WhatsApp, where a business may only send freely inside the customer service window, so this read is how a flow decides between free-form text and a template.
- Update Chat Opens or closes a conversation and merges metadata into it. Only open and closed can be set; blocked and other states are assigned by the platform and asking for them is refused rather than silently ignored. At least one field is required.
- Get Chat Background Reads the background image set on a conversation. This reads live from the linked device rather than from stored state, so it is slower than other reads. Blooio channels only.
- Set Chat Background Sets the background image of a conversation from a public URL, fetched and uploaded as file bytes with a 10MB maximum and a fixed set of accepted formats. This is visible to the recipient on their device, so it is a change to their experience rather than an internal setting. Blooio channels only.
- Remove Chat Background Clears the background image from a conversation, returning it to the default appearance on the device. Blooio channels only.
- Share Contact Card Sends the sender's own contact card into a conversation so the recipient sees a name and avatar instead of a bare number. This puts a real message in the thread rather than adjusting metadata quietly. Blooio channels only.
- List Chat Participants Lists the identities taking part in a conversation. On a group thread this is who currently receives anything sent into it, which is worth confirming before a group send rather than after.
- Add Chat Participant Adds someone to a group conversation. Everyone already in the thread sees the addition, and the new participant can read messages sent from that point on. Blooio's specification defines no request body for this route, so the payload is passed through exactly as supplied rather than reshaped into a guess.
- Remove Chat Participant Removes an identity from a group conversation. They stop receiving anything sent into the thread from that point, and the removal is visible to the other participants, which makes it a social act as well as a technical one.
- Mark Chat Read Sends a read receipt for a conversation so the other party sees the thread as read. This is visible to them and cannot be taken back, so a flow that marks threads read on ingestion is telling customers a human looked.
- Set Typing Indicator Shows or clears the typing indicator in a conversation, which the recipient sees live on their device. Useful to make an automated reply feel less abrupt, and worth stopping deliberately, because an indicator left running looks like a message that never came.
- Stop Typing Indicator Clears the typing indicator in a conversation. The reliable way to end an indicator a flow started, and the step most often forgotten in a branch that exits early.
Polls
3- Send Poll Sends a native poll into a conversation, needing a title and at least two options. The poll shares the id of the message that carries it, which is what the results action takes. This sends a real, billed message. Blooio channels only.
- Get Poll Results Returns the current tally for a poll, each option with its votes and the total. Poll ids share the id of the message the poll was sent as, so a flow that kept the send response already holds the key.
- Vote On Poll Casts a vote from the account's own side, by option position or by the option's text, exactly one of the two. The vote toggles: voting for an option already selected removes that vote rather than adding a second, which is worth knowing before a retry. Blooio channels only.
Contacts
15- List Contacts Lists contacts with a case-insensitive search across names, identities and tags. Note the pagination switch: supplying search, tag, sort, filter or offset moves the route from cursor paging to offset paging and adds a total count, so pick one style and stay with it rather than mixing them in a loop.
- Create Contact Creates a contact, optionally attaching a first identity on a channel type. Blooio also creates contacts automatically when messages arrive from unknown numbers, so check the list first to avoid creating a duplicate that later has to be merged.
- Get Contact Returns one contact with its identities, tags and the direction and text of its last message. Enough context to decide whether this person needs a reply without opening a thread.
- Update Contact Renames a contact. Identities are managed separately through the attach, update and detach actions, so this changes the label rather than who the record can be reached at.
- Delete Contact Soft-deletes a contact and every identity attached to it. Conversations reference identities rather than contacts, so message history is not destroyed, but the contact stops being addressable and its identities go with it.
- Get Contact Capabilities Reports how each of a contact's identities can actually be reached, whether iMessage is available or only SMS. For Blooio identities this is a live per-number lookup performed by an active iMessage channel, so it is slower than a stored read and is rejected when the key has no active iMessage channel. This is the call that decides between blue and green before sending.
- List Contact Identities Lists the phone numbers and emails attached to a contact, each with the channel type it belongs to. These identity ids are what the chat participant and merge operations take.
- Attach Contact Identity Attaches another phone number or email to an existing contact so messages from it land against the same record. This is how one person with several numbers becomes one contact rather than several competing ones.
- Update Contact Identity Changes the phone number or email an identity points at, in place, and renames the parent contact in the same request when a name is supplied. Because conversations are keyed on identities, changing the identifier moves the existing history with it rather than starting a new thread.
- Detach Contact Identity Removes a phone number or email from a contact. The identity stops being associated with the record, so future messages from it are treated as coming from someone unknown, which is usually not what a cleanup task intended.
- Merge Contact Collapses two records for the same person into one. The direction matters and is not symmetric: the named contact survives and the source is absorbed into it and left as a tombstone. Identities move across, tags are unioned, and the survivor keeps its own name unless it has none. Nothing is lost, but picking the wrong survivor keeps the wrong name and id.
- List Contact Tags Lists the tags on a contact. Tags are the segmentation mechanism this API offers and the contact list can filter by one, so this is how a flow reads what a contact is currently marked as.
- Add Contact Tags Adds one or more tags to a contact, leaving existing tags in place. Tags added here immediately become available as a filter, which is how a signal from another system turns into a reachable segment.
- Remove Contact Tag Removes one tag from a contact, with spaces and punctuation encoded automatically. If the tag drives a segment elsewhere, removing it changes who that segment covers, so treat it as an audience edit rather than a label tidy.
- Get Contact Timeline Returns one chronological feed of everything that happened with a contact, across every channel and every conversation they take part in, one-to-one and group alike. After a merge it includes the absorbed contact's history automatically. Including events interleaves delivery receipts, reactions and chat events, which makes the feed considerably larger.
Groups
8- List Groups Lists group chats with their members and whether each is linked to a device. The linked flag matters, because group icon changes need a linked chat and an unlinked group refuses them.
- Create Group Creates a group chat with one or more members on a group capable channel. Creating the group is visible to every member: they are added to a real thread on their devices, so this is not a private draft that can be assembled and reviewed first.
- Get Group Returns one group with its members, channel, icon and linked chat. The read before any group change, since half the operations depend on the linked state.
- Update Group Renames a group. The new name is visible to every member on their device, and on Blooio channels the rename itself appears in the thread, so a tidy-up is something everyone watches happen.
- Delete Group Deletes a group. The conversation and its history stop being reachable through this group record and members see the thread end on their devices. There is no undo.
- Set Group Icon Sets a group's icon from a public image URL, fetched and uploaded as file bytes with a 10MB maximum and a fixed format list. The group's chat must be linked to a device, and the change is visible to every member.
- Remove Group Icon Clears a group's icon, returning it to the default appearance for every member. Visible to everyone in the thread, like every other group change on this platform.
- List Group Members Lists who is currently in a group with each member's identity, contact and role. This is who receives anything sent into the group, which makes it the check worth running before a group send rather than the explanation afterward.
Events
2- List Events The unified activity feed: message lifecycle, polls, groups, reactions, typing and safety events in one chronological list. The pull equivalent of the On Event trigger and the right choice for a flow that cannot expose a public callback URL. The type filter accepts a wildcard.
- Get Event Returns one event from the unified feed by its id, with its full payload. Used when a summary row needs to be resolved into the detail behind it.
Location
3- List Find My Contacts Lists the Find My friends currently sharing their location with the linked Apple account, with their last known positions. This is real location data about real people and deserves to be treated that way. It reads stored positions rather than fresh ones.
- Refresh Find My Locations Forces the linked device to fetch fresh Find My location data, reaching out to the device rather than reading stored state, so it is slower and should not be polled in a tight loop. Call it before listing when the positions have to be current.
- Get Find My Contact Returns the last known location of one Find My contact, resolved by phone number, email or Apple ID. The narrow read when a flow needs one person rather than the whole list.
Phone Numbers
2- Look Up Phone Number Returns parsed and geocoded information for a number: country, carrier and line type. Requires an enterprise plan, and on other plans the call is rejected outright rather than returning partial data, so a flow should branch on plan rather than on an empty result.
- Batch Look Up Phone Numbers Looks up many numbers in one request, up to 100, and also requires an enterprise plan. Use this rather than looping the single lookup, which would burn through rate limits for the same answer.
Priorities
5- List Priorities Lists the channel priorities this key owns. A priority is the routing waterfall an unaddressed send follows, where channels sharing a tier form a pool and lower tiers are tried first. The inventory read before any routing change.
- Create Priority Creates a routing waterfall from a set of channels, with channels sharing a tier and type forming a pool and ascending tiers tried in order at send time. Making a priority the default changes where every unaddressed send goes for this key, and the first priority a key creates becomes its default automatically unless that is explicitly turned off.
- Get Priority Returns one waterfall with its channels and tiers. This is the read that has to happen before an update, because updates replace rather than merge.
- Update Priority Changes a waterfall's name, default flag or channel set. Supplying channels replaces the whole set rather than adding to it, so a partial list silently drops the channels it omits. Read the priority first and send the complete list, and remember that making it the default redirects every unaddressed send.
- Delete Priority Deletes a routing waterfall. If it was the key's default, unaddressed sends fall back to the implicit pool of the key's own Blooio numbers, so deleting a default silently changes routing rather than causing sends to fail. Silence is the failure mode here.
Templates
4- List Templates Lists the saved message templates on the account. Blooio's specification defines no response schema for this route, so the vendor's payload is returned exactly as received rather than reshaped into a guess.
- Create Template Saves a message template for reuse. The specification defines no request body for this route either, so the payload is sent verbatim and should match what the vendor's own documentation specifies.
- Get Template Returns one saved template by its id. The narrow read when a flow needs to confirm a template still exists before referencing it.
- Delete Template Deletes a saved template. Anything referencing it by id stops resolving, so check for flows using the template before removing it rather than discovering the dependency from a failed send.
Attachments
2- Register Attachment Registers an attachment so it can be referenced from a message. The specification defines no request body, so the payload is sent verbatim. For ordinary media this is not needed at all, because the attachments parameter on the send actions takes public URLs directly.
- Get Attachment Returns one attachment by the id a message's content references. Inbound Apple media is downloaded, decrypted and re-hosted by Blooio before its URL is populated, so an attachment on a just-received message may not be servable immediately and a flow should expect to retry.
Webhooks
8- List Webhooks Lists the organization's webhook subscriptions with their URLs, status and scope. Subscriptions created by an On Event trigger appear here too, which makes this the read that shows what is currently registered before anything is changed.
- Create Webhook Subscribes an HTTPS endpoint to Blooio events and returns the signing secret once, on creation, with no later read returning it. Scope decides which lines the subscription covers, and leaving both scope fields empty makes it organization-wide so it receives events from every line. Per-subscription event filtering is retired, so this sends no event type list and a narrower request is rejected by the vendor.
- Get Webhook Returns one subscription by its id. The signing secret is not included, because it is returned only when the subscription is created or the secret is rotated.
- Update Webhook Changes a subscription's URL or disables it. Disabling stops deliveries without losing the subscription or its secret, which is the reversible way to pause a noisy integration. Event types cannot be changed, since filtering is retired and every webhook receives every event.
- Delete Webhook Deletes a subscription permanently along with its signing secret. If the subscription belongs to an On Event trigger, that trigger stops receiving events and only re-registers when the flow is next saved. Use the update action with disabled for a reversible pause instead.
- List Webhook Deliveries Lists recent delivery attempts for a subscription with the HTTP status each attempt received, how many times it has been retried and when the next retry is due. This is where to look when a trigger seems silent, because it distinguishes an event Blooio never sent from one an endpoint rejected.
- Replay Webhook Delivery Re-sends a past delivery to the subscription's endpoint. The receiver sees a real inbound event again, so anything downstream that acts on events will act on it a second time. Replay only into a handler that is idempotent.
- Rotate Webhook Secret Issues a new signing secret for a subscription and returns it once. The old secret stops working immediately, so any receiver verifying signatures rejects every delivery until it is updated. Rotate when a secret may have leaked, with the deployment of the new value already prepared.
Triggers
1 triggersEvent Triggers
1- On Event Fires when Blooio reports activity: an inbound message, a delivery or read receipt, a reaction, a poll vote, a group change or a safety event. Leave the event types empty to fire on everything, or list the types to react to, with a trailing wildcard supported so a family of message events can be matched in one entry. Blooio has retired per-subscription filtering, so every subscription receives every event and the filter is applied on our side rather than at the vendor. The practical consequence is that a type which never arrives simply never fires, and List Webhook Deliveries is where to look when a trigger seems silent.
Frequently Asked Questions
What can FlowRunner do with Blooio?
FlowRunner agents can run Get Account, List Sender Numbers, and Request Call Forwarding in Blooio, plus 86 more actions.
Does connecting Blooio to FlowRunner require OAuth?
No. Blooio connects to FlowRunner with an API key, no OAuth flow required.
Can Blooio trigger a FlowRunner workflow automatically?
Yes. Blooio supports 1 trigger that can start a FlowRunner workflow automatically.
Start building with Blooio
$100 in credits. No card required. Connect in minutes.