Skip to main content

Message types and samples

Please see Messaging API for the full API reference.

Text Message

Content: Text only

Character Limit: Up to 3072 characters

Use Cases: OTP codes, simple alerts

Payload sample

{
"user": {
"msisdn": "+10000000000"
},
"type": "Text",
"content": {
"text": ":wave: Hi Sarah! Just a reminder—your appointment at Wellness Dental is scheduled for tomorrow at 10:30 AM"
}
}

The corresponding message the user will receive:

Text message example


Sending a Rich Media Message

  • Media Types Supported: Images, videos, documents
  • File formats: .ogx, .pdf, .aac, .mp3, .mpeg, .mp3, .mp4, .mp4, .3gp, .jpeg, .jpg, .gif, .png, .h263, .m4v, .mp4, .mp4, .mpeg, .webm
  • Text Caption: Up to 2,000 UTF-8 characters
  • File Size Limits: 100MB
  • File URL limit: 2,048 characters

Image & text

{
"user": {
"msisdn": "+10000000000"
},
"type": "Image",
"content": {
"url": "https://www.example.com/image.jpg",
"text": "Hi James! Your order #ORD-8821 has shipped and is on its way. Estimated delivery: tomorrow by 6 PM."
}
}

The corresponding message the user will receive:

Image and text message example


Video & text

{
"user": {
"msisdn": "+10000000000"
},
"type": "Video",
"content": {
"url": "https://www.example.com/video.mp4",
"text": "Hi Emma! Your account setup guide is ready. Watch this short video to get started in minutes."
}
}

The corresponding message the user will receive:

Video and text message example


Audio & text

{
"user": {
"msisdn": "+10000000000"
},
"type": "Audio",
"content": {
"url": "https://www.example.com/audio.mp3",
"text": "Hi Alex! You have a new voice message from our support team regarding your recent request."
}
}

The corresponding message the user will receive:

Audio and text message example


File & text

{
"user": {
"msisdn": "+10000000000"
},
"type": "Text",
"content": {
"url": "https://example.com/links/Invoice-october-2025.pdf",
"text": "Hey John! Here's your monthly invoice for October. Contact our team if you have any questions. Thank you"
}
}

The corresponding message the user will receive:

File and text message example


Rich Card

A Rich Card bundles a title, description, a single media asset (image or video), and up to four in-card suggestions into one interactive message. Use rich cards for product promotions, appointment confirmations, order summaries, or any scenario where visual content needs to be paired with clear calls to action.

Content: Title + description + media + in-card suggestions + optional message-level suggestions

Card Orientation: vertical or horizontal

Media Height (vertical cards only): SHORT, MEDIUM, or TALL

Use Cases: Product showcase, booking confirmation, loyalty reward, order summary

Rich Card — Vertical

A vertical card displays the media at the top, followed by the title, description, and in-card suggestions. Use MEDIUM or TALL media height when the image is the primary content; use SHORT when the text is the primary content.

Payload sample

{
"user": {
"msisdn": "+441234567890"
},
"type": "RichCard",
"content": {
"richCard": {
"cardOrientation": "vertical",
"title": "Hey Melissa! New year, new shoes? 👟",
"description": "Check out our latest arrivals, including the AirPulse, perfect for your next run! Plus, get a free gait analysis with any purchase this week.",
"media": {
"height": "SHORT",
"contentInfo": {
"fileUrl": "https://www.example.com/rich_card_vertical.jpg",
"thumbnailUrl": "https://www.example.com/rich_card_vertical.jpg",
"forceRefresh": false
}
},
"suggestions": [
{
"reply": {
"text": "🛍️ View new arrivals",
"postbackData": "view_new_arrivals"
}
},
{
"reply": {
"text": "📋 Book Gait Analysis",
"postbackData": "book_gait_analysis"
}
},
{
"action": {
"text": "👗 Shop now",
"postbackData": "shop_now",
"openUrlAction": {
"url": "https://developer.8x8.com/connect/docs/rcs/message-types",
"application": "WEBVIEW",
"webviewViewMode": "FULL",
"description": "Shop Bridgepoint Runners"
},
"fallbackUrl": "https://developer.8x8.com/connect/docs/rcs/message-types"
}
}
]
},
"suggestions": [
{
"reply": {
"text": "Check my orders",
"postbackData": "check_my_orders"
}
},
{
"reply": {
"text": "Not interested",
"postbackData": "not_interested"
}
}
]
}
}

