RCS Business Messaging
Preview
REST

RCS Business Messaging API

Send verified, branded rich messages over RCS — text, rich cards, carousels, and suggested actions — with automatic SMS fallback when RCS is unavailable. Designed for high-trust notifications and interactive journeys in Ghana and across Africa.

Verified Brand Agent

Messages appear under your approved RCS agent with logo, brand name, and verification badge in the default SMS app.

Rich Cards & Carousels

Standalone cards and multi-card carousels with images, titles, descriptions, and tappable suggestions.

Suggested Actions

In-thread reply chips, openUrl, and dial actions — no app install required for the end user.

SMS Fallback

When a handset is not RCS-capable, automatically degrade to SMS so every customer still gets the message.

Read Receipts

Track queued → sent → delivered → read with webhooks and the status API — similar to WhatsApp, over the native messaging app.

Native Messaging App

Delivers in Google Messages / carrier RCS clients. Ideal for banks, fintechs, telcos, and retail across Ghana and Africa.

Avg API Latency

~180ms

p95 accept time

Message Types

4

text · richCard · carousel · actions

Rate Limit

80/s

per API key (burst)

Webhook Events

5

delivery + engagement

Quick Start

Send a branded RCS text message to a Ghana MSISDN. Local formats like 024XXXXXXX / 055XXXXXXX are normalised to 233… automatically.

Bash
curl -X POST 'https://api.sendexa.co/v1/rcs/send' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_DASHBOARD_BASE64_TOKEN' \
-d '{
"to": "0244123456",
"agentId": "AGT-SENDXA-GH",
"type": "text",
"text": {
"body": "Hi Ama — your GHS 250.00 payment to Accra Mart was successful. Ref: TXN-78421."
},
"fallback": {
"enabled": true,
"channel": "sms",
"from": "Sendexa",
"message": "Hi Ama — payment of GHS 250.00 to Accra Mart succeeded. Ref: TXN-78421."
}
}'

Success response

JSON
{
"success": true,
"code": "RCS_ACCEPTED",
"message": "RCS message accepted for delivery.",
"requestId": "REQ-1782001100451",
"timestamp": "2026-07-12T09:15:10.451Z",
"data": {
"messageId": "MSG-RCS-7c2a91f0-4e1b-4d88-9c3a-1f8e0b2d4a11",
"channel": "rcs",
"agentId": "AGT-SENDXA-GH",
"message": {
"to": {
"address": "233244123456",
"country": { "code": "GH", "name": "Ghana" },
"network": "MTN"
},
"type": "text"
},
"delivery": {
"status": "QUEUED",
"rcsCapable": null,
"fallback": {
"enabled": true,
"channel": "sms",
"triggered": false
},
"submittedAt": "2026-07-12T09:15:10.451Z"
},
"billing": {
"units": 1,
"pricing": {
"unitCost": 0.04,
"totalCost": 0.04,
"currency": "USD",
"note": "RCS charged; SMS fallback billed only if triggered"
}
}
}
}
Message Types
Text
text

Plain RCS text up to 3,072 characters with optional suggested replies/actions. Best for OTPs, alerts, and confirmations.

Standalone Rich Card
richCard

Single card with media (SHORT | MEDIUM | TALL), title, description, and up to 4 suggestions. Ideal for product offers and receipts.

Carousel
carousel

2–10 horizontally scrollable cards. Great for catalogues, loan options, or multi-product promos.

Suggested Actions
suggestedActions

Attach reply, openUrl, or dial chips to any text or card so users can act without leaving the thread.

RCS Agent Concepts

An RCS agent is your brand identity on the RCS network — similar to a WhatsApp Business profile or an SMS sender ID, but with a logo, description, contact details, and verification state. You send with an agentId returned after registration.

ConceptDescription
Agent IDUnique identifier (e.g. AGT-SENDXA-GH) used in every send request.
Display nameBrand name shown above the conversation (e.g. “Sendexa”, “GCB Bank”).
Logo & brand colourShown in the messaging app contact header once the agent is verified.
VerificationCarrier / Google RBM review. Only approved agents may send production traffic.
Use casesTransactional (OTP, payments), promotional (offers), conversational (support).
CoverageDepends on handset RCS capability and carrier support (MTN, Telecel, AirtelTigo, etc.).
Automatic SMS Fallback

Not every handset is RCS-capable. When fallback is enabled, Sendexa attempts RCS first. If the device or network cannot accept RCS, the message is automatically delivered as SMS using your approved sender ID — so banks, fintechs, and e-commerce brands never drop a critical notification.

  • Fallback only bills the SMS unit when it is actually triggered.
  • Status responses and webhooks indicate channel: "rcs" or channel: "sms".
  • Provide a concise SMS body — rich card media cannot be reproduced over SMS.
  • SMS sender ID rules still apply (3–11 alphanumeric, pre-approved).
Delivery Lifecycle
StatusMeaningTypical next step
queuedAccepted by Sendexa, waiting for RCS routeNormal — wait for webhook
sentSubmitted to RCS / carrier pathAwait delivered / fallback
deliveredReached the handset messaging appOptional: track read
readUser opened the conversation (when available)Engagement success
failedUndeliverable; see error codeInspect error; consider SMS-only retry
Common Error Codes
HTTPCodeCause
400INVALID_PHONEMSISDN format not recognised
400INVALID_MESSAGE_TYPEtype must be text | richCard | carousel | suggestedActions
400INVALID_RICH_CARDMissing title/media or too many suggestions
400INVALID_CAROUSELCarousel must contain 2–10 cards
401UNAUTHORIZEDMissing or invalid Basic Auth token
403AGENT_NOT_APPROVEDRCS agent pending, suspended, or not linked to business
403RCS_NOT_ENABLEDProduct not enabled for this account
403INSUFFICIENT_CREDITSBalance too low for RCS (and fallback if required)
404MESSAGE_NOT_FOUNDUnknown messageId on status lookup
429RATE_LIMIT_EXCEEDEDExceeded 80 req/s — use exponential backoff