Now launching iMessage API!Learn more

Products

Ships to

ComparisoniMessage API7 min read

iMessage vs WhatsApp for AI agents

iMessage and WhatsApp compared for AI agents: reply windows, templates, buttons, text limits, voice notes, setup and fees. How to build one agent for both.

The short answer

WhatsApp and iMessage differ most in how conversations open. WhatsApp allows free-form replies for 24 hours after the person writes, then only approved templates. Flow's iMessage line replies to people who wrote to it. WhatsApp has buttons and templates, and iMessage has tapbacks, effects and edits.

Building on the iMessage API? Build on iMessage with Flow: one agent for iMessage, WhatsApp and Telegram. New to it? Read the iMessage API guide.

The big difference: how a conversation opens

WhatsApp iMessage (Flow)
Free-form messages For 24 hours after the contact’s last message When the contact has written to the line before
Outside that Only an approved template A new contact is refused
Start a conversation With a template, within your sender’s limits Only on a dedicated line with the $40 a month Outbound add-on (writing first), within warm-up limits

This is from Flow’s sending rules. On WhatsApp, the conversation carries window_open_until, and you can subscribe to conversation.window_closing to hear about it one hour before. On iMessage there is no timer to watch. If the person has written to the line, you can reply.

The design lesson is shared: reply, don’t broadcast. Agents that answer people who wrote first rarely meet the limits. Other iMessage providers differ on who can write first, so see the provider comparison.

What each can show

From Flow’s content types docs:

WhatsApp iMessage
Text length Up to 4,096 characters Up to 9,999
Buttons Up to 3 reply buttons, or a list of up to 10 rows None; refused with 422 unsupported_content
Templates Yes No
Reactions Any one emoji Any one emoji; not in groups
Effects No Yes
Typing Within 24 hours of the contact’s last message For 5 minutes after your line’s last message (send a reply first)
Edit No Within 15 minutes
Unsend No Within 2 minutes
Locations and contact cards Yes No; send a maps link or the details as text

If your agent leans on buttons, WhatsApp is the better stage. If it leans on a personal feel, with tapbacks and quick corrections, iMessage is. Flow converts nothing, so one agent serving both chooses its content by the conversation’s channel: buttons on WhatsApp, the same choices written out as text on iMessage. Tapbacks, typing and effects goes into the iMessage side.

Setup and fees

  • WhatsApp. You connect a number in your own WhatsApp Business Account, under your own Meta app, with a live key. You create a Meta app, add the number with an approved display name, add a payment method in WhatsApp Manager and generate a system-user token. Meta bills its fees to you directly. The Flow team can also connect a number. There is no WhatsApp sandbox yet, so build on Telegram first with the same code.
  • iMessage. A US number, shared or dedicated: a free trial on the shared line for 25 people, a $25 a month shared line for 300 people a month (200 a day), or your own number for $100 a month (1,000 people a day; a new line starts at 250 a day and ramps to 1,000 over its first 14 days). Flow reviews a new dedicated line, then sets it up, usually within a day.

iMessage is priced on its own: a free trial on the shared line, a $25 a month shared line for 300 people a month, and a $100 a month dedicated line. Writing first comes with the $40 a month Outbound add-on on dedicated lines, and the conversations it starts ramp from 2 a day to 40 a day over 21 days. iMessage API pricing has worked examples.

Voice notes and identity

WhatsApp users send many voice notes. Each arrives as voice content with the audio file. Flow makes no transcripts on any channel, so fetch the audio and transcribe it yourself if your agent needs the words. On iMessage, a voice note also carries the transcript iMessage itself made, when it made one. iMessage supports voice notes both ways, from mp3, wav, m4a, caf or aac files.

Identity differs. WhatsApp numbers are normalised to E.164. An iMessage handle can be a phone number or an email address, so do not assume a number. Do not assume the two are the same person either. Map them only through a verified account lookup. One agent on three channels explains.

Build one agent for both

The loop is the same on both: an inbound event, a model call with your tools, a reply. Three habits keep it portable:

  1. Choose by channel. event.conversation.channel says where the person is. Each endpoint’s docs page lists the channels it works on.
  2. Handle 422 unsupported_content. Flow sends nothing it cannot deliver exactly, and never converts markdown or buttons, so send a substitute (plain text) with a new idempotency key.
  3. Retry only what clears. rate_limited carries retry_after, and outside_window clears only when the person writes again, or when you send a template on WhatsApp.

Flow gives you one project that answers on iMessage, WhatsApp and Telegram, and works as an MCP server and CLI.

Frequently asked questions

What is the biggest difference between iMessage and WhatsApp for an agent?

How a conversation opens. On WhatsApp you can send free-form messages for 24 hours after the contact's last message, then only an approved template. On Flow's iMessage line, the contact must have written to the line first.

Does WhatsApp need message templates?

Outside the 24-hour window, yes. Business-initiated messages need an approved template. On Flow you create templates for your own WhatsApp number and receive a template.status_changed event when WhatsApp approves, rejects or pauses one.

Does iMessage have buttons?

No. WhatsApp shows up to three reply buttons, or a list of up to ten rows. iMessage has none: a buttons message to an iMessage conversation is refused with 422 unsupported_content, so send text that lists the choices.

Who pays WhatsApp fees?

With your own WhatsApp Business Account, Meta bills its messaging fees to your business directly. Flow says WhatsApp fees are billed by Meta with no markup.

Can I build one agent for both?

Yes. With a messaging layer that applies each channel's rules, one handler answers on both. Choose content by the conversation's channel, and handle 422 unsupported_content for a kind the channel does not take.

Does Flow transcribe voice notes?

No. Flow makes no transcripts on any channel. A voice note arrives as voice content with the audio file, so fetch and transcribe it yourself if your agent needs the words. On iMessage, a voice note also carries the transcript iMessage itself made, when it made one.

Start hereiMessage API: a developer’s guideThe overview of how iMessage APIs work, and what to ask a provider. ComparisonDoes Twilio support iMessage?No. Flow gives your agent iMessage, and you can keep Twilio for SMS beside it.ComparisoniMessage API pricing comparedWhy Flow is the value pick: start free, support 300 people a month for $25 a month, and scale with a $100 dedicated line.ComparisonBest iMessage API for AI agentsWhy Flow is the best iMessage API for agents: one codebase, reliable webhooks, testing and every channel in one platform.ComparisonApple Messages for Business vs iMessage APITwo different things that both get called iMessage for business, side by side.ComparisonLinq alternative: why teams choose FlowWhy Flow is the best Linq alternative: a lower paid price, a free start and one agent on every channel.ComparisonFree iMessage APIStart free on Flow's shared iMessage line, test your agent without a phone, and scale to 300 people a month for $25 a month.

All posts: the Flow blog. The Flow docs have the reference.

From reading to building

Your agent, on iMessage and everywhere else.

Flow gives your agent an iMessage line, and the same code answers on WhatsApp and Telegram and works as an MCP server and CLI. See how it works on iMessage.

Build on iMessage with Flow