The corresponding message the user will receive:

Rich card vertical — annotated

The annotations map directly to the payload:

  • Mediacontent.richCard.media
  • Title textcontent.richCard.title
  • Description textcontent.richCard.description
  • Primary suggestionscontent.richCard.suggestions (in-card, up to 4)
  • Secondary suggestionscontent.suggestions (message-level, up to 7)

Rich Card — Horizontal

A horizontal card displays the media to the left or right of the text block. Use it when the text is the primary content and the image plays a supporting role (e.g. confirmations, itineraries, compact receipts). Horizontal cards do not use media.height — the carrier sizes the media to the text block.

Payload sample

{
"user": {
"msisdn": "+441234567890"
},
"type": "RichCard",
"content": {
"richCard": {
"thumbnailImageAlignment": "right",
"cardOrientation": "horizontal",
"title": "Your reservation at Ebi",
"description": "We're springing into action to get your table ready for 5:00 PM! 🕔 Have any questions before you arrive?",
"media": {
"contentInfo": {
"fileUrl": "https://www.example.com/rich_card_horizontal.jpg",
"thumbnailUrl": "https://www.example.com/rich_card_horizontal.jpg",
"forceRefresh": false
}
},
"suggestions": [
{
"action": {
"text": "Ebi location",
"postbackData": "ebi_location",
"viewLocationAction": {
"latLong": {
"latitude": 37.7749,
"longitude": -122.4194
},
"label": "Ebi Restaurant"
}
}
},
{
"action": {
"text": "Call us",
"postbackData": "call_ebi",
"dialAction": {
"phoneNumber": "+12025551234"
}
}
}
]
},
"suggestions": []
}
}

The corresponding message the user will receive:

Rich card horizontal — Ebi reservation

Suggestions: in-card vs. message-level

A rich card supports two separate suggestion arrays:

LocationPathLimitRenders as
In-cardcontent.richCard.suggestionsUp to 4Buttons inside the card, tied to the card content.
Message-levelcontent.suggestionsUp to 7 additionalChips below the card, for broader follow-up actions.

Together, a single message can expose up to 11 suggestions (4 in-card + 7 message-level).

Rich Card field reference

FieldTypeDescription
cardOrientationstringvertical or horizontal.
thumbnailImageAlignmentstringHorizontal cards only. left or right — positions the media relative to the text block.
titlestringCard headline. Max 200 characters.
descriptionstringSupporting body text. Max 2 000 characters.
media.heightstringSHORT, MEDIUM, or TALL. Vertical cards only.
media.contentInfo.fileUrlstring (URL)Public URL of the image or video asset.
media.contentInfo.thumbnailUrlstring (URL)Public URL of the thumbnail (used for video).
media.contentInfo.forceRefreshbooleanIf true, the carrier re-fetches the media instead of serving a cached copy.
suggestions[]arrayIn-card chips. Each entry contains either a reply or an action.

Limits

FieldLimit
Title200 characters
Description2 000 characters
In-card suggestionsUp to 4 chips
Message-level suggestionsUp to 7 chips
Media file sizeUp to 100 MB
Card payload size250 KB

Best practices

  • Keep titles short and scannable; use the description for supporting detail.
  • Pair every card with at least one suggestion so users have a clear next step.
  • Provide a fallbackUrl on every openUrlAction for clients that cannot open the webview.
  • Serve media over HTTPS from a stable, publicly reachable URL — the carrier may cache the asset.
  • Use message-level suggestions for persistent actions (e.g. "Check my orders") and keep in-card suggestions tied to the card's specific offer.

A Carousel is a horizontally swipeable collection of rich cards delivered in a single message. Use carousels to present multiple comparable items — product variants, tour packages, available appointment slots, or menu choices — so the user can browse options inline without leaving the conversation.

Each card in the carousel follows the same content model as a standalone rich card (title, description, media, in-card suggestions), but cards in a carousel share a common cardWidth and are always rendered vertically.

Content: List of 2–10 cards + optional message-level suggestions

