---
title: AWS End User Messaging RCS: Registration, Rich Messages, and the Reply Path (2026)
description: RCS for Business shipped 31 March 2026. A US Rich text segment lists at $0.01194 on delivery. A rich card lists at $0.02949. CLI 2.35.12 is the first release with send-rcs-message.
url: https://www.factualminds.com/blog/aws-end-user-messaging-rcs-guide-2026/
datePublished: 2026-09-29T00:00:00.000Z
dateModified: 2026-09-29T00:00:00.000Z
author: palaniappan-p
category: AI Agents
tags: ai-agents, aws-end-user-messaging, rcs, amazon-bedrock
---

# AWS End User Messaging RCS: Registration, Rich Messages, and the Reply Path (2026)

> RCS for Business shipped 31 March 2026. A US Rich text segment lists at $0.01194 on delivery. A rich card lists at $0.02949. CLI 2.35.12 is the first release with send-rcs-message.

On **31 March 2026** AWS announced [RCS for Business](https://aws.amazon.com/about-aws/whats-new/2026/03/rcs-business-messaging/). On **25 August 2026** Bruno Giorgini published the [coding-assistant setup](https://aws.amazon.com/blogs/messaging-and-targeting/setting-up-an-rcs-agent-with-an-ai-coding-assistant-and-aws-end-user-messaging/). On **27 August 2026** the [CLI walkthrough](https://aws.amazon.com/blogs/messaging-and-targeting/creating-and-testing-an-end-user-messaging-rcs-agent-with-aws-cli/) pinned **AWS CLI 2.35.12** as the release that adds `send-rcs-message`. This guide is part 2 of [AWS Communication Developer Services](/blog/aws-communication-developer-services-2026/). It is the registration, the two send APIs, and the reply path. It is not a second copy of those posts.

FactualMinds has no published RCS engagement. Prices are the [End User Messaging pricing page](https://aws.amazon.com/end-user-messaging/pricing/) as read **29 September 2026**.

## What you are actually creating

An **AWS RCS Agent** is a container. `create-rcs-agent` does not take a display name. The name, logo, banner, and color live on the **registration**, not on the create call. AWS's August posts both call this out, because the CLI parameter people invent (`--display-name`, `--field-values`) does not exist.

Two registrations matter:

1. **Testing** (`TEST_RCS_LAUNCH_REGISTRATION` in the CLI post). No carrier approval. Delivery only to verified test devices. Messages are still billed at standard RCS rates. The [getting started guide](https://docs.aws.amazon.com/sms-voice/latest/userguide/rcs-getting-started.html) estimates 15–30 minutes for the first test send.
2. **Country launch**, one per country. The [launch guide](https://docs.aws.amazon.com/sms-voice/latest/userguide/rcs-country-launch.html) says AWS supports launches in **22 countries**, and that you should expect **several months** of carrier review. A country can be `PARTIAL`: at least one carrier is active, so you can send to that carrier. Recipients on a carrier that has not approved you fall back to SMS only if you are using pool or account-level sending.

The testing agent's brand is the template the console copies into each country form. Get the logo right before you submit twelve countries. Logo **224×224** pixels and under **50 KB** PNG. Banner **1440×448** and under **200 KB**. Accent color at least **4.5:1** contrast against white. Those limits are in the CLI post and the upgrade guide.

Use case is not a label. The launch guide's four buckets forbid mixing:

| Use case | Allowed | Not allowed |
| --- | --- | --- |
| OTP | Authentication codes | Product updates, offers |
| Transactional | Alerts, confirmations, account updates | Discounts, upgrades |
| Promotional | Offers, including abandoned-cart reminders | OTP, 2FA, urgent transactional |
| Multi-use | A confirmation plus a related offer | OTP, password resets, a purely one-sided program |

**We recommend a transactional agent for where-is-my-order, and a separate agent if you also send promotions.** The pricing page says registration fees apply per RCS agent, so a second agent is another **$500** US setup, another **$200** a year for brand vetting, and another **$200** a month for maintenance, plus a second country-launch clock. One multi-use agent looks cheaper until a carrier denies it because the screen recording shows a discount on the same sender as a password reset.

## Two send APIs

`SendTextMessage` is the SMS API. If the origination identity is an RCS agent or a pool that contains one, plain text can go out as RCS. The [Sending RCS messages](https://docs.aws.amazon.com/sms-voice/latest/userguide/rcs-send-message.html) page documents three patterns:

| Pattern | Origination | SMS fallback |
| --- | --- | --- |
| Pool | Pool ID | Yes. RCS first. If no RCS signal in **25 seconds**, SMS is a separate attempt. |
| Account | Omit it | Yes, onto a dedicated number or sender ID. Shared routes are not valid fallback. Easy to pick the wrong use case. |
| Direct | RCS agent ARN | No. |

The 25-second wait and the **25-hour** sticky sender are in that page's own AI prompt. Sticky means the service remembers the last successful identity for that destination for 25 hours.

`SendRcsMessage` is the rich API. The [27 August CLI post](https://aws.amazon.com/blogs/messaging-and-targeting/creating-and-testing-an-end-user-messaging-rcs-agent-with-aws-cli/) says 2.35.12 adds it. The [rich-message post](https://aws.amazon.com/blogs/messaging-and-targeting/send-rich-rcs-messages-with-aws-end-user-messaging-rcs/) is the content catalog: text, file, rich card, carousel, suggestions, `TimeToLive`, and per-message `FallbackConfiguration`.

> **What broke** — The AI prompt on the Sending RCS messages page tells a coding assistant "there is no separate RCS send API." That sentence is about `send-text-message`. An assistant that obeys it will refuse `send-rcs-message` and you will never get a card. Point it at the rich-message post, or at CLI **2.35.12 or later**, before you let it "fix" the call.

Plain text through `SendRcsMessage` is a `TextMessage` body of 1–3,072 characters. Without `FallbackConfiguration`, a phone that cannot do RCS gets nothing. Fallback `Channel` is `SMS` or `MMS`. The fallback originator is a phone number or sender ID. A pool ID is rejected there. SMS fallback body maxes at 1,600 characters. Chips and cards do not convert themselves. Write the SMS sentence.

The snippet below is the production shape we recommend for a status text that must still arrive. It assumes boto3's `pinpoint-sms-voice-v2` client and an agent already in `ACTIVE`. Phone numbers are documentation samples, not a live sender.

```python
import boto3

client = boto3.client("pinpoint-sms-voice-v2", region_name="us-east-1")

client.send_rcs_message(
    DestinationPhoneNumber="+12065550100",
    OriginationIdentity="arn:aws:sms-voice:us-east-1:123456789012:rcs-agent/rcs-example",
    RcsMessageContent={
        "Content": {
            "TextMessage": {
                "Body": "Your order has shipped. Reply here if the delivery window does not work.",
            }
        }
    },
    TimeToLive=300,
    FallbackConfiguration={
        "Channel": "SMS",
        "MessageBody": "Your order has shipped. Reply STOP to opt out.",
        "OriginationIdentity": "+12065550188",
    },
)
```

Set the configuration set before you send. Event destinations do not backfill.

## What the US bill does with that message

Rich outbound, per delivered segment: **$0.00700** + **$0.00494** = **$0.01194**. Rich Media, per delivered message: **$0.02000** + **$0.00949** = **$0.02949**. Inbound Rich is **$0.00700** + **$0.00218** per segment. Inbound Rich Media is **$0.02000** + **$0.00737**. Customer replies are not free.

Text, suggested replies, dial, and a full-browser Open URL stay Rich. A card, a file, a carousel, a webview, a location, or a calendar event becomes Rich Media. Classification is automatic.

> **List-price arithmetic, not a client bill** — 10,000 delivered one-segment US texts cost **$119.40**. The same 10,000 as cards cost **$294.90**. Outside the US the meter changes. Canada Basic is **$0.0083** per message and Canada Single is **$0.0100**, on the same pricing page. A message over 160 characters, or any suggestion, is Single in those countries. Do not copy the US segment math into a UK launch.

US registration, separate from the segments: **$500** setup, **$200** annual brand vetting, **$200** a month maintenance. The pricing page says vetting is charged at submission even if the carrier later says no.

The [upgrade post](https://aws.amazon.com/blogs/messaging-and-targeting/upgrade-business-messaging-with-rcs-on-aws/) warns that a rare dual delivery, RCS and the SMS fallback both reaching the phone, can bill both. Watch the event. If `originationPhoneNumber` is the agent id, it was RCS. If it is an E.164 number, it was SMS. That field is documented on the [event format](https://docs.aws.amazon.com/sms-voice/latest/userguide/configuration-sets-event-format.html) page.

## The coding assistant versus the customer agent

[aws-samples/sample-rcs-agent-setup-and-send-messages](https://github.com/aws-samples/sample-rcs-agent-setup-and-send-messages) is the setup path. `AGENTS.md` walks a coding assistant through six steps: create, add testers, send, keyword, verify inbound, delete. The August post says the registration is **23 fields**, each `TEXT`, `SELECT`, or `ATTACHMENT`. Paths are `agentDetails.logoImage` and `agentDetails.bannerImage`. A new registration version does not inherit values. You refill all 23.

Inbound demo keyword in that repo and in the getting-started guide: send `RCSINBOUNDTESTING` and expect the auto-reply. That proves the phone can reach you. It is not an order lookup.

The customer-facing path is the one the March announcement describes: inbound to SNS, then Lambda, then a model. For a where-is-my-order reply, the Lambda may read the order and send a Rich text with two suggested replies ("That window works", "I need a different day"). Those replies stay on the Rich meter. Do not attach the product photo unless the **$175.50** gap per 10,000 messages is worth it.

Refunds stay out of the tool list. The approval rule is in [human-in-the-loop](/blog/human-in-the-loop-ai-agents-ecommerce-2026/).

> **What broke** — Deleting the agent before the registration returns `ConflictException: RESOURCE_NOT_EMPTY`. The August coding-assistant post's cleanup order is: turn off deletion protection, delete the registration, then delete the agent. A second API-only failure: country-launch `complianceKeywords.stopResponse` and `helpResponse` must match the STOP and HELP text already on the agent, or the registration is denied with `Invalid field value`. The console hides this. `CreateRegistrationVersion` does not.

Also from the launch guide: `CreateRegistrationAssociation` is required before `SubmitRegistrationVersion` or you get `SUBMIT_REGISTRATION_VERSION_NOT_ALLOWED`.

## What to do this week

1. Clone [sample-rcs-agent-setup-and-send-messages](https://github.com/aws-samples/sample-rcs-agent-setup-and-send-messages). CLI **2.35.12 or later**. Do not give the assistant `pinpoint-sms-voice-v2:*` in the account you send production from. The CLI post says that scope is for the test walkthrough.
2. Finish a testing registration and one verified handset before you submit a country.
3. Put the transactional agent and a 10DLC or toll-free number, same use case, in one pool. Read the [SMS guide](/blog/aws-end-user-messaging-sms-guide-2026/) before you lease the number.
4. Send the status as Rich text. Add a card only after you have written the SMS fallback sentence.
5. Log one week of events and count RCS versus SMS by `originationPhoneNumber`. That count is your fallback rate. We are not publishing one, because we have not run the send.

> **Reproduce this** — The fee rows are in the [channel planner](https://www.factualminds.com/examples/architecture-blog-2026/aws-cds-channel-planner/channel-planner.csv). The setup commands are in the sample repo's `AGENTS.md`, not retyped here.

## What this post doesn't cover

Per-country registration quirks beyond the launch guide's own country pages. MMS fallback layout. WhatsApp as the primary thread, which is the [WhatsApp guide](/blog/aws-end-user-messaging-whatsapp-guide-2026/). A production Bedrock AgentCore deploy. The sample repo stops at a test agent and a keyword. Treat anything past that as your application, with the approval gate in front of money.

## FAQ

### Does SendTextMessage send RCS?

Yes, for plain text. Pass a pool ID, or an RCS agent ARN, as the origination identity. The message is still text only. Cards, carousels, files, and suggestion chips need SendRcsMessage. AWS CLI 2.35.12 added send-rcs-message.

### When should I not send from the RCS agent ARN directly?

When the customer must receive something if their phone has no RCS. A direct agent ARN on SendTextMessage is RCS-only. There is no SMS fallback. Use a phone pool for plain text, or set FallbackConfiguration on SendRcsMessage.

### Can a testing agent message customers?

No. A testing registration delivers only to verified test devices. Production needs a country launch registration. The launch guide says to plan several months for carrier review, and you can send to a carrier once that carrier is active.

### Why did a new registration version lose every field?

CreateRegistrationVersion opens a blank version. The console refills the form. The API does not. You must call PutRegistrationFieldValue for every required field before SubmitRegistrationVersion, or the submit fails with a missing-field error.

### What does a US RCS agent cost before the first message?

The pricing page, read 29 September 2026, lists $500 one-time US agent setup, $200 annual US brand vetting, and $200 monthly maintenance in every country. Message fees are extra and are charged only when a message is delivered.

### Will an RCS agent refund an order if I connect it to Bedrock?

Not if you follow the approval rule. The agent may look up the order and reply with status. A refund, an address change, or a price change stays a proposal a person approves. The channel does not change that rule.

## FAQ

### Does SendTextMessage send RCS?
Yes, for plain text. Pass a pool ID, or an RCS agent ARN, as the origination identity. The message is still text only. Cards, carousels, files, and suggestion chips need SendRcsMessage. AWS CLI 2.35.12 added send-rcs-message.

### When should I not send from the RCS agent ARN directly?
When the customer must receive something if their phone has no RCS. A direct agent ARN on SendTextMessage is RCS-only. There is no SMS fallback. Use a phone pool for plain text, or set FallbackConfiguration on SendRcsMessage.

### Can a testing agent message customers?
No. A testing registration delivers only to verified test devices. Production needs a country launch registration. The launch guide says to plan several months for carrier review, and you can send to a carrier once that carrier is active.

### Why did a new registration version lose every field?
CreateRegistrationVersion opens a blank version. The console refills the form. The API does not. You must call PutRegistrationFieldValue for every required field before SubmitRegistrationVersion, or the submit fails with a missing-field error.

### What does a US RCS agent cost before the first message?
The pricing page, read 29 September 2026, lists $500 one-time US agent setup, $200 annual US brand vetting, and $200 monthly maintenance in every country. Message fees are extra and are charged only when a message is delivered.

### Will an RCS agent refund an order if I connect it to Bedrock?
Not if you follow the approval rule. The agent may look up the order and reply with status. A refund, an address change, or a price change stays a proposal a person approves. The channel does not change that rule.

---

*Source: https://www.factualminds.com/blog/aws-end-user-messaging-rcs-guide-2026/*
