Coming Soon

RCS Business Messaging — le grand frère stylé du SMS.

Cartes enrichies, réponses suggérées, expéditeur brandé, accusés de lecture. Repli vers SMS en un seul attribut. Même authentification, même idempotence, mêmes webhooks que tous les autres canaux Bird — car la même équipe d'ingénierie les a tous construits.

rcs.ts
200 · 0.6s
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.rcs.send({
  to:   "+15005550006",
  card: {
    title:    "Your order has shipped",
    subtitle: "Arriving Friday, May 22",
    image:    "https://cdn.example.com/orders/2891.jpg",
    buttons: [
      { type: "url",   label: "Track package", url: "https://example.com/track/2891" },
      { type: "reply", label: "Reschedule",    postback: "reschedule_2891" },
    ],
  },
  fallback: "sms",
}).safe();

if (error) throw error;
console.log(data.id);
// → "rcs_4mP82wQ9..."

5 minutes entre npm install et le premier envoi

Envoyez un message enrichi depuis le langage que vous utilisez déjà.

SDK dans tous les principaux environnements d'exécution. Le premier envoi est dirigé vers le numéro de test approuvé (+15005550006) et bascule automatiquement en SMS — votre CI n'a pas besoin d'un terminal compatible RCS.

1
2
3
4
5
6
7
8
9
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.rcs.send({
  to:   "+15005550006",
  card: { title: "Hello", subtitle: "From Bird RCS" },
  fallback: "sms",
}).safe();

Dix primitives entre « text » et une vraie surface applicative.

RCS est un protocole plus riche que SMS. Nous exposons cette richesse sous forme de primitives, pas sous forme de canevas de design.

  1. 01

    Cartes enrichies

    Titre, sous-titre, image principale et jusqu'à 4 actions par carte. Carrousel de 10 cartes maximum dans un seul message.

  2. 02

    Réponses suggérées

    Des pastilles tap-to-reply qui renvoient une chaîne connue à votre webhook. Pas de devinette NLU de votre côté.

  3. 03

    Expéditeur brandé

    Identité d'entreprise vérifiée avec logo, couleur et description courte dans l'en-tête de conversation du terminal.

  4. 04

    Accusés de lecture et indicateur de saisie

    États de livraison, de lecture et « en train d'écrire » sous forme de webhooks — le même format d'enveloppe que tous les autres canaux.

  5. 05

    Repli vers SMS en un seul attribut

    Passez fallback: "sms". Si le terminal n'est pas compatible RCS, nous envoyons la variante texte de manière transparente.

  6. 06

    Postbacks interactifs

    Les clics sur les boutons reviennent sous forme d'événements rcs.replied avec la chaîne de postback que vous avez définie. À connecter à une machine à états.

  7. 07

    Pièces jointes média

    Images, vidéo jusqu'à 100 Mo, audio, PDF, vCard. Nous hébergeons le fichier et servons une URL signée avec TTL.

  8. 08

    Conversation bidirectionnelle

    Les réponses entrantes des utilisateurs arrivent sous forme de webhooks signés HMAC. Même format que les SMS et WhatsApp entrants.

  9. 09

    Filtrage opérateur et terminal

    Nous vérifions la compatibilité RCS avant l'envoi. Si le terminal est hors ligne ou non compatible RCS, nous basculons automatiquement.

  10. 10

    Même authentification, même enveloppe d'erreur

    Une seule clé API pour RCS, SMS, Email, WhatsApp, Voice. Un seul registre de types d'erreur pour tous.

Why we build RCS

Parce qu'en 2026, le canal le moins cher et le plus riche devraient être le même envoi.

Les terminaux RCS reçoivent une carte enrichie ; tous les autres reçoivent la variante SMS générée à partir du même payload. Nous exploitons le SMS depuis dix ans via 240 connexions directes aux opérateurs ; RCS utilise la même couche de routage avec un type de payload plus riche et un flag de repli. Honnêteté sur la couverture : aujourd'hui, RCS atteint les opérateurs américains (T-Mobile, Verizon, AT&T) et le Brésil ; l'UE et l'APAC s'étendent au cours de 2026. En dehors de cette empreinte, le flag de repli fait le travail.

rcs.ts
200 · 0.6s
import { BirdClient } from "@bird/sdk";

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

const { data, error } = await bird.rcs.send({
  to:   "+15005550006",
  card: {
    title:    "Your order has shipped",
    subtitle: "Arriving Friday, May 22",
    image:    "https://cdn.example.com/orders/2891.jpg",
    buttons: [
      { type: "url",   label: "Track package", url: "https://example.com/track/2891" },
      { type: "reply", label: "Reschedule",    postback: "reschedule_2891" },
    ],
  },
  fallback: "sms",
}).safe();

if (error) throw error;
console.log(data.id);
// → "rcs_4mP82wQ9..."

Chaque changement d'état est un webhook.

Payloads signés HMAC, protégés contre le rejeu, idempotents. La même enveloppe sur chaque canal Bird — apprenez-en un, vous les connaissez tous.

POST /webhooks/bird
signed
{
  "type": "rcs.delivered",
  "id":   "evt_7nT91x...",
  "created_at": "2026-05-19T15:42:01.221Z",
  "data": {
    "rcs_id":     "rcs_4mP82wQ9",
    "to":         "+15005550006",
    "carrier":    "T-Mobile USA",
    "rich":       true,
    "latency_ms": 612
  }
}

Calendrier de réessai : 5s, 30s, 5m, 30m, 2h, 6h, 12h. Mise en dead-letter après la dernière tentative ; chaque événement en dead-letter peut être rejoué depuis le tableau de bord ou l'API.

  • rcs.queuedAccepté par l'API et mis en file d'attente pour l'envoi.
  • rcs.sentTransmis à la passerelle RBM de l'opérateur.
  • rcs.deliveredLe terminal a confirmé la réception du message enrichi.
  • rcs.readLe destinataire a lu le message (si les accusés de lecture sont activés).
  • rcs.repliedL'utilisateur a appuyé sur une pastille de réponse suggérée ou envoyé une réponse libre.
  • rcs.fellbackLe terminal n'était pas compatible RCS ; la variante SMS a été envoyée à la place.
  • rcs.failedÉchec permanent avant l'envoi (destinataire invalide, rejet opérateur).

Si vous avez intégré le SMS, vous avez intégré le RCS.

Même authentification, même contrat d'idempotence, même enveloppe d'erreur, même format de webhook. La différence est le payload — pas la façon de l'appeler.

RCS.

rcs
await bird.rcs.send({
  to:       "+15005550006",
  card:     { title: "Your code", subtitle: `Code: ${code}` },
  fallback: "sms",
});

Une vraie carte sur les terminaux compatibles RCS. En dehors de la couverture, le flag de repli route le même payload par SMS.

SMS.

sms
await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your code is ${code}.`,
});

Adressez directement le canal SMS quand vous le souhaitez explicitement. Même authentification, mêmes webhooks, même idempotence.

À partir de 0,005 $ par message + frais opérateur.

Facturation par message RCS délivré. Les frais opérateur de message enrichi sont refacturés à l'identique et détaillés ligne par ligne sur la facture. Les SMS de repli sont facturés au tarif SMS du pays de destination. Pas de frais de plateforme, pas de frais par utilisateur.

Commencez avec un seul canal.
Ajoutez les autres quand vous êtes prêt.

Une clé API de test est disponible immédiatement. L'accès production se débloque dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

CommencerLire la docou

Using Claude Code, Cursor, or Codex? Point it at our MCP server — tools for every channel we expose, with scoped agent keys.

Cursor