REST API

RCS Messaging API — Rich Business Messaging | BulkSMS.ca

REST API for RCS (Rich Communication Services) messaging. Send rich media, carousel messages, interactive buttons, and verified branded messages.

Base URL: https://api.bulksms.ca

What is the RCS Messaging API?

The RCS Messaging API enables businesses to send Rich Communication Services messages with rich media, interactive buttons, carousels, and verified sender profiles. Unlike SMS, RCS supports images, video, read receipts, typing indicators, and up to 8,000 characters. The API uses REST endpoints with API key authentication and returns JSON responses with delivery status, read receipts, and engagement analytics.

Authentication

Authorization Header
Authorization: Bearer YOUR_API_KEY Content-Type: application/json

Include your API key in the Authorization header of every request. API keys are available in your BulkSMS.ca dashboard under Settings > API Keys.

API Endpoints

POST/v2/rcs/send

Send a basic RCS text message.

Auth: API Key
Request Body
{ "to": "9198XXXXXXXX", "message": "Hello! Check out our new collection.", "sender_brand": "MyBrand" }
Response (200 OK)
{ "status": "success", "message_id": "rcs_msg_001", "to": "9198XXXXXXXX" }
POST/v2/rcs/send-rich

Send RCS message with image and buttons.

Auth: API Key
Request Body
{ "to": "9198XXXXXXXX", "message": "Check out our summer sale!", "media": { "type": "image", "url": "https://example.com/sale.jpg" }, "buttons": [ { "type": "url", "title": "Shop Now", "url": "https://shop.com" }, { "type": "reply", "title": "Learn More" } ] }
Response (200 OK)
{ "status": "success", "message_id": "rcs_msg_002" }
POST/v2/rcs/send-carousel

Send a carousel message with multiple cards.

Auth: API Key
Request Body
{ "to": "9198XXXXXXXX", "cards": [ { "title": "Product 1", "description": "₹999", "image": "https://example.com/p1.jpg", "buttons": [{ "type": "url", "title": "Buy", "url": "https://shop.com/p1" }] }, { "title": "Product 2", "description": "₹1,499", "image": "https://example.com/p2.jpg", "buttons": [{ "type": "url", "title": "Buy", "url": "https://shop.com/p2" }] } ] }
Response (200 OK)
{ "status": "success", "message_id": "rcs_msg_003" }
GET/v2/rcs/status/{message_id}

Get RCS message delivery and read status.

Auth: API Key
Response (200 OK)
{ "message_id": "rcs_msg_001", "to": "9198XXXXXXXX", "delivery_status": "delivered", "read_status": "read", "read_at": "2026-06-15T14:32:00+05:30" }
GET/v2/rcs/analytics/{message_id}

Get engagement analytics for an RCS message.

Auth: API Key
Response (200 OK)
{ "message_id": "rcs_msg_001", "delivered": 1, "read": 1, "button_clicks": 2, "media_viewed": true }

SDK Code Examples

cURL
curl (built-in)
curl -X POST https://api.bulksms.ca/v2/rcs/send-rich \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "9198XXXXXXXX",
    "message": "Summer Sale is live!",
    "media": {"type": "image", "url": "https://example.com/sale.jpg"},
    "buttons": [{"type": "url", "title": "Shop Now", "url": "https://shop.com"}]
  }'
Node.js
npm install axios
const axios = require('axios');

await axios.post('https://api.bulksms.ca/v2/rcs/send-rich', {
  to: '9198XXXXXXXX',
  message: 'Summer Sale is live!',
  media: { type: 'image', url: 'https://example.com/sale.jpg' },
  buttons: [{ type: 'url', title: 'Shop Now', url: 'https://shop.com' }]
}, { headers: { Authorization: 'Bearer YOUR_API_KEY' }});
Python
pip install requests
import requests

response = requests.post("https://api.bulksms.ca/v2/rcs/send-rich",
  headers={"Authorization": "Bearer YOUR_API_KEY"},
  json={
    "to": "9198XXXXXXXX",
    "message": "Summer Sale is live!",
    "media": {"type": "image", "url": "https://example.com/sale.jpg"},
    "buttons": [{"type": "url", "title": "Shop Now", "url": "https://shop.com"}]
  }
)
print(response.json())
PHP
composer require guzzlehttp/guzzle
$client = new GuzzleHttp\Client();
$response = $client->post('https://api.bulksms.ca/v2/rcs/send-rich', [
  'headers' => ['Authorization' => 'Bearer YOUR_API_KEY'],
  'json' => [
    'to' => '9198XXXXXXXX',
    'message' => 'Summer Sale is live!',
    'media' => ['type' => 'image', 'url' => 'https://example.com/sale.jpg'],
    'buttons' => [['type' => 'url', 'title' => 'Shop Now', 'url' => 'https://shop.com']]
  ]
]);

Webhooks

Configure webhooks in your dashboard to receive real-time event notifications.

Supported Events

rcs.deliveredrcs.readrcs.button.clickedrcs.failedrcs.media.viewed
Webhook Payload Example
{
  "event": "rcs.button.clicked",
  "message_id": "rcs_msg_002",
  "to": "9198XXXXXXXX",
  "button_id": "btn_001",
  "button_title": "Shop Now",
  "timestamp": "2026-06-15T14:35:00+05:30"
}

Error Codes

Code
Description
200
Success — RCS message sent
400
Bad Request — Invalid message format
401
Unauthorized — Invalid API key
403
Forbidden — RCS not enabled for account
404
Not Found — Message or brand ID not found
470
RCS Not Supported — Device or carrier does not support RCS
500
Server Error — RCS carrier issue

FAQs

What is RCS messaging?

RCS (Rich Communication Services) is the next-generation messaging standard that replaces SMS with rich, interactive experiences. It supports media, buttons, carousels, and verified branding within the native messaging app.

Which devices support RCS?

RCS is supported on Android devices with Google Messages and select carrier messaging apps. iOS support is coming soon. RCS availability depends on the carrier.

How is RCS different from WhatsApp?

RCS works within the native messaging app without requiring app installation. Unlike WhatsApp, it does not require an internet connection for delivery (uses carrier network). RCS also does not require opt-in for business messages.

What is a verified sender profile?

A verified sender profile displays your business name, logo, and verification badge in the messaging app, building trust with recipients.

Can I send carousel messages via RCS?

Yes, the RCS API supports carousel messages that display multiple products or options in a horizontally scrollable format with images and action buttons.

Ready to Integrate?

Get your API key and start building.

All APIs