The API to scale your
RCS
Marketing campaigns, transactional alerts, and delightful conversations — built with a developer-first SDK. Send your first message in minutes.
# Docs: https://docs.pinnacle.sh/quickstart/rcs/python/send
from rcs import Pinnacle, RichTextMessage, RichButton_OpenUrl
client = Pinnacle(api_key="<api_key>")
client.messages.rcs.send(
request=RichTextMessage(
from_="agent_pinnacle",
to="+14155550199",
text="Check out our website for more information!",
quick_replies=[
RichButton_OpenUrl(
type="openUrl",
title="Open Url",
payload="https://www.pinnacle.sh/",
)
],
)
)# iMessage access is onboarded per-account — email founders@pinnacle.sh first.
# Once enabled, iMessage is delivered via the send_mms endpoint.
# Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
from rcs import Pinnacle
client = Pinnacle(api_key="<api_key>")
client.messages.mms.send(
from_="+14155550100",
to="+14155550199",
text="Hey! 👋 A note from Pinnacle.",
media_urls=["https://pinnacle.sh/og-image.png"],
)# Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
from rcs import Pinnacle
client = Pinnacle(api_key="<api_key>")
client.messages.mms.send(
from_="+14155550100",
to="+14155550199",
text="Hey! 👋 A note from Pinnacle.",
media_urls=["https://pinnacle.sh/og-image.png"],
)# Docs: https://docs.pinnacle.sh/quickstart/sms/python/send
from rcs import Pinnacle
client = Pinnacle(api_key="<api_key>")
client.messages.sms.send(
from_="+14155550100",
to="+14155550199",
text="Hello, world!",
)// Docs: https://docs.pinnacle.sh/quickstart/rcs/typescript/send
import { PinnacleClient } from "rcs-js";
const client = new PinnacleClient({ apiKey: "<apiKey>" });
await client.messages.rcs.send({
from: "agent_pinnacle",
to: "+14155550199",
text: "Check out our website for more information!",
quickReplies: [
{
type: "openUrl",
title: "Open Url",
payload: "https://www.pinnacle.sh/",
},
],
});// iMessage access is onboarded per-account — email founders@pinnacle.sh first.
// Once enabled, iMessage is delivered via the send_mms endpoint.
// Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
import { PinnacleClient } from "rcs-js";
const client = new PinnacleClient({ apiKey: "<apiKey>" });
await client.messages.mms.send({
from: "+14155550100",
to: "+14155550199",
text: "Hey! 👋 A note from Pinnacle.",
mediaUrls: ["https://pinnacle.sh/og-image.png"],
});// Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
import { PinnacleClient } from "rcs-js";
const client = new PinnacleClient({ apiKey: "<apiKey>" });
await client.messages.mms.send({
from: "+14155550100",
to: "+14155550199",
text: "Hey! 👋 A note from Pinnacle.",
mediaUrls: ["https://pinnacle.sh/og-image.png"],
});// Docs: https://docs.pinnacle.sh/quickstart/sms/typescript/send
import { PinnacleClient } from "rcs-js";
const client = new PinnacleClient({ apiKey: "<apiKey>" });
await client.messages.sms.send({
from: "+14155550100",
to: "+14155550199",
text: "Hello, world!",
});# Docs: https://docs.pinnacle.sh/quickstart/rcs/ruby/send
require "rcs"
client = Pinnacle::Client.new(api_key: "<api_key>")
client.messages.rcs.send_(
from: "agent_pinnacle",
to: "+14155550199",
text: "Check out our website for more information!",
quick_replies: [
{
type: "openUrl",
title: "Open Url",
payload: "https://www.pinnacle.sh/"
}
]
)# iMessage access is onboarded per-account — email founders@pinnacle.sh first.
# Once enabled, iMessage is delivered via the send_mms endpoint.
# Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
require "rcs"
client = Pinnacle::Client.new(api_key: "<api_key>")
client.messages.mms.send_(
from: "+14155550100",
to: "+14155550199",
text: "Hey! 👋 A note from Pinnacle.",
media_urls: ["https://pinnacle.sh/og-image.png"]
)# Docs: https://docs.pinnacle.sh/api-reference/messages/send-mms
require "rcs"
client = Pinnacle::Client.new(api_key: "<api_key>")
client.messages.mms.send_(
from: "+14155550100",
to: "+14155550199",
text: "Hey! 👋 A note from Pinnacle.",
media_urls: ["https://pinnacle.sh/og-image.png"]
)# Docs: https://docs.pinnacle.sh/quickstart/sms/ruby/send
require "rcs"
client = Pinnacle::Client.new(api_key: "<api_key>")
client.messages.sms.send_(
from: "+14155550100",
to: "+14155550199",
text: "Hello, world!"
)// Docs: https://docs.pinnacle.sh/mcp
// Pinnacle MCP exposes messaging tools to any AI agent
// (Claude Desktop, Claude Code, Cursor, Windsurf — any MCP client).
//
// USER PROMPT (natural language):
// "Send an RCS to +14155550199 announcing their order shipped,
// with a button that opens our tracking page."
//
// AGENT TOOL CALL (MCP wire format — generated automatically):
{
"method": "tools/call",
"params": {
"name": "send_rcs",
"arguments": {
"to": "+14155550199",
"from": "agent_pinnacle",
"text": "Check out our website for more information!",
"quickReplies": [
{
"type": "openUrl",
"title": "Open Url",
"payload": "https://www.pinnacle.sh/"
}
]
}
}
}// iMessage access is onboarded per-account — email founders@pinnacle.sh first.
// Once enabled, iMessage is delivered via the send_mms tool.
// Docs: https://docs.pinnacle.sh/mcp
//
// Pinnacle MCP exposes messaging tools to any AI agent
// (Claude Desktop, Claude Code, Cursor, Windsurf — any MCP client).
//
// USER PROMPT (natural language):
// "iMessage +14155550199 a welcome image with a short note."
//
// AGENT TOOL CALL (MCP wire format — generated automatically):
{
"method": "tools/call",
"params": {
"name": "send_mms",
"arguments": {
"to": "+14155550199",
"from": "+14155550100",
"text": "Hey! 👋 A note from Pinnacle.",
"mediaUrls": ["https://pinnacle.sh/og-image.png"]
}
}
}// Docs: https://docs.pinnacle.sh/mcp
// Pinnacle MCP exposes messaging tools to any AI agent
// (Claude Desktop, Claude Code, Cursor, Windsurf — any MCP client).
//
// USER PROMPT (natural language):
// "Send +14155550199 a welcome image with a short note."
//
// AGENT TOOL CALL (MCP wire format — generated automatically):
{
"method": "tools/call",
"params": {
"name": "send_mms",
"arguments": {
"to": "+14155550199",
"from": "+14155550100",
"text": "Hey! 👋 A note from Pinnacle.",
"mediaUrls": ["https://pinnacle.sh/og-image.png"]
}
}
}// Docs: https://docs.pinnacle.sh/mcp
// Pinnacle MCP exposes messaging tools to any AI agent
// (Claude Desktop, Claude Code, Cursor, Windsurf — any MCP client).
//
// USER PROMPT (natural language):
// "Text +14155550199 to confirm their appointment."
//
// AGENT TOOL CALL (MCP wire format — generated automatically):
{
"method": "tools/call",
"params": {
"name": "send_sms",
"arguments": {
"to": "+14155550199",
"from": "+14155550100",
"text": "Hello, world!"
}
}
}Python, TypeScript, Ruby, and an MCP server — pick your stack
Millions
of messages delivered across RCS, SMS, MMS, and iMessage
99.99%
uptime across production traffic
SOC 2
Enterprise-grade security, compliance, and data handling
Built by engineers from
Sending messages daily for
Major credit union in New York City
National US life insurance company
National specialty retail chain
Series C consumer startup
Multi-state US healthcare system
Logos hidden at customer request · Public case studies coming soon
SMS
RCS
Interactive messaging, not plain text
Move beyond a 160-character text. Pinnacle delivers rich cards, carousels, and quick replies on RCS and iMessage, image and video bubbles on MMS, and universal delivery on SMS — all from one API. Your customers get the richest experience their phone supports, automatically.
Try it outLive on every protocol 2-3x faster.
One API for RCS, iMessage, MMS, and SMS. Under a minute to your first sandbox message. 10DLC campaigns approved in 1–2 days, RCS agents in 1–2 weeks — all with the compliance paperwork automated on your behalf. You ship faster than anyone running Twilio, Sinch, or Infobip.
# Docs: https://docs.pinnacle.sh/quickstart/rcs/python/send
from rcs import Pinnacle, RichTextMessage, RichButton_OpenUrl
client = Pinnacle(api_key="<api_key>")
client.messages.rcs.send(
request=RichTextMessage(
from_="agent_pinnacle",
to="+14155550199",
text="Check out our website for more information!",
quick_replies=[
RichButton_OpenUrl(
type="openUrl",
title="Open Url",
payload="https://www.pinnacle.sh/",
)
],
)
)Deliverability
Every message delivered
Identify if a phone number can receive RCS ahead of time, number lookup for deliverability, and get higher throughputs with secondary vetting and short codes
Collaboration
View conversations in real time
Send RCS and SMS messages, share conversations and specific messages with your team, and add contact info and notes for each conversation
Development
Elevate your developer experience
With webhooks that make the transition from dev to prod seamless to our end-to-end compliance API, Pinnacle makes it easy to iterate on new messaging flows.
Start Messaging Today
SMS, MMS, iMessage, and RCS on one API — priced for your volume.
One plan. Every feature.
Custom pricing tailored to your volume and use case. Book a demo and we'll get you live in days, not weeks.
We'll match and beat your current per-message price
Messaging
- SMS, MMS, RCS, and iMessage on one API
- Rich cards, carousels, and quick replies
- Unlimited RCS agent registrations
- Bulk sends and audience segmentation
Compliance & Delivery
- 10DLC and Toll-Free registration
- Expedited white-glove approvals
- Priority carrier relationships
- Number intelligence and lookup
Developer Experience
- Webhooks and comprehensive logs
- Test numbers and RCS test agents
- Audiences, contacts, and conversations
- Custom volume-based pricing
Enterprise
- Custom iMessage support
- Dedicated support engineer
- Custom SLA guarantees
- SSO/SAML and audit logs
30-minute working call with an engineer. We'll architect your messaging stack together — no slides.
We evaluated several RCS APIs and Pinnacle stood out for its RCS sandbox messaging, simple RCS agent submissions, and easy-to-understand API.
The Pinnacle team partnered with us every step of the way, including adding new features to better control RCS messages, handling our compliance, and ensuring deliverability.

Justin Zheng
Co-founder
90% reduction
in RCS agent application time
Start building with Pinnacle
One API for RCS, iMessage, MMS, and SMS. Upgrade your messaging and start building for the future.
