RCS Fallback: Automatic SMS/MMS Delivery for Every Recipient, Every Time
RCS reaches more devices every month — but not every device yet. Pinnacle's automatic fallback delivers SMS or MMS to recipients whose devices don't support RCS, with zero extra logic on your end. One send call reaches everyone.
Ivan

The RCS Reach Problem (And Why It's Already Solved)
RCS has the best messaging experience available on Android today: branded rich cards, interactive buttons, product carousels, read receipts, and verified sender identity. But "the best experience on Android" is not the same as "universal delivery."
Some recipients will be on older Android devices without RCS support. Some will be on carriers that haven't fully rolled out RCS. Some — when iMessage interoperability expands further — will be on iOS. The common question from every team evaluating RCS: what do we do when a recipient can't receive it?
The answer is Pinnacle's fallback system. Define an SMS or MMS fallback message alongside your RCS send, and Pinnacle automatically routes the right message to every recipient based on their device's actual RCS capability. Rich experience for those who support it. Reliable delivery for everyone else. One API call handles both.
How Fallback Works
When you include a fallback object in your RCS send, Pinnacle checks each recipient's RCS capability before dispatching. If the recipient supports RCS, the RCS message is sent. If they don't, the fallback SMS or MMS is sent instead — automatically, without any conditional logic in your code.
The response indicates what happened:
- Standard RCS send:
{ messageId: "msg_abc123" } - Fallback triggered:
{ fallbackSent: true, originalMessageId: "msg_abc123", messageId: "msg_fallback456" }
You never dispatch two messages or check capabilities manually. Pinnacle handles the routing.
Billing note: If RCS is delivered, you're charged the RCS rate. If the fallback fires, you're charged the SMS or MMS rate for the fallback — the original RCS message is not charged.
RCS rich card messageRCS
SMS fallback messageSMS FallbackSending With Fallback
SMS Fallback
The simplest fallback: if RCS doesn't reach the recipient, send plain text SMS instead.
import { PinnacleClient } from "rcs-js";
const client = new PinnacleClient({ apiKey: process.env.PINNACLE_API_KEY });
await client.messages.rcs.send({
to: "+14155551234",
from: "agent_your_brand",
cards: [
{
title: "Spring Sale — 30% Off Everything",
subtitle: "Limited time only. Shop before it ends.",
media: "https://cdn.yourapp.com/spring-hero.jpg",
buttons: [
{
type: "openUrl",
title: "Shop Now",
payload: "https://yourapp.com/sale",
},
],
},
],
quickReplies: [],
fallback: {
from: "+18005550001", // Your registered SMS number
text: "🎉 Spring Sale is live — 30% off everything. Shop at yourapp.com/sale. Reply STOP to unsubscribe.",
},
});MMS Fallback
Include a media file in your fallback to send MMS instead of plain SMS — preserving some of the visual experience even without RCS:
await client.messages.rcs.send({
to: "+14155551234",
from: "agent_your_brand",
cards: [
{
title: "New Product Drop",
subtitle: "Only 48 hours. Don't miss it.",
media: "https://cdn.yourapp.com/product-hero.jpg",
buttons: [
{
type: "openUrl",
title: "View Product",
payload: "https://yourapp.com/new",
},
],
},
],
quickReplies: [],
fallback: {
from: "+18005550001",
text: "New drop just landed. 48 hours only.",
mediaUrls: ["https://cdn.yourapp.com/product-hero.jpg"], // Sends as MMS
},
});When mediaUrls is present in the fallback, Pinnacle automatically sends MMS instead of SMS.
Fallback for Blasts
The fallback field works identically for bulk blasts — every recipient who can receive RCS gets the rich message, every recipient who can't gets the fallback automatically, all in a single blast_rcs call:
await client.messages.blast.rcs({
audienceId: "aud_abc123",
senders: ["agent_your_brand"],
message: {
cards: [
{
title: "VIP Early Access",
subtitle: "You're first in line. Tap to unlock.",
media: "https://cdn.yourapp.com/vip-banner.jpg",
buttons: [
{
type: "openUrl",
title: "Unlock Access",
payload: "https://yourapp.com/vip",
},
],
},
],
quickReplies: [],
},
fallback: {
from: "+18005550001",
text: "VIP early access is yours. Visit yourapp.com/vip to unlock it. Reply STOP to unsubscribe.",
},
});At scale, this matters enormously. Without a fallback, every recipient whose device doesn't support RCS receives nothing — a silent miss. With a fallback, your entire audience gets a message. RCS supporters get the rich experience; everyone else gets a clean SMS. Total reach, zero gaps.
Pinnacle's analytics dashboard breaks down every message status — including Fallback Sent — so you can see exactly how many recipients received the RCS experience vs. the SMS fallback.
Fallback Sender Requirements
The fallback from number must be:
- A phone number you own in your Pinnacle account (not an RCS agent ID)
- Attached to an active 10DLC or toll-free campaign — required for A2P sending
This is the same compliance requirement that applies to any outbound SMS or MMS. If you're already sending SMS through Pinnacle with a registered number, you can use that number as your fallback sender immediately.
Designing Good Fallback Messages
The fallback message is doing a different job than the RCS message. The RCS card can lean on visuals, layout, and interactive buttons. The SMS fallback has to carry the same intent in 160 characters — or close to it.
A few principles:
Lead with the key value, not the creative. "30% off everything — yourapp.com/sale" converts better than "Spring is here and we have something special for you."
Include the action URL. RCS buttons make navigation effortless; without them, the URL is how recipients take action. Use a Pinnacle short URL to save characters and improve deliverability.
Keep compliance copy. "Reply STOP to unsubscribe" is legally required for promotional messages and must appear in your fallback. Your RCS message may handle this via buttons; your SMS fallback needs it in plain text.
Test both. Validate your RCS message structure with validate_rcs and your fallback text with validate_sms — make sure the SMS fallback fits in the fewest possible segments.
// Pre-flight both messages before sending
const [rcsValidation, smsValidation] = await Promise.all([
client.messages.rcs.validate({ cards: myCards, quickReplies: [] }),
client.messages.sms.validate({ text: myFallbackText }),
]);
console.log(`RCS cost: ${rcsValidation.total}`);
console.log(`SMS fallback: ${smsValidation.total}`);Checking the Fallback Status in Response
When a fallback fires, the response flags it explicitly:
const result = await client.messages.rcs.send({ ... });
if (result.fallbackSent) {
console.log(`RCS not supported — sent SMS fallback. Message ID: ${result.messageId}`);
console.log(`Original RCS message ID: ${result.originalMessageId}`);
} else {
console.log(`RCS delivered. Message ID: ${result.messageId}`);
}You can also track fallback messages in the analytics dashboard — filter by status to see which recipients received fallback messages. This is useful for understanding your audience's RCS adoption rate over time — as more recipients upgrade devices and carriers expand RCS coverage, the proportion of fallbacks will shrink naturally.
Frequently Asked Questions
Do I get charged for both the RCS message and the fallback?
No. If a fallback is sent, you're charged only the SMS or MMS rate for the fallback — the RCS message is not charged. If RCS is delivered, you're charged only the RCS rate.
What if I don't include a fallback?
Recipients whose devices don't support RCS don't receive the message. Pinnacle will fire a MESSAGE.STATUS webhook with a status of SEND_FAILED or DELIVERY_FAILED, so you'll know it didn't land — but by then the moment has passed. For any use case where reaching all recipients matters, always include a fallback.
Can the fallback be a different message from the RCS content?
Yes, and it often should be. The fallback text and mediaUrls are completely independent of the RCS card content. Write a fallback that works well as a standalone SMS — not a stripped-down version of the RCS copy.
Does the fallback number need to be registered for compliance?
Yes. The fallback from number must be attached to an active 10DLC or toll-free campaign. Unregistered numbers will have their fallback messages filtered by carriers.
Can I use fallback with RCS quick replies?
Yes. Any RCS message type — text, cards, or quick replies — can have a fallback defined. The fallback fires whenever the recipient doesn't support RCS, regardless of the RCS message structure.
How do I know which recipients support RCS before sending?
Pinnacle's get_rcs_capabilities endpoint lets you check RCS support for specific phone numbers. For production campaigns, the fallback system is the recommended approach — it handles capability checking automatically, without a separate lookup step.
Key Takeaways
- One send call, universal delivery: Define a fallback and Pinnacle routes RCS to capable devices, SMS/MMS to everyone else automatically
- Fallback billing: If fallback fires, you pay the SMS/MMS rate — the RCS message is not charged
- MMS fallback: Include
mediaUrlsin the fallback object to send MMS instead of plain SMS - Works for blasts too:
blast_rcswith a fallback reaches your entire audience regardless of device support - Fallback sender requirements: Must be a registered 10DLC or toll-free number — same compliance requirements as any A2P send
FALLBACK_SENTstatus: Filter your message list to track fallback rates and monitor RCS adoption across your audience
Get Started
Add a fallback object to your next send_rcs or blast_rcs call. For the full API reference, see the Send RCS endpoint and Blast RCS endpoint.
Not yet on Pinnacle? Sign up and subscribe to a plan. Questions about RCS fallback configuration or compliance? Get in touch.
