Supported RCS message types

Naxai RCS API supported message types and examples.

Supported RCS message types

Naxai RCS supports four message types: text, file, rich card and carousel. This page explains what each one can contain, its limits, and which media formats to use so your content displays well on both Android and iOS.

📘

Sending any of the message types below requires an Agent. See RCS Agents.

Overview

Message typeAPI typeWhat it containsKey limits
TexttextText, optional suggestions2,000 characters
FilefileA single image, video or PDF100 MB per file
Rich cardstandaloneRichCardMedia, title, description, suggestionsTitle 200 / description 2,000 characters, 4 suggestions
CarouselcarouselRichCard2 to 10 rich cards the recipient swipes throughSame limits as a rich card, per card

Every message type can be combined with suggestions: tappable replies and actions displayed with the message.

Text

A plain text message, the RCS equivalent of an SMS but without the 160-character segment limit.

PropertyLimit
TextUp to 2,000 characters, UTF-8 encoded
SuggestionsOptional, see Suggestions
{
  "to": "32478123456",
  "message": {
    "type": "text",
    "text": "Hello world with suggestions!"
  },
  "suggestions": [
    {
      "type": "reply",
      "text": "Want more info?",
      "postbackData": "more"
    },
    {
      "type": "action",
      "text": "Call us",
      "postbackData": "call",
      "action": {
        "type": "dialAction",
        "phoneNumber": "3223342323"
      }
    }
  ]
}
👍

Keep it short

Short messages are easier to read. If you need more than a few lines, or want to add an image, use a rich card instead.

File

Sends a single image, video or document. The recipient's device displays it inline (images and videos) or as a downloadable file (PDF).

PropertyLimit
Image formatsJPEG, JPG, PNG, GIF
Video formatsMP4, M4V, MPEG, MPEG-4, WEBM, H263
Document formatsPDF
File sizeUp to 100 MB
ThumbnailOptional, JPEG, PNG or GIF, up to 100 kB
{
  "to": "32478123456",
  "message": {
    "type": "file",
    "file": {
      "fileUrl": "https://www.example.com/image.png",
      "thumbnailUrl": "https://www.example.com/image-thumbnail.png",
      "forceRefresh": false
    }
  }
}
📘

Always add a thumbnail

Without a thumbnail, the recipient sees a blank placeholder until the file is downloaded. Depending on their settings, the download may not start automatically.

Rich card

A rich card groups media, a title, a description and up to 4 suggestions in a single message bubble. It is the best format for promotions, order updates, or any message that benefits from an image and a clear call to action.

PropertyLimit
TitleUp to 200 characters
DescriptionUp to 2,000 characters
MediaImage or video, see Media specifications
SuggestionsUp to 4 per card

A rich card can have two layouts, set with cardOrientation:

OrientationLayoutMedia height
VERTICALMedia on top, text and suggestions belowSet with height: SHORT, MEDIUM or TALL
HORIZONTALMedia on the left or right (thumbnailImageAlignment: LEFT or RIGHT), text beside itNot customisable, height is ignored
{
  "to": "32478123456",
  "message": {
    "type": "standaloneRichCard",
    "cardOrientation": "VERTICAL",
    "cardContent": {
      "title": "Rich Card",
      "description": "This is a standalone rich card content",
      "media": {
        "height": "TALL",
        "contentInfo": {
          "fileUrl": "https://www.example.com/image.png",
          "thumbnailUrl": "https://www.example.com/image-thumbnail.png",
          "forceRefresh": false
        }
      },
      "suggestions": [
        {
          "type": "action",
          "text": "Shop now",
          "postbackData": "shop_now",
          "action": {
            "type": "openUrlAction",
            "url": "https://www.example.com"
          }
        },
        {
          "type": "reply",
          "text": "I like RCS",
          "postbackData": "like1"
        }
      ]
    }
  }
}

Carousel

A carousel is a row of rich cards the recipient swipes horizontally. Use it to present several products, offers or options in a single message.

PropertyLimit
Number of cards2 to 10
Card widthSMALL or MEDIUM (cardWidth), same for all cards
Title, description, suggestionsSame as a rich card, per card
MediaImage or video, see Media specifications
{
  "to": "32478123456",
  "message": {
    "type": "carouselRichCard",
    "cardWidth": "MEDIUM",
    "cardContents": [
      {
        "title": "Title 1",
        "description": "Description card 1",
        "media": {
          "height": "MEDIUM",
          "contentInfo": {
            "fileUrl": "https://www.example.com/video.mp4",
            "thumbnailUrl": "https://www.example.com/image.png",
            "forceRefresh": false
          }
        },
        "suggestions": [
          { "type": "reply", "text": "Like", "postbackData": "like_1" }
        ]
      },
      {
        "title": "Title 2",
        "description": "Description card 2",
        "media": {
          "height": "MEDIUM",
          "contentInfo": {
            "fileUrl": "https://www.example.com/image.png",
            "thumbnailUrl": "https://www.example.com/image.png",
            "forceRefresh": false
          }
        },
        "suggestions": [
          { "type": "reply", "text": "Like", "postbackData": "like_2" }
        ]
      }
    ]
  }
}
👍

