RCS

Bird RCS is the RCS Business Messaging API for developers. Rich cards, suggested replies, branded sender, read receipts — and a one-attribute fallback to SMS for the carriers that don't support it yet.

Concept

RCS is what SMS would look like if it were designed in this decade: rich cards with images and buttons, typing indicators, read receipts, a verified sender brand. The carrier coverage is uneven (full US T-Mobile / Verizon / AT&T support, full Brazil, partial EU / APAC through 2026), so every send accepts a fallback: "sms" attribute — when RCS isn't available, the same request ships as SMS without a second integration.

Quickstart

import { BirdClient } from "@bird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

const { data, error } = await bird.rcs.send({
  to: "+15005550006",
  from: "BirdShop",
  card: {
    title: "Your order is on its way",
    description: "Order #1024 — arriving Friday by 6pm.",
    media_url: "https://shop.example.com/orders/1024/preview.jpg",
    suggestions: [
      { type: "open_url", text: "Track order", url: "https://shop.example.com/orders/1024" },
      { type: "reply", text: "Reschedule", postback: "reschedule:1024" },
      { type: "dial", text: "Call support", number: "+18005550100" },
    ],
  },
  fallback: "sms",
});

if (error) throw error;
console.log(data.id, data.fell_back_to_sms);

If the recipient's device isn't on a carrier with RCS support, fell_back_to_sms comes back true and the message is delivered as a plain SMS with the card's title + description concatenated. You pay the SMS rate, not the RCS rate, on those.

Coverage

RegionCarrier coverageStatus
United StatesT-Mobile, Verizon, AT&TLive
BrazilVivo, Claro, TIM, OiLive
MexicoTelcel, MovistarLive
United KingdomEE, Vodafone, Three, O2Live
FranceOrange, SFR, BouyguesLive
SpainMovistar, Vodafone, OrangeLive
GermanyDeutsche Telekom, VodafoneLive
IndiaJio, Airtel, ViBeta
IndonesiaTelkomsel, IndosatBeta
Other marketsThrough 2026; SMS fallback handles the gap

We update the matrix monthly. The lookup.line_type field also surfaces RCS capability when known.

Session-window semantics

RCS messages from a business to a user don't require a session window the way WhatsApp templates do — outbound transactional messages send freely, governed by per-carrier rate limits. Inbound replies (from the user back to your business number) open a 24-hour conversation window in which free-form responses are allowed; outside that window the brand can still send templates and notifications.

Fallback to SMS

fallback: "sms" is the one-attribute migration path off SMS-only. The request is unchanged; we route to RCS when we can and SMS when we can't, billed accordingly. Disable it by omitting the field; you'll get route_unavailable on uncovered carriers instead.

Events

rcs.queued      rcs.sent       rcs.delivered    rcs.read
rcs.failed      rcs.inbound    rcs.suggestion_pressed

rcs.suggestion_pressed carries the postback string from the original card — that's how you wire the "Reschedule" reply back into your app without a second integration.

Pricing

From $0.005 per RCS message + carrier fees. SMS fallbacks bill at the SMS rate for that country. See pricing for the full grid.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Get startedRead docsor

Using Claude Code, Cursor, or Codex? Point it at our MCP server — 141 tools, one per API endpoint, with scoped agent keys.