Card Width: small or medium — applied to every card in the carousel

Use Cases: Product catalogue, tour or package selection, menu, appointment slots, booking options

Payload sample

{
"user": {
"msisdn": "+441234567890"
},
"type": "Carousel",
"content": {
"carousel": {
"cardWidth": "medium",
"cards": [
{
"title": "Catamaran day-trip",
"description": "Snorkel, sushi, & sunset cocktails. $99, 6 spots left!",
"media": {
"height": "short",
"contentInfo": {
"fileUrl": "https://www.example.com/catamaran.jpg",
"thumbnailUrl": "https://www.example.com/catamaran.jpg",
"forceRefresh": false
}
},
"suggestions": [
{
"action": {
"text": "Buy now",
"postbackData": "buy_catamaran",
"openUrlAction": {
"url": "https://developer.8x8.com/connect/docs/rcs/message-types",
"application": "WEBVIEW",
"webviewViewMode": "FULL",
"description": "Buy catamaran day-trip"
},
"fallbackUrl": "https://developer.8x8.com/connect/docs/rcs/message-types"
}
},
{
"reply": {
"text": "More details",
"postbackData": "details_catamaran"
}
}
]
},
{
"title": "Jungle ATV tour",
"description": "Explore off-road with an expert guide. $99, limited spots!",
"media": {
"height": "short",
"contentInfo": {
"fileUrl": "https://www.example.com/atv.png",
"thumbnailUrl": "https://www.example.com/atv.png",
"forceRefresh": false
}
},
"suggestions": [
{
"action": {
"text": "Buy now",
"postbackData": "buy_atv_tour",
"openUrlAction": {
"url": "https://developer.8x8.com/connect/docs/rcs/message-types",
"application": "WEBVIEW",
"webviewViewMode": "FULL",
"description": "Buy jungle ATV tour"
},
"fallbackUrl": "https://developer.8x8.com/connect/docs/rcs/message-types"
}
},
{
"reply": {
"text": "More details",
"postbackData": "details_atv_tour"
}
}
]
}
]
},
"suggestions": [
{
"reply": {
"text": "Check my orders",
"postbackData": "check_my_orders"
}
},
{
"reply": {
"text": "Not interested",
"postbackData": "not_interested"
}
}
]
}
}

The corresponding message the user will receive:

Carousel — annotated

The annotations map directly to the payload:

  • Rich card carouselcontent.carousel.cards (the swipeable cards themselves)
  • Suggestion chipscontent.suggestions (message-level, shown below the carousel)
FieldTypeDescription
cardWidthstringsmall or medium. Applies to every card in the carousel.
cards[]array2 to 10 card objects. Each card has the same shape as a standalone vertical rich card, minus cardOrientation.
cards[].titlestringCard headline. Max 200 characters.
cards[].descriptionstringCard body. Max 2 000 characters.
cards[].media.heightstringshort, medium, or tall. Applies per card.
cards[].media.contentInfo.fileUrlstring (URL)Public URL of the image or video.
cards[].media.contentInfo.thumbnailUrlstring (URL)Public URL of the thumbnail (used for video).
cards[].suggestions[]arrayIn-card chips. Up to 4 per card.
content.suggestions[]arrayMessage-level chips shown below the carousel. Up to 7.

Limits

FieldLimit
Cards per carousel2 minimum, 10 maximum
Card title200 characters
Card description2 000 characters
In-card suggestions (per card)Up to 4 chips
Message-level suggestionsUp to 7 chips
Media file size (per card)Up to 100 MB
Total payload size250 KB

Best practices

  • Keep cardWidth consistent with the content density — use small when titles and descriptions are short; use medium when you need room for longer copy or larger media.
  • Keep the number of cards manageable. 3–5 cards typically convert best; 10 cards is the absolute ceiling.
  • Lead with the most relevant card — users often only browse the first two or three before making a decision.
  • Use the same suggestion pattern on every card (e.g. "Buy now" + "More details") so users learn the pattern quickly.
  • Serve media over HTTPS from a stable, publicly reachable URL — the carrier may cache the asset.
  • Use message-level suggestions for actions that apply to the whole conversation ("Check my orders", "Not interested") rather than to a specific card.

Suggested Actions

