RCS Business Messaging
Preview
REST

Send Message

Send text, standalone rich cards, carousels, and suggested actions over RCS. Track delivery with GET /v1/rcs/status/:messageId and optional SMS fallback when RCS is unavailable.

Four payload types

text, richCard, carousel, and suggestedActions on a single send endpoint

Ghana number formatting

Accepts 024… / 055… / 233… and normalises to E.164 for routing

SMS fallback

Automatic degradation when the handset or network cannot accept RCS

Status + webhooks

Poll GET /v1/rcs/status/:messageId or subscribe to real-time events

Avg response

180ms

p95 accept time

Indicative cost

₵0.04+

RCS unit; SMS fallback extra if used

Max text length

3,072

characters (RCS text body)

Rate limit

80/s

per API key

POST
/v1/rcs/send
Core
Preview

Request body

application/json
JSON
{
"to": "0555539152",
"agentId": "AGT-SENDXA-GH",
"type": "text",
"text": {
"body": "Hi Kofi — GHS 1,250.00 was credited to your wallet. Available balance: GHS 3,480.50. Ref: TXN-GH-88421."
},
"suggestions": [
{
"type": "reply",
"text": "View balance",
"postbackData": "balance"
},
{
"type": "openUrl",
"text": "Open app",
"url": "https://app.sendexa.co/wallet"
},
{
"type": "dial",
"text": "Call support",
"phoneNumber": "+233302555010"
}
],
"fallback": {
"enabled": true,
"channel": "sms",
"from": "Sendexa",
"message": "GHS 1,250.00 credited. Bal: GHS 3,480.50. Ref: TXN-GH-88421"
},
"reference": "wallet-credit-88421",
"ttlSeconds": 86400
}

Suggestions are optional on text messages. Up to 11 chips may be shown depending on the client; keep labels ≤ 25 characters.

Top-level fields

FieldTypeRequiredDescription
tostring
required
Recipient MSISDN (Ghana local or international).
agentIdstring
required
Approved RCS agent identifier.
typestring
required
text | richCard | carousel | suggestedActions
textobjectoptionalRequired when type is text or suggestedActions.
richCardobjectoptionalRequired when type is richCard.
carouselobjectoptionalRequired when type is carousel.
suggestionsSuggestion[]optionalChip actions: reply | openUrl | dial. Required for suggestedActions.
fallbackobjectoptionalSMS fallback configuration when RCS cannot be delivered.
referencestringoptionalYour correlation ID (max 64 chars).
ttlSecondsnumberoptionalValidity window. Default 86400 (24h).
webhookEnabledbooleanoptionalOverride account default for delivery webhooks on this message.

Response

JSON
{
"success": true,
"code": "RCS_ACCEPTED",
"message": "RCS message accepted for delivery.",
"requestId": "REQ-1782002200912",
"timestamp": "2026-07-12T10:02:00.912Z",
"data": {
"messageId": "MSG-RCS-a91f0c2e-8b44-4d11-9e20-6f3c1b0d8e77",
"channel": "rcs",
"agentId": "AGT-SENDXA-GH",
"business": {
"id": "BU-VOIF86X7",
"name": "Letcol Technologies"
},
"message": {
"to": {
"address": "233555539152",
"country": { "code": "GH", "name": "Ghana" },
"network": "MTN"
},
"type": "text",
"reference": "wallet-credit-88421"
},
"delivery": {
"status": "QUEUED",
"rcsCapable": null,
"fallback": {
"enabled": true,
"channel": "sms",
"triggered": false
},
"submittedAt": "2026-07-12T10:02:00.912Z",
"expiresAt": "2026-07-13T10:02:00.912Z"
},
"billing": {
"units": 1,
"pricing": {
"unitCost": 0.04,
"totalCost": 0.04,
"currency": "USD"
}
}
}
}

Try it yourself

POST
https://api.sendexa.co/v1/rcs/send

Code examples

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": "0555539152",
"agentId": "AGT-SENDXA-GH",
"type": "text",
"text": { "body": "Hello from Sendexa RCS!" },
"fallback": {
"enabled": true,
"channel": "sms",
"from": "Sendexa",
"message": "Hello from Sendexa (SMS fallback)."
}
}'

HTTP status codes

CodeStatusDescription
200OKMessage accepted or status returned
400Bad RequestInvalid phone, type, card, or carousel payload
401UnauthorizedInvalid or missing Basic Auth token
403ForbiddenAgent not approved, RCS disabled, or insufficient credits
404Not FoundmessageId not found on status lookup
429Too Many RequestsRate limit exceeded (80 requests/second)
GET
/v1/rcs/status/:messageId
Tracking

Poll delivery state, RCS capability, fallback channel, timestamps, and structured error details. Prefer webhooks for production; use this endpoint for reconciliation and support tooling.

Path parameters

FieldTypeRequiredDescription
messageIdstring
required
ID returned from POST /v1/rcs/send (e.g. MSG-RCS-…).

Query parameters

FieldTypeRequiredDescription
includeHistorybooleanoptionalInclude full status history timeline. Default false.
webhookStatusbooleanoptionalInclude last webhook delivery attempt info. Default false.

Message lifecycle

queued

10:02:00

sent

10:02:01

delivered

10:02:04

Status response

JSON
{
"success": true,
"data": {
"messageId": "MSG-RCS-a91f0c2e-8b44-4d11-9e20-6f3c1b0d8e77",
"status": "read",
"channel": "rcs",
"agentId": "AGT-SENDXA-GH",
"recipient": "233555539152",
"type": "text",
"reference": "wallet-credit-88421",
"rcsCapable": true,
"submittedAt": "2026-07-12T10:02:00.912Z",
"sentAt": "2026-07-12T10:02:01.200Z",
"deliveredAt": "2026-07-12T10:02:04.010Z",
"readAt": "2026-07-12T10:03:18.440Z",
"lastUpdatedAt": "2026-07-12T10:03:18.440Z",
"errorCode": null,
"errorMessage": null,
"network": "MTN",
"fallback": {
"enabled": true,
"triggered": false
}
}
}

Delivery status legend

queued

Accepted by Sendexa; waiting for RCS route

sent

Submitted to RCS network / carrier path

delivered

Delivered to the device messaging app

read

User opened the conversation (when available)

failed

Terminal failure — see errorCode / fallback state

Error code reference

CodeMessageResolution
INVALID_PHONEInvalid destination numberNormalise to local or E.164 Ghana format
AGENT_NOT_APPROVEDAgent not ready for trafficComplete agent verification
RCS_UNREACHABLENo RCS path and no fallbackEnable SMS fallback for critical traffic
MEDIA_FETCH_FAILEDCould not fetch media URLUse public HTTPS CDN URLs
INSUFFICIENT_CREDITSBalance too lowTop up account balance
TTL_EXPIREDMessage expired before deliveryResend with higher ttlSeconds

Status code examples

Bash
curl -X GET 'https://api.sendexa.co/v1/rcs/status/MSG-RCS-a91f0c2e-8b44-4d11-9e20-6f3c1b0d8e77?includeHistory=true' \
-H 'Authorization: Basic YOUR_DASHBOARD_BASE64_TOKEN'

Common use cases (Ghana / Africa)

OTP

Two-factor authentication

Send codes as RCS text with SMS fallback so login never fails on non-RCS devices.

Payments

Wallet & MoMo alerts

Branded credit/debit receipts with openUrl to statements and dial for support.

Commerce

Catalogues & promos

Carousel of products with Buy links — ideal for retail and marketplace campaigns.