Messaging

Messages on rails.
Consent on record.

SMS, MMS, and RCS that respect the law and the recipient. Templates are signed, opt-ins are recorded, and DNC state is enforced at the boundary.

At a glance

A messaging stack designed for autonomous senders.

Channels
SMS · MMS · RCS
One API, one audit trail, three transports.
10DLC
Brand + campaign
Brand registration and campaign vetting handled in-platform.
Consent
Signed + dated
Every opt-in is hashed and time-stamped at the source.
Suppression
DNC + STOP
STOP, UNSUBSCRIBE, and global DNC checked before send.

Send

One template.
Three transports.

Define a message once. Dials picks the cheapest viable transport (SMS, MMS, RCS) that matches the recipient's capability and consent state.

  • Signed templates
  • Per-recipient capability
  • Quiet hours by jurisdiction
  • Throughput-aware rate limit
HTTP
POST /api/messages/send
  { "to": "+15125550100",
    "template": "appt.reminder.v3",
    "consent_id": "csn_01HQT..." }
CLI
dials messages send \
  --to +1 512 555 0100 \
  --template appt.reminder.v3 \
  --consent csn_01HQT...
MCP
{
  "tool": "dials.messages.send",
  "arguments": {
    "to": "+15125550100",
    "template": "appt.reminder.v3",
    "consent_id": "csn_01HQT..."
  }
}

Consent

Opt-ins are evidence.

Each recorded opt-in carries the channel, the timestamp, the IP, the language, and the wording the recipient agreed to. Pull it any time. Hand it to a regulator any day.

  • Verifiable opt-in trail
  • Per-channel state
  • Withdrawal in one step
  • Exportable as JSON or PDF
dials · consent
Subject+1 512 555 0100
ChannelSMS · marketing
Opt-in2026-02-08 · 14:42:11Z
SourceWeb form · IP 198.51.100.42
WordingReceive appointment reminders
StatusActive

Send like you mean it.

Run the messaging flow in mock mode and verify every send carries a consent ID and a usage event before you ever wire a real carrier.