New webhook event: CAMPAIGN.STATUS
Subscribe to per-campaign status changes — including per-carrier launch state (AT&T, T-Mobile, Verizon, other carriers) and verification state for AEGIS and Google.
What’s new?
- New
CAMPAIGN.STATUSwebhook event type. Subscribe by attaching a webhook to an RCS agent sender — this event is only supported for agent senders, not phone numbers. Pin a webhook to this event in the dashboard, or leave the event filter unset to receive every event your agent emits. - Each payload includes the agent reference (
agent.id+agent.name), the connected campaign (campaign.publicId,campaign.type), the brand reference, the resolvedcarrierLaunchessnapshot, and the change timestamp. carrierLaunchesis split into two groups with human-readable statuses:carriers(ATT,TMOBILE,VERIZON,OTHERS) — eachNOT_LAUNCHED/PENDING/LAUNCHED.verification(AEGIS,GOOGLE) — eachNOT_SENT/SENT/VERIFIED.
Hosted Forms
Collect structured responses from your recipients with Pinnacle-hosted forms. Mint a form URL, deliver it over SMS or RCS in the same call, and receive completed submissions as a new FORM.SUBMISSION webhook event.
Browse, build, and theme forms in the Pinnacle Dashboard → Forms.
What’s new?
Form endpoints
POST /forms— create a form without sending it (returns the publichttps://forms.pinnacle.sh/{form_id}URL).POST /forms/send— create (or reuse) a form and deliver its URL over SMS or RCS in one call. Whentois provided, Pinnacle dispatches the message and the recipient is recorded on the response (submission.toplus the outboundmessage_id). Omittoto mint a standalone submission URL for embedding in your own outreach.GET /forms/{id},PATCH /forms/{id}— retrieve and partial-update a form.POST /forms/list,POST /forms/{id}/submissions/list— paginated listings of forms and of their completed submissions.
16 field types out of the box
Text, textarea, email, url, phone (auto-formats + E.164-normalized on submit), number, range slider, rating stars, date, time, datetime, color picker, select, radio group, checkbox group, and an address input with built-in Google Places autocomplete.
Theme overrides
Per-form theme_override layered on top of your team’s default theme — tweak colors, background (solid / gradient / pattern / image), font family, corner radius, submit button label, success message, and post-submission redirect URL. Configure team-wide defaults from the Pinnacle Dashboard → Forms.
Updatable submissions
Set can_update: true to let a recipient reopen their submission URL and edit their answers. The form rehydrates with their prior values; submission_count reflects distinct recipients and last_submitted_at tracks the latest edit.
New webhook event: FORM.SUBMISSION
When a recipient completes a form, every webhook subscribed to the sender receives a FORM.SUBMISSION event. The payload carries the sender, an optional conversation reference, the form summary, and a resolved snapshot of every field paired with the submitted value — ready to render or route on without a separate get_form call. Manage subscribers from the Pinnacle Dashboard → Webhooks.
See the Receiving Messages and User Events guide for full routing details.
Custom Webhook Headers
Attach custom HTTP headers to any webhook so your endpoint can authenticate incoming events, route them to the right tenant, or integrate with auth-gated infrastructure without a proxy in between.
What’s new?
Custom headers on webhooks
- Pass a
headersobject onPOST /webhooks/attachwhen creating a new webhook or when attaching an existingwebhookId - Supplying
headerswith an existingwebhookIdoverwrites the stored headers — omit the field to leave existing headers unchanged - Headers are returned on every webhook response (
list_webhooks,get_webhooks,attach_webhook) so you always see what will be sent - Every webhook delivery includes the headers you configured alongside the standard
PINNACLE-SIGNING-SECRET
Header rules
- Header names must match
^[A-Za-z0-9][A-Za-z0-9_-]*$— start with a letter or digit, contain only letters, digits,-, or_ - Names are case-insensitive (per RFC 9110) and normalized to uppercase before storage
- Values must be strings
- The reserved
PINNACLE-SIGNING-SECRETheader is silently stripped and cannot be overridden — Pinnacle always sets it with your signing secret for request verification
Use cases
- Add an
AUTHORIZATION: Bearer …header so your webhook endpoint can sit behind the same auth as the rest of your API - Include a tenant identifier (
X-TENANT-ID) to route multi-tenant deliveries without parsing the payload - Pass an
X-API-KEYfor legacy systems that require pre-shared keys
Usage Analytics, New Guides & Blog Launch
Track your real message spend in the dashboard, explore rewritten guides, and check out 20+ new blog posts on pinnacle.sh/blog.
What’s new?
Live usage analytics
The analytics dashboard now shows your real-time messaging volume and spend.
- RCS, SMS, and MMS usage charts with a default 30-day window
- Combined credit balance showing purchased and subscription credits side-by-side
- Improved validation feedback when creating test agents — errors now tell you exactly which fields need attention
Updated documentation
- Sending messages — expanded with coverage on broadcasting to audiences, typing indicators, and message reactions
- Receiving messages — expanded with a step-by-step webhook setup walkthrough and structured event-type reference
- Test agents — updated to reflect that test agents support the full RCS feature set (rich cards, carousels, buttons, media), limited only to your whitelisted numbers
- Ruby quickstarts — updated to use the SDK’s
process()method for webhook verification and idiomatic snake_case, now on SDK v2.0.15
Better RCS error messages
When whitelisting testers, you’ll now get clear error messages if the carrier requires your agent to be launched first — instead of a generic rejection.
Blog launch
We published 20+ posts on pinnacle.sh/blog covering everything from getting started to platform deep-dives:
- RCS Test Agents: Send Your First Rich Message in Under Two Minutes
- RCS Fallback: Automatic SMS/MMS Delivery for Every Recipient
- Bulk Messaging: Send to Thousands of Contacts at Once
- Validate Before You Send: Message Validation for SMS, MMS, and RCS
- Pinnacle vs. Twilio | vs. Attentive | vs. AWS
Bulk Webhook Management
Webhook management just got simpler — attach and detach webhooks to multiple senders in a single API call.
What’s new?
Bulk webhook attach/detach
- Attach webhooks to multiple senders at once via
POST /webhooks/attach— pass an array of phone numbers and/or RCS agent IDs - Detach webhooks from multiple senders via
POST /webhooks/detach— remove webhook routing in bulk - Simplified
sendersfield replaces the previous per-number configuration - Detach now works regardless of webhook status
No more looping through numbers one at a time — configure all your webhook routing in a single request.
Simplified RCS Campaigns
RCS campaign submissions just got easier — we’ve streamlined the required fields so you can get approved faster with less friction.
What’s new?
Simplified RCS campaign submissions
We’ve removed deprecated and redundant fields from the RCS campaign schema. Submitting a campaign now requires fewer fields while still meeting carrier compliance requirements.
- Removed legacy profile fields that are no longer needed
- Added
cta_mediafor attaching compliance media (e.g., opt-in screenshots) - Added
opt_in_methodto clearly describe how users consent to receive messages - Updated
use_case_descriptionfor clearer campaign intent
These changes reduce the back-and-forth during carrier review and help you get your RCS agents approved faster. See our RCS campaign compliance guide for details.
Conversations, Reactions & More
New conversation threading, message reactions, validation endpoints, URL shortening, and an expanded MCP server.
What’s new?
Conversations API
Messages between a sender and recipient are now grouped into conversation threads — the backbone of inbox-style experiences.
- List conversations filtered by brand, campaign, sender, or receiver
- Get a conversation by ID or phone number pair
- List messages within a conversation with pagination
- Update conversation notes for internal tracking
Message reactions
React to messages with emoji using POST /messages/react. Messages support multiple reactions.
Message validation
Validate SMS, MMS, and RCS messages before sending — check segment count, encoding, unsupported files, and estimated cost without consuming credits.
URL shortener
Create tracked short links (pncl.to) with click analytics, configurable expiration, and updatable destinations.
MCP Server — 89 tools
The Pinnacle MCP server now exposes 89 tools (up from 71 at launch), covering conversations, webhooks, test agents, and more.
Feedback, Support & SOC 2
New in-app feedback tools and SOC 2 compliance infrastructure to keep your data secure and your voice heard.
What’s new?
Feedback & support
A new feedback button is now available directly in the dashboard — ask questions about our docs, submit feature requests, report bugs, or reach out to support without leaving your workflow. Help documentation is also accessible from the dashboard header.
SOC 2 compliance
We’ve implemented automated audit log exports and database backup infrastructure to meet SOC 2 requirements. Your messaging data is backed by enterprise-grade security and compliance controls.
RCS Test Agents & Carrier Status
Go from zero to your first RCS message in under 2 minutes — no campaign approval required. Create a test agent, whitelist your number, and start sending rich messages right away.
What’s new?
RCS test agent management API
Every Pro account gets up to 5 test agents to experiment with RCS before going through the full campaign approval process. With the new test agent API, you can:
- Create a test agent via
POST /rcs/test/agents— set up branding, contact info, and colors in a single call - Whitelist your number via
POST /rcs/test/agents/{agentId}/whitelist— register your device to receive test messages - Send your first RCS message — once whitelisted, you can immediately send rich messages with cards, buttons, and media through your test agent
You can also update agents and check whitelist status programmatically, making it easy to integrate into your development workflow.
RCS carrier launch status
You can now see the launch status of your RCS agents across each carrier directly in the dashboard and API. Each agent shows per-carrier status — NOT_LAUNCHED, PENDING, or LAUNCHED — so you know exactly where your agent stands before going live.
Inbox Embed
The embedded components library now includes an Inbox, allowing you to add a full-featured messaging inbox directly into your website.
What’s new?
Inbox embed
Give your users a complete RCS and SMS messaging experience — conversations, message history, rich media, and real-time updates — all in a single iframe.
- Token-based authentication with scoped permissions
- Filter conversations by brand, sender, or simply show everything for a team
- Customizable colors with
primaryColor - Real-time message and conversation updates
Send RCS Message updates
Send RCS Message embed has been updated to use the new v2 token-based flow — message configuration is now securely encoded in the signed token on your backend.

