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

AmazonGoogleHarvardY Combinator

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

RCS messaging
Traditional SMS messaging

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 out

Live 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.

Intuitive API & SDKs

Send and receive messages with ease.

/
# 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.

divider

Start Messaging Today

SMS, MMS, iMessage, and RCS on one API — priced for your volume.

Everything included

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 Profile Picture

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.

Questions about messaging?

See our commonly asked questions

FAQ

Start building today

Send your first message in minutes

Quickstart guides

© 2026 Pinnacle Software Development, Inc.