Skip to main content
Check whether a recipient’s device supports RCS — and which features it supports — before sending. This lets you adapt your message format (rich card vs. plain text) and fall back to SMS when needed.

Query single number

Check RCS capabilities for a single phone number:
curl -s https://api.telnyx.com/v2/messaging/rcs/capabilities/{agent_id}/{phone_number} \
  -H "Authorization: Bearer YOUR_API_KEY"

Response examples

{
  "data": {
    "record_type": "rcs.capabilities",
    "phone_number": "+15559876543",
    "agent_id": "your_agent_id",
    "agent_name": "Acme Bot",
    "features": [
      "ACTION_CREATE_CALENDAR_EVENT",
      "ACTION_DIAL",
      "ACTION_OPEN_URL",
      "ACTION_OPEN_URL_IN_WEBVIEW",
      "ACTION_SHARE_LOCATION",
      "ACTION_VIEW_LOCATION",
      "RICHCARD_CAROUSEL",
      "RICHCARD_STANDALONE"
    ],
    "status": "Success"
  }
}

Feature reference

FeatureDescriptionUse for
RICHCARD_STANDALONESingle rich card supportProduct cards, order updates
RICHCARD_CAROUSELSwipeable carousel cardsProduct listings, menus
ACTION_OPEN_URLOpen URL buttonLinks to websites
ACTION_OPEN_URL_IN_WEBVIEWOpen URL in webviewIn-app browsing
ACTION_DIALPhone call buttonClick-to-call
ACTION_VIEW_LOCATIONView map locationDirections, store locator
ACTION_SHARE_LOCATIONShare user’s locationDelivery tracking
ACTION_CREATE_CALENDAR_EVENTAdd calendar eventAppointment booking
ACTION_COMPOSECompose messageMessage drafting
GENERIC_RCS_FEATUREBasic RCS (details unknown)Text-only RCS

Bulk capability query

Check up to 100 numbers at once to efficiently segment your audience:
curl -X POST https://api.telnyx.com/v2/messaging/rcs/bulk_capabilities \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "agent_id": "your_agent_id",
    "phone_numbers": ["+15551234567", "+15559876543", "+15550001111"]
  }'
RCS capability queries can be slow (several seconds per request). For time-sensitive applications, cache results and refresh periodically rather than querying before every message.

Send with automatic fallback

Use capability queries to send the best possible message format:
Python
def send_adaptive_message(to: str, title: str, body: str, image_url: str = None):
    """Send RCS rich card if supported, otherwise fall back to SMS."""
    caps = check_rcs_capabilities(to)

    if caps["supports_rich_cards"] and image_url:
        # Send rich card
        requests.post(
            "https://api.telnyx.com/v2/messages/rcs",
            headers={**headers, "Content-Type": "application/json"},
            json={
                "agent_id": AGENT_ID,
                "to": to,
                "messaging_profile_id": PROFILE_ID,
                "agent_message": {
                    "content_message": {
                        "rich_card": {
                            "standalone_card": {
                                "card_orientation": "VERTICAL",
                                "card_content": {
                                    "title": title,
                                    "description": body,
                                    "media": {
                                        "height": "MEDIUM",
                                        "content_info": {"file_url": image_url},
                                    },
                                },
                            }
                        }
                    }
                },
                "fallback": {
                    "from": FROM_NUMBER,
                    "text": f"{title}\n{body}",
                },
            },
        )
    elif caps["rcs_enabled"]:
        # Send RCS text (no rich card support)
        requests.post(
            "https://api.telnyx.com/v2/messages/rcs",
            headers={**headers, "Content-Type": "application/json"},
            json={
                "agent_id": AGENT_ID,
                "to": to,
                "messaging_profile_id": PROFILE_ID,
                "agent_message": {
                    "content_message": {"text": f"{title}\n{body}"}
                },
                "fallback": {"from": FROM_NUMBER, "text": f"{title}\n{body}"},
            },
        )
    else:
        # Send SMS directly
        requests.post(
            "https://api.telnyx.com/v2/messages",
            headers={**headers, "Content-Type": "application/json"},
            json={"from": FROM_NUMBER, "to": to, "text": f"{title}\n{body}"},
        )

Deeplinks let users start an RCS conversation from a website, email, or QR code — without having your number saved.
# With fallback phone number and message body
curl -s 'https://api.telnyx.com/v2/messages/rcs/deeplinks/{agent_id}?phone_number=%2B15554443333&body=hello%20world' \
  -H "Authorization: Bearer YOUR_API_KEY"

# Without fallback (RCS only)
curl -s 'https://api.telnyx.com/v2/messages/rcs/deeplinks/{agent_id}' \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": {
    "url": "sms:+18445550001?service_id=agent_id%40rbm.goog&body=hello%20world"
  }
}
Embed the deeplink in an HTML button or link. The URL won’t open directly in a browser — it must be an <a> tag or button click:
<a href="sms:+18445550001?service_id=agent_id%40rbm.goog&body=Hi!"
   class="rcs-button">
  💬 Chat with us on RCS
</a>
Convert the deeplink URL to a QR code for print materials, in-store signage, or business cards. Users scan with their camera to open an RCS conversation.
Include the deeplink in marketing emails as a CTA button. When tapped on Android with Google Messages, it opens the RCS conversation directly.

Requirements

RequirementDetails
DeviceAndroid with Google Messages installed
OS versionmessages.android_20241029_00 or later
FallbackUse phone_number parameter for non-RCS devices (opens SMS instead)

Send RCS Messages

Send text, rich cards, carousels, and suggested actions.

RCS Webhooks

Handle inbound RCS messages and delivery events.

RCS Getting Started

Set up your RCS agent and get approved.

RCS API Reference

Full API reference for RCS messaging.