Suggestions in RCS Business Messaging provide interactive buttons, chips, or quick replies that guide users seamlessly through rich conversational experiences. By using suggestions, brands can streamline user journeys, enhance engagement, improve conversions, and gather immediate user feedback.

Available Suggestion Types

Suggestion typeOne-line descriptionTypical brand use casesCore benefit
Suggested ReplySends a predefined text back to your agent or bot.Yes/No, choose size/colour, CSAT "👍/👎", OTP confirmation.Keeps flow structured and speeds funnel completion.
Dial a NumberOpens the dialer with a preset phone number.Escalate to live agent, click-to-call for abandoned carts, fraud alerts.Instant voice escalation builds trust and saves high-value sales.
View a LocationLaunches maps focused on a given pin or search term.Store locator, nearest ATM/locker, travel itinerary.Drives measurable footfall from messaging.
Open URL / WebviewOpens browser or in-app webview (full/half/tall).Secure checkout, product page, claim form, loyalty sign-in.Seamless upsell without forcing an app download.
Create Calendar EventPre-fills a calendar entry in the user's default calendar.Doctor appointments, flight reminders, webinar invites.Cuts no-shows by embedding reminders directly in the calendar.

Suggested actions example

Best practices

  • Limit to 4‑5 suggestions per message to avoid cognitive overload.
  • Use clear, action‑oriented labels (e.g. "Track Order" instead of "Order").
  • Always set postback data so downstream systems can act on replies.
  • Include capability fallback (SMS or URL) when the user's client does not support a given action.
  • Instrument analytics to track tap‑through and optimise suggestion wording.

Implementation Example

{
"user": {
"msisdn": "+441234567890"
},
"type": "Text",
"content": {
"text": "👋 Hi Sarah! Just a reminder—your appointment at Wellness Dental is scheduled for tomorrow at 10:30 AM",
"suggestions": [
{
"reply": {
"text": "Confirm",
"postbackData": "user_confirmed"
}
},
{
"reply": {
"text": "Reschedule",
"postbackData": "user_rescheduled"
}
},
{
"action": {
"text": "Add to Calendar",
"postbackData": "add_event_to_calendar",
"createCalendarEventAction": {
"title": "Dental Appointment",
"description": "Appointment at Wellness Dental",
"startTime": "2026-02-15T10:30:00Z",
"endTime": "2026-02-15T11:00:00Z"
}
}
},
{
"action": {
"text": "View Location",
"postbackData": "view_clinic_location",
"viewLocationAction": {
"latLong": {
"latitude": 37.7749,
"longitude": -122.4194
},
"label": "Wellness Dental"
}
}
},
{
"action": {
"text": "Visit Website",
"postbackData": "open_website",
"openUrlAction": {
"url": "https://developer.8x8.com/connect/docs/rcs/message-types",
"application": "WEBVIEW",
"webviewViewMode": "FULL",
"description": "Visit our website"
},
"fallbackUrl": "https://developer.8x8.com/connect/docs/rcs/message-types"
}
}
]
}
}

Overview of file types and limits

Supported File formats are

CategoryExtensions / MIME typesNotes
Images.jpeg / .jpg (image/jpeg), .png (image/png), .gif (image/gif)Supported in rich cards & media messages
Video.h263 (video/h263), .m4v (video/m4v), .mp4 (video/mp4, video/mpeg4), .mpeg (video/mpeg), .webm (video/webm)Supported in rich cards & media messages
Audio.aac (audio/aac), .mp3 (audio/mp3, audio/mpeg, audio/mpg), .mp4 (audio/mp4, audio/mp4-latm), .3gp (audio/3gpp), .ogx / .ogg (application/ogg, audio/ogg)Media messages only
Documents.pdf (application/pdf)Media messages (not rich cards)
File size capUp to 100 MB per attachment

Limits

Message element / fieldLimit
Plain text message3 072 characters
Rich-card title200 characters
Rich-card description2 000 characters
Suggested-reply text25 characters
Suggested-action text25 characters
Suggestion chips per messageUp to 11 chips (4 in-card + 7 extra)
Carousel cards per messageUp to 10 cards
Text caption with media2 000 characters
Postback data (per suggestion)2 048 characters
Rich-card payload size250 KB