AWS End User Messaging SMS: 10DLC, Fallback, and When Not to Build the Agent on SMS (2026)
Quick summary: A US 10DLC number lists at $1 a month, a regular campaign at $10, and company vetting at $41.50. SMS is the OTP and the RCS fallback. It is the wrong place to build the rich agent.
Key Takeaways
- A US 10DLC number lists at $1 a month, a regular campaign at $10, and company vetting at $41
- 50
- On 31 March 2026 AWS made RCS a first-class originator in End User Messaging, with SMS as the fallback when the phone cannot take RCS
- On 25 September 2026 the agent skills announcement put SMS and RCS setup on the AWS MCP Server
- This is part 3 of AWS Communication Developer Services

Table of Contents
On 31 March 2026 AWS made RCS a first-class originator in End User Messaging, with SMS as the fallback when the phone cannot take RCS. On 25 September 2026 the agent skills announcement put SMS and RCS setup on the AWS MCP Server. This is part 3 of AWS Communication Developer Services. The rich path is the RCS guide. This page is the number you fall back onto, and the number you should still use for a one-time passcode.
FactualMinds has no published SMS engagement. Fees below are the End User Messaging pricing page and the 10DLC registration page, read 29 September 2026.
The number is the product
US recipients see a 10-digit number, a toll-free number, or a short code. Carriers want that number tied to a sender and a use case. An unregistered long code is the usual first failure: the API accepts the send, and the handset never shows it.
AWS’s own 10DLC page says you do not need 10DLC if you already send on a short code or toll-free. Pick one origination type per use case.
| Origination | Published lease | When it fits | When it does not |
|---|---|---|---|
| Toll-free | $2 / month. US SMS-enabled only. | OTP and transactional at moderate volume, one registration | You need a local caller ID, or Canada-from-toll-free economics you have not checked |
| 10DLC | $1 / number / month, plus campaign fees below | Transactional or promotional US traffic on a local number | You skip brand and campaign registration |
| Short code | $650 setup, $995 / month ($1,500 vanity). About 12 weeks after the carrier packet is complete | High-volume US programs that can wait | A pilot, or a where-is-my-order agent you wanted live this month |
10DLC company and campaign fees on the pricing page:
- Company registration $4.50 once. A resubmit is another $4.50.
- Public-profit authentication email $12.50 once.
- Company vetting $41.50 once on the pricing page. The vetting form doc says $40 non-refundable. Confirm which action you are about to click.
- Campaign $10 / month regular, or $2 / month low-volume. The $50 T-Mobile activation fee is listed as postponed.
- Number $1 / month.
The registration clock on the 10DLC page: US brands often 1–2 business days, international brands up to 3 weeks, campaign up to 4 weeks, number request up to 10 days. Vet before you create the campaign. The vetting doc says a score does not apply backward to a campaign you already opened.
List-price arithmetic, not a client bill — A US public-profit brand that vets, opens one regular campaign, and leases one 10DLC pays $4.50 + $12.50 + $41.50 + $10 + $1 = $69.50 in published fees before the first message, then $11 a month to keep that campaign and number. Toll-free instead is $2 a month plus its own registration, and you skip the 10DLC stack. Neither figure includes the per-message transport rate. That rate is the country CSV, and it moves by carrier. This post will not substitute an old Amazon SNS cent.
Canada via toll-free is one of the few SMS rates printed in the footnotes: $0.00581 message fee and $0.00705 carrier fee. Do not use it as the US rate.
OTP stays on SMS
The managed OTP API generates a 6- to 8-digit code, sends it as SMS, and verifies it. You pay $0.045 per successful verification plus the SMS message price. That is the right tool for sign-in. It is a bad tool for a conversation. There is no thread, no logo, and no chip.
We recommend SMS, or this OTP API, for codes, and a phone pool for the support agent. The pool holds the RCS agent and this dedicated number, same use case. Plain text uses SendTextMessage with the pool id. RCS is attempted first. If there is no RCS signal in 25 seconds, SMS goes out from the number. That behavior is documented on the Sending RCS messages page and in the RCS guide.
The trade-off is two registrations. The win is a code path that does not wait on RCS country launch, and a support path that does not live inside 160 characters.
Do not put the code and the sale on the same campaign. The RCS use-case table and the 10DLC campaign are the same idea: carriers approved a purpose. A promotional body on an OTP number is how you lose the number.
Protect, MMS, and voice
SMS Protect is a per-message add-on. Monitor $0.01. Filter $0.01. Allow and Block are no extra charge. Filter does not charge the SMS fee for messages it blocks as artificial inflation. Protect does not replace a hard spend cap or a limit on the route that calls SendTextMessage. An open “text me a code” endpoint is still a bill, because each accepted send is still a send.
MMS in the US is $0.02 base + $0.01 carrier on 10DLC, toll-free, and short code. Canada long code and short code match that pair. Canada toll-free MMS is listed as not available. Use MMS when the fallback for an RCS card must keep an image. The rich-message post says FallbackConfiguration Channel can be MMS, and the fallback originator still has to be a phone number or sender ID.
Voice is outbound only, priced per minute. United States, Alaska, Hawaii, and US toll-free list at $0.013 per minute. You need a voice-enabled long code. A voice-only long code does not send SMS. Text-to-voice is a fallback for a reminder someone must hear, not the channel for an agent that expects a typed reply.
Two-way SMS needs a dedicated short code or long code. Inbound is how the support agent hears “where is my order” when RCS did not land. Put that inbound on SNS, then Lambda. The Lambda may read the order. It may not refund. Same rule as how AI agents reduce support work.
What broke — Account-level RCS send, with no origination identity, falls back onto whatever dedicated number the account owns. AWS’s sending page says an OTP can land on a toll-free number that was registered for appointment reminders. The detection is the event’s
originationPhoneNumber, not the message you thought you sent. The fix is one pool per use case, which is also the fix in the RCS guide. Shared SMS routes are not a valid RCS fallback. If the account has no dedicated originator for that country, the message fails rather than spilling onto a shared route.
Events can take up to 72 hours. After that, a missing final carrier event becomes UNKNOWN. Do not page on a five-minute silence and call it a failed OTP. Do page on a spike in UNKNOWN after the 72-hour window, and on Protect filter volume, which is the artificial-traffic signal.
Phone Number Validate is $0.006 per request. Use it before you send, when the number was typed into a form. It will not make an unregistered originator legal.
What to do this week
- Choose toll-free or 10DLC for OTP. Do not lease both “just in case.”
- If you choose 10DLC, vet the brand before you open the campaign. Put the $40 versus $41.50 question to the console line you are about to submit.
- Turn on Filter if the OTP route is on the public internet. Set a monthly spend limit anyway.
- Add that number to the RCS pool only after the campaign’s use case matches the RCS agent’s use case.
- Record the blocker in the channel planner as
10dlc_or_toll_free.
Reproduce this — Copy a
planrow forotpand one forwismo. Leaveunit_aws_fee_usdblank on the SMS transport until you download the current country CSV and write the carrier you actually send through. Milestone rows already hold the lease and Protect fees.
What this post doesn’t cover
The per-carrier US SMS CSV, throughput tiers after vetting, and short-code copy review. International sender-ID registration, which the country table still requires in many markets. RCS registration itself. WhatsApp templates. We are not publishing a deliverability percentage.
FAQ
Do I need 10DLC if I already have a toll-free number?
No. AWS says if you already send on a short code or a toll-free number, you do not have to add 10DLC. Toll-free in the US lists at $2 a month. 10DLC is the path when you want a local 10-digit number registered to one use case.
When should I not build the customer agent on SMS?
When the reply needs a brand logo, a card, or more than a short status. US Rich RCS text lists at $0.01194 per delivered segment and can fall back to this SMS number. Building the rich experience inside 160-character SMS throws away the RCS agent you are about to pay $200 a month to maintain.
What is the US SMS price per message?
The End User Messaging pricing page does not publish one US SMS rate. It publishes a per-carrier CSV. This post does not invent a cent. It quotes the fees that are printed as numbers: registrations, leases, MMS, Protect, OTP verification, and voice minutes.
What goes wrong if OTP and promotions share a 10DLC campaign?
Carriers approve a campaign for a use case. Mixing a password reset and a sale on the same number is the same class of mistake as mixing them on one RCS agent. Expect filtering, a review, or both. Keep OTP on its own campaign.
Does SMS Protect stop a fraud bill by itself?
Monitor and Filter each add $0.01 per message. Filter blocks suspected artificial inflation and does not charge the SMS fee on those blocked messages. Allow and Block add no Protect fee. You still need a spend limit and a rate limit on the endpoint that triggers the send.
Can I use a voice long code to text?
Only if that number is also SMS-enabled. The pricing page says voice-enabled long codes are not SMS numbers unless SMS is turned on for them. US outbound voice lists at $0.013 per minute.
AWS Cloud Architect & AI Expert
AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.




