Since Apple added RCS support in iOS 18, this question comes up in every messaging architecture discussion. The two options look similar on a feature list — rich media, typing indicators, read receipts, delivery signals — and are completely different in the ways that matter.
The difference in one table
| iMessage API | RCS API | |
|---|---|---|
| Official? | No. No Apple API exists; all vendors operate outside Apple's terms | Yes. GSMA standard, supported by carriers and Apple since iOS 18 |
| Bubble on iPhone | Blue — reads as a person | Not blue — reads as a business |
| Who sells it | ~8 specialist vendors | Every major CPaaS: Twilio, Telnyx, Sinch, Vonage |
| Pricing | Per line, per month | Per message, like SMS |
| Android reach | Only via SMS/RCS fallback | Native — this is RCS's home turf |
| Durability | Vendor and account risk | Standardised; not going anywhere |
| Compliance posture | Awkward; ToS grey area | Clean; ordinary carrier channel |
RCS on iPhone is not a blue bubble
This is the misconception that drives bad architecture decisions. iOS 18 supports RCS, so messages get rich features and delivery receipts — but they do not render as blue person-to-person bubbles. If the blue bubble is why you are here, RCS does not deliver it.
Choosing by what you are optimising for
Choose RCS when
- You need every recipient, Android included
- Compliance or procurement cannot accept a ToS grey area
- Volume is high and per-message economics win
- You want one vendor for messaging, voice and everything else
- The message is transactional and does not need to feel personal
Choose iMessage when
- The message needs to read as a person, not a brand
- Your customers skew iPhone — often true for local services
- Response rate is the metric that matters
- You are having conversations, not sending notifications
- Rich link previews of your own domain are the trust mechanism
The answer most teams land on
Use both, behind one interface. The provider decides per recipient: iMessage where it will land blue, RCS where the device supports it, SMS underneath as the floor. Several vendors already ship exactly this, which is why single-channel thinking is usually the wrong frame.
// Your application should not know or care which channel was used.// It asks for a message to be delivered; the layer below picks the road.type Channel = "imessage" | "rcs" | "sms"; export async function notify(to: string, text: string) { const result = await messaging.send({ to, text, // Order matters: try the highest-trust channel first, fall down. preferChannels: ["imessage", "rcs", "sms"] satisfies Channel[], }); // Record which channel actually delivered — this is the number you // need to compare response rates honestly across channels. await analytics.track("message_sent", { channel: result.channel, message_id: result.id, }); return result;}Tracking the delivered channel is what lets you answer the question everyone eventually asks — whether the blue bubble is actually worth its price. Set the attribution up properly with UTM tagging for text messages and measuring ROI of texting.
The consumer-side comparison, without the API framing, is in iMessage vs RCS.
Related questions
- Is RCS a replacement for an iMessage API?
- Not for the blue bubble. RCS on iPhone renders in a different bubble style and does not carry the person-to-person trust signal that makes iMessage valuable. RCS is a genuine replacement for SMS, not for iMessage.
- Can one API send both iMessage and RCS?
- Yes. Linq, Blooio and Photon all offer iMessage with RCS and SMS fallback behind a single interface, which is generally the sensible architecture.
Still deciding?
Compare the services that can actually send this on the providers page, see what each one costs, or read the step-by-step guides.