RCS Rich Media Reference
This page provides the complete specification for Rich Cards, Carousels, and Suggestions used in the EnableX RCS API. Use this as a reference when constructing card, carousel, and suggestions payloads for both session messages and templates.
Supported Media Types
Rich cards and carousels support the following media file types. Media files must be hosted on a publicly accessible HTTPS URL or uploaded in advance using a file upload API.
| MIME Type | Format | Extension |
|---|---|---|
image/jpeg | JPEG | .jpeg, .jpg |
image/gif | GIF | .gif |
image/png | PNG | .png |
video/h263 | H263 video | .h263 |
video/m4v | M4V video | .m4v |
video/mp4 | MP4 video | .mp4 |
video/mpeg4 | MPEG-4 video | .mp4, .m4p |
video/mpeg | MPEG video | .mpeg |
video/webm | WEBM video | .webm |
application/pdf) are listed as a supported RBM media type but cannot be used within Rich Cards. If you attempt to use a PDF in a rich card, the message will fail. PDFs can only be sent as standalone file messages outside of cards.
Rich Card Specification
A rich card combines media, text, and interactive suggestions into a single visual message. Rich cards are ideal for product showcases, promotional banners, appointment confirmations, and any scenario where visual context enhances the message.
A rich card should always include either suggested replies or suggested actions alongside the media — media alone is not recommended as a standalone rich card.
Rich Card JSON Structure
The card object is used inside the message payload when type is "card":
{
"title": "Product Name",
"description": "Product description text",
"url": "https://example.com/product-image.jpg",
"thumbnail_url": "https://example.com/product-thumb.jpg",
"suggestions": [
{
"type": "open_url",
"text": "View Details",
"url": "https://example.com/product",
"postback": "view_product"
}
]
}
| Key | Type | Required | Description |
|---|---|---|---|
title | String | Yes | Card title text |
description | String | No | Descriptive text displayed below the title |
url | String | Conditional | Public HTTPS URL for the media file. Cannot be used with id |
id | String | Conditional | Pre-uploaded file ID (alternative to url). Cannot be used with url |
thumbnail_url | String | No | Public HTTPS URL for a thumbnail preview image. Cannot be used with thumbnail_id |
thumbnail_id | String | No | Pre-uploaded thumbnail file ID. Cannot be used with thumbnail_url |
suggestions | Array | No | Up to 4 suggestion objects per card |
Rich Card Rules
• A rich card must include a media file — either via a public HTTPS URL (
url) or a pre-uploaded file ID (id).
• Maximum 4 suggestions per card.
• A card cannot mix suggested replies and suggested actions — choose one category per card.
• Maximum rich card payload size: 250 KB.
Card Height
Rich cards expand vertically to fit their content, with a minimum height of 112 DP and a maximum of 344 DP. Media within rich cards must fit one of three predefined heights:
| Height | Value | Best For |
|---|---|---|
| Short | 112 DP | Compact cards with thumbnails, up to 3 suggestions (no media needed to fit 4) |
| Medium | 168 DP | Standard product cards, up to 2 suggestions comfortably |
| Tall | 264 DP | Hero banners, feature showcases — title + description OR 1 suggestion |
If the media does not fit the dimensions within the card at the selected height, the platform zooms and crops the media to fit.
Card Orientation
Vertical Rich Cards
Display horizontal media at the top of the card. Recommended for most use cases.
| Property | Specification |
|---|---|
| Aspect Ratio | 2:1, 16:9, or 7:3 |
| Optimal Image Resolution | 1440 × 720 px |
| Optimal Thumbnail Resolution | 770 × 335 px |
| Max Image File Size | 2 MB |
| Max Video File Size | 10 MB |
| Recommended Thumbnail Size | 40–100 KB |
Horizontal Rich Cards
Display vertical media on the left or right side of the card. Useful for contact cards or compact layouts.
| Property | Specification |
|---|---|
| Aspect Ratio | 3:4 |
| Optimal Image Resolution | 768 × 1024 px |
| Optimal Thumbnail Resolution | 250 × 330 px |
| Max Image File Size | 2 MB |
| Max Video File Size | 10 MB |
| Recommended Thumbnail Size | 40–100 KB |
Carousel Specification
A carousel presents multiple rich cards in a horizontally scrollable strip. Users swipe through the cards and can interact with each one individually. Carousels are ideal for product catalogs, plan comparisons, appointment time slots, or any multi-option selection.
Carousel JSON Structure
The carousel field is an array of rich card objects (same structure as a standalone card):
{
"type": "carousel",
"phone": "+919876543210",
"agent": "your-agent-name",
"carousel": [
{
"title": "Option A",
"description": "Description of option A",
"url": "https://example.com/option-a.jpg",
"suggestions": [
{
"type": "reply",
"text": "Select A",
"postback": "selected_a"
}
]
},
{
"title": "Option B",
"description": "Description of option B",
"url": "https://example.com/option-b.jpg",
"suggestions": [
{
"type": "reply",
"text": "Select B",
"postback": "selected_b"
}
]
}
],
"fallback_text": "View options at https://example.com/options"
}
Carousel Rules
• Minimum 2 cards, maximum 10 cards per carousel.
• Each card follows the same structure and rules as a standalone rich card.
• Maximum 4 suggestions per card; no mixing of replies and actions on a single card.
• Maximum payload size per card: 250 KB.
Truncation Behavior
In a carousel, the height of the first few cards determines the height of all cards. If a device cannot display all elements of a card due to display constraints, the platform truncates content in this order:
1. Reduce description to one line → 2. Reduce title to one line → 3. Remove suggestions from the end of the list → 4. Remove description entirely → 5. Remove title entirely.
Suggestions Reference
Suggestions are interactive buttons displayed within messages or rich cards. Each message or card supports up to 4 suggestions. Suggestion display text is limited to 25 characters.
Suggestions fall into two categories that cannot be mixed on a single card:
| Category | Behavior | Available Types |
|---|---|---|
| Suggested Replies | Sends a postback value back to business when the user taps | reply |
| Suggested Actions | Triggers a native device action (browser, dialer, map, calendar) | open_url, dial, view_location, share_location, create_calendar_event |
Standard Suggestion JSON
Every suggestion object shares these common fields:
{
"type": "reply | open_url | dial | view_location | share_location | create_calendar_event",
"text": "Button Label (max 25 chars)",
"postback": "postback_value_for_business (max 2048 chars)"
}
| Key | Type | Required | Description |
|---|---|---|---|
type | String | Yes | Suggestion type (see table above) |
text | String | Yes | Display text shown to user (max 25 characters) |
postback | String | Yes | Value sent to your webhook when user interacts (max 2,048 characters) |
Suggested Reply
Guides users through conversations by providing quick response options. When tapped, the reply text and postback data are sent to your webhook.
{
"type": "reply",
"text": "Yes, Confirm",
"postback": "order_confirmed"
}
Open URL
Opens the specified URL in the user's browser. If a native app is registered as the default handler for the URL, that app opens instead.
{
"type": "open_url",
"text": "Track Shipment",
"url": "https://example.com/track/SHP-789",
"postback": "track_shipment_789"
}
| Key | Type | Required | Description |
|---|---|---|---|
url | String | Yes | The URL to open |
Dial a Phone Number
Opens the phone dialer with the specified number pre-filled. The number must include a leading +, country code, and area code with no separators.
{
"type": "dial",
"text": "Call Us",
"phone": "+911234567890",
"postback": "called_support"
}
| Key | Type | Required | Description |
|---|---|---|---|
phone | String | Yes | Phone number in format +CountryPhone (no spaces or separators) |
View Location
Opens the default map application and drops a pin at the specified coordinates. You can set a custom label for the pin.
{
"type": "view_location",
"text": "View Store",
"latitude": "28.4595",
"longitude": "77.0266",
"label": "EnableX Office",
"fallback": "https://maps.google.com/?q=28.4595,77.0266",
"postback": "viewed_store_location"
}
| Key | Type | Required | Description |
|---|---|---|---|
latitude | String | Yes | Latitude coordinate |
longitude | String | Yes | Longitude coordinate |
label | String | No | Pin label displayed on the map |
fallback | String | No | Fallback URL if no map app is available (e.g., a Google Maps URL) |
Share Location
Prompts the user to share a location. The shared coordinates (latitude/longitude) are posted to your webhook. The user can share any location — not necessarily their current position.
{
"type": "share_location",
"text": "Share Address",
"postback": "user_shared_address"
}
Create Calendar Event
Opens the user's calendar app with a pre-filled event containing the title, description, and time range you specify.
{
"type": "create_calendar_event",
"text": "Add to Calendar",
"title": "Service Appointment",
"description": "Vehicle service at AutoCare Center",
"start_time": "2025-04-01T09:00:00Z",
"end_time": "2025-04-01T10:30:00Z",
"fallback": "https://calendar.google.com/calendar/event?action=TEMPLATE",
"postback": "calendar_service_added"
}
| Key | Type | Required | Description |
|---|---|---|---|
title | String | Yes | Event title |
description | String | No | Event description |
start_time | String | Yes | Start time in UTC (YYYY-MM-DDTHH:MI:SSZ) |
end_time | String | Yes | End time in UTC (YYYY-MM-DDTHH:MI:SSZ) |
fallback | String | No | Fallback URL if no calendar app is available |
Suggestion Responses on Webhooks
When a user taps any suggestion, the interaction is posted to your webhook. Suggested replies produce a suggestion.type: "reply" event, while suggested actions produce a suggestion.type: "action" event. Location sharing produces a separate type: "location" event.
Use the postback value to identify which suggestion the user interacted with and route your business logic accordingly. See RCS Webhooks — Suggestion Interactions for complete webhook payload details.