Keep cards consistent

Use the same media ratio, similar text lengths and the same number of suggestions on every card. On iOS, card height adapts to its content, so uneven cards make the carousel look irregular.

Suggestions

Suggestions are tappable buttons that guide the recipient through the conversation, using features already available on their device. There are two kinds:

  • Suggested replies send a predefined answer back to your Agent.
  • Suggested actions trigger something on the recipient's device: open a website, call a number, show or share a location, or create a calendar event.

When the recipient taps a suggestion, your Agent receives an event with the suggestion text and its postbackData. See Receiving RCS Messages.

Where suggestions appear

PlacementWhere to set itMaximum
Message suggestions (chips below the message)suggestions at the root of the request11
Card suggestions (buttons inside a rich card or carousel card)suggestions inside cardContent4 per card

Common fields

All suggestions share these fields:

FieldRequiredDescription
typeYesreply or action
textYesText displayed on the button. Max 25 characters
postbackDataYesData returned to your Agent when the suggestion is tapped. Max 2,048 characters
actionActions onlyThe action to perform, see the action types below

Available suggestions

Suggestiontype / action.typeWhat happens on tap
Suggested replyreplySends the reply text back to your Agent
Open URLopenUrlActionOpens a web page or deep link in the browser
Open URL in a webviewopenUrlAction with application: WEBVIEWOpens a web page inside the messaging app
Dial phonedialActionOpens the dialer with a number pre-filled
View locationviewLocationActionOpens the map app at a given location
Share locationshareLocationActionAsks the recipient to send their location
Create calendar eventcreateCalendarEventActionOpens the calendar with an event pre-filled

Suggested reply

A pre-written answer the recipient can send with one tap, instead of typing. Use it to steer the conversation ("Yes" / "No", "Track my order", "Talk to an agent").

FieldRequiredLimit
textYesMax 25 characters
postbackDataYesMax 2,048 characters
{
  "type": "reply",
  "text": "Track my order",
  "postbackData": "track_order"
}

Open URL

Opens the recipient's default browser at the given URL. If the URL is a deep link to an installed app, that app opens instead.

FieldRequiredLimit
action.typeYesopenUrlAction
action.urlYesValid URL, max 2,048 characters. Use the full https:// prefix
action.applicationNoBROWSER (default) or WEBVIEW, see Open URL in a webview
{
  "type": "action",
  "text": "Shop now",
  "postbackData": "shop_now",
  "action": {
    "type": "openUrlAction",
    "url": "https://www.example.com/offers"
  }
}

Open URL in a webview

Opens the web page inside the messaging app, on top of the conversation, instead of switching to the browser. The recipient stays in the conversation, which works well for forms, checkouts or booking pages. If the device doesn't support webviews, the URL opens in the default browser.

FieldRequiredLimit
action.typeYesopenUrlAction
action.urlYesValid URL, max 2,048 characters. Only http:// and https:// links are supported
action.applicationYesWEBVIEW
action.webviewViewModeNoHeight of the webview: FULL (default), TALL or HALF, see below
action.descriptionNoAccessibility description of the webview, read by screen readers. Max 1,024 characters
webviewViewModeDisplay
FULLCovers the whole screen
TALLCovers about three quarters of the screen, the conversation stays visible at the top
HALFCovers half of the screen
{
  "type": "action",
  "text": "Book a slot",
  "postbackData": "book_slot",
  "action": {
    "type": "openUrlAction",
    "url": "https://www.example.com/booking",
    "application": "WEBVIEW",
    "webviewViewMode": "TALL",
    "description": "Booking form for your appointment"
  }
}

Dial phone

Opens the recipient's dialer with your number pre-filled. The recipient still confirms the call.

FieldRequiredLimit
action.typeYesdialAction
action.phoneNumberYesE.164 format without leading +, 7 to 20 characters (for example 3223342323)
{
  "type": "action",
  "text": "Call us",
  "postbackData": "call",
  "action": {
    "type": "dialAction",
    "phoneNumber": "3223342323"
  }
}

View location

Opens the recipient's default map app with a pin on the location you specify, for example your shop or a pick-up point.

FieldRequiredLimit
action.typeYesviewLocationAction
action.latitudeYesNumber between -90.0 and +90.0
action.longitudeYesNumber between -180.0 and +180.0
action.labelNoName of the pin, max 1,024 characters
{
  "type": "action",
  "text": "Find our store",
  "postbackData": "view_store",
  "action": {
    "type": "viewLocationAction",
    "latitude": 50.8466,
    "longitude": 4.3528,
    "label": "Naxai Store Brussels"
  }
}

Share location

Opens the location picker on the recipient's device so they can send you their location, for example to find the nearest store or organise a delivery. The location is sent to your Agent as an inbound message.

FieldRequiredLimit
action.typeYesshareLocationAction
{
  "type": "action",
  "text": "Share my location",
  "postbackData": "share_location",
  "action": {
    "type": "shareLocationAction"
  }
}

Create calendar event

Opens the recipient's calendar app with a new event pre-filled. Use it for appointments, deliveries or events.

FieldRequiredLimit
action.typeYescreateCalendarEventAction
action.startTimeYesRFC 3339 UTC timestamp, for example 2026-10-15T09:00:00Z
action.endTimeYesRFC 3339 UTC timestamp, after startTime
action.titleYesMax 100 characters
action.descriptionYesMax 500 characters
{
  "type": "action",
  "text": "Add to calendar",
  "postbackData": "add_calendar",
  "action": {
    "type": "createCalendarEventAction",
    "startTime": "2026-10-15T09:00:00Z",
    "endTime": "2026-10-15T09:30:00Z",
    "title": "Appointment at Naxai Store",
    "description": "Your appointment is confirmed. See you soon!"
  }
}

Best practices

  • One main action, then replies: use one suggested action as your main call to action, placed first, followed by up to 3 suggested replies. This renders consistently on Android and iOS.
  • Don't mix card and message suggestions: after a rich card or carousel, avoid adding message-level suggestions. iOS merges them into the card, while Android keeps them separate.
  • Keep labels short and explicit: "Book now" works better than "Click here". Labels longer than 25 characters are rejected.
  • Icons are automatic: the device adds an icon to each action (phone, map, calendar...). You can't customise it.

Media specifications

General requirements

Supported Content-types

Only the following content-types are supported :
image/jpeg, image/jpg, image/gif, image/png, video/h263, video/m4v, video/mp4, video/mpeg, video/mpeg4, video/webm

These apply to every media file you send, in file messages, rich cards and carousels:

  • Public URL: fileUrl and thumbnailUrl must be publicly reachable over HTTPS, without authentication.
  • Correct content type: the file type is detected from the Content-Type header returned by your server, so it must be present and accurate.
  • File size: up to 100 MB per file. Smaller files load faster, so aim for a few hundred kB for images.
  • Thumbnail: up to 100 kB, JPEG, PNG or GIF. Recommended for videos and large images.
  • Caching: files are cached after the first fetch. If you replace a file at the same URL, set forceRefresh to true, or use a new URL.
  • Animated GIFs: supported on Android, but displayed as a still image on iOS.

Recommended formats (Android and iOS)

Android and iOS display card media differently: Android crops media to a fixed height, while iOS generally keeps the original ratio. The formats below give the most consistent result on both platforms. Use them by default.

UsecardOrientation / cardWidthheightAspect ratioRecommended sizeSafe zone (keep key content inside)
Vertical rich cardVERTICALTALL3:21620 × 1080 px1458 × 972 px, centred
Horizontal rich cardHORIZONTALn/a9:161080 × 1920 px972 × 972 px square, centred
Carousel cardMEDIUMMEDIUM16:91920 × 1080 px1728 × 972 px, centred
📘

What is a safe zone?

Depending on the device, screen size, text size setting or orientation, the edges of your media may be cropped. Keep logos, text, faces and products inside the safe zone (roughly the central 90% of the image) so they always remain visible.

For horizontal rich cards, iOS always displays the media as a square. Place your key content in the centred 1:1 area of the 9:16 image.

All media heights (Android reference)

If you target other card sizes, use the ratios below. They show the media in full on Android, without cropping. On iOS, media keeps its original ratio, so results may differ: always test on real devices.

Vertical rich card

heightAspect ratioRecommended size
SHORT7:23780 × 1080 px
MEDIUM21:92520 × 1080 px
TALL3:21620 × 1080 px

Carousel, cardWidth: SMALL

heightAspect ratioRecommended size
SHORT16:101728 × 1080 px
MEDIUM1:11080 × 1080 px
TALL2:3720 × 1080 px

Carousel, cardWidth: MEDIUM

heightAspect ratioRecommended size
SHORT8:32880 × 1080 px
MEDIUM16:91920 × 1080 px
TALL9:81215 × 1080 px

Sizes are based on Full HD (1080p) screens. You can divide them by 3 (for example 540 × 360 px instead of 1620 × 1080 px) to reduce file size, keeping the same ratio.

If your media doesn't match the ratio of the selected height, Android crops it from the centre.

Tips for reliable rendering

  • Keep text short: on Android, a long title and description reduce the space left for media in horizontal cards. On iOS, a card whose text exceeds 6 lines becomes tappable to open the full text, and the media is not shown in that view. Aim for 3 lines of title and description.
  • Don't put critical text in the image only: font size settings and screen rotation can crop media. Repeat important information in the title or description.
  • Test before launch: rendering depends on the device, OS version and user settings. Send your messages to test devices first, see Testing RCS Messages.

Not supported

Google Wallet actions (adding a pass, loyalty card or ticket to the recipient's wallet) are not currently available with Naxai.

What's next


Did this page help you?