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
| 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:
| 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:
- Choose by channel.
event.conversation.channelsays where the person is. Each endpoint’s docs page lists the channels it works on. - 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. - Retry only what clears.
rate_limitedcarriesretry_after, andoutside_windowclears 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.
Keep reading
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