Skip to main content
RCS is SMS with superpowers: when the device and carrier support it, you send images, buttons, and carousels, still to a phone number.

What is RCS on Notifique?

It’s the channel for rich mobile messages (Rich Communication Services). The destination is still an international phone number (E.164, no +), like SMS, but content can go beyond plain text. You can:
  • Send text (BASIC), image cards with buttons (CARD), carousels (CAROUSEL), or files via URL (FILE)
  • Dispatch to 1 to 500 numbers per call (one message per number)
  • Use branded agents via RCS instances — logo, name, and your brand sender
  • Schedule sends for a future date and time
  • Query status of each send by id
  • Receive replies (MO) and link them to the original outbound
  • Cancel while queued or scheduled
  • Track short-link or button clicks via webhook
Think of a digital flyer in the pocket: more visual than SMS, but only reaches RCS-capable networks.

Sender: shared or instance

On send, pass from to use a specific agent. If omitted, the platform uses the workspace default instance (if ACTIVE) or the shared sender.
Create and provision instances: RCS instances guide. List agents: GET /v1/rcs/instances.

When to use it?

Works great for campaigns with images and buttons, promotional alerts, and better conversion than plain SMS for RCS-capable recipients. For OTP that must reach any phone, prefer SMS. Not every device delivers RCS; have a plan B (SMS, WhatsApp, or email) when delivery must be guaranteed.

Message types

  • BASIC — text only (payload.message)
  • CARD — image, title, description, and buttons (cardImage, cardTitle, cardMessage, buttons)
  • CAROUSEL — multiple cards in one message (payload.cards[])
  • FILE — file via public URL + name (file, fileName, message)
On CARD and CAROUSEL, payload.message is not shown to the recipient. Use cardMessage on each card for descriptive text.
Field details and examples: API reference on the RCS tab (playground with text, card, 3-card carousel, file, and template examples).

How it works in practice

  1. Create an API Key with rcs:send (and rcs:read / rcs:cancel to query or cancel)
  2. (Optional) Provision an RCS agent and wait for ACTIVE status
  3. Send with POST /v1/rcs/messages, to as an array, type, payload, and from (agent id or name) when applicable
  4. The platform queues, sends, and updates status; your backend gets alerts if you configured webhooks
Each API Key belongs to one workspace. On v1 do not send x-workspace-id.

Message lifecycle

After send, RCS moves through statuses like QUEUED, SCHEDULED, PROCESSING, SENT, DELIVERED, READ, CLICKED, RESPONDED, FAILED, or CANCELLED. API cancellation works while status is QUEUED or SCHEDULED.
POST /v1/rcs/messages returns 202 with messageIds and status — it does not echo the payload. To see what was sent, use GET /v1/rcs/messages/:id or GET /v1/rcs/messages (each item includes payload, messageType, and refer).
With short links enabled, the first click on a clicar.co link from the send may mark CLICKED, webhook rcs.clicked.

Inbound replies

Query MO messages with GET /v1/rcs/inbound. When a customer replies to your send, the inbound may include relatedRcsLogId and, in detail, relatedRcsLog with the same detail level as GET /v1/rcs/messages/:id (status, payload, messageType, and timestamps).

What you can do

  • Send to 1 to 500 numbers per call (140 BASIC credits; 200 CARD/CAROUSEL/FILE)
  • Schedule with schedule.sendAt
  • Query one send by returned id
  • List history with status, destination, and date filters
  • Cancel while queued or scheduled
  • Idempotency with Idempotency-Key header
  • Per-send webhook in options.webhook (that batch only)
See Billing. Error details: API reference on the RCS tab.

Localization and variables

  • localization and i18n translate RCS card/text content per contact language.
  • The 202 response may include data.localization.
Full guide: Localization and i18n.

After your first send

  • Track delivery, clicks, and failures via webhooks (rcs.sent, rcs.delivered, rcs.clicked, rcs.failed)
  • Handle FAILED with SMS or another channel when the network does not deliver RCS
  • Test in Sandbox with sk_test_... before production

Next steps