Voice
Calls as code.
Voice you can read.
Every Dials call is a path. A scope authorizes it, a route shapes it, a usage event records it. Whether a human is dialing or an agent is, the surface is the same.
At a glance
What voice looks like on Dials.
Programmable
One call.
One verified path.
Place an outbound call from your console, your CLI, or any MCP-aware agent. The same scoped session, the same signed event, the same line in the ledger.
- Outbound and inbound
- STIR/SHAKEN signed
- Per-call usage event
- Mock by default
POST /api/calls/outbound
{ "to": "+15125550100",
"from": "+15125550199",
"agent": "reception" }dials calls dial \
--to +1 512 555 0100 \
--from +1 512 555 0199 \
--agent reception{
"tool": "dials.calls.dial",
"arguments": {
"to": "+15125550100",
"from": "+15125550199",
"agent": "reception"
}
}Real-time media
Bring the model.
We bring the wires.
Dials owns the call leg, the signing layer, the consent state, and the audit ledger. Your model owns the conversation. The two meet at a clean media interface.
- Bidirectional audio
- Whisper/local STT optional
- Barge-in supported
- Latency-aware routing
Async voice
Voicemail
is a first-class object.
When the conversation isn't live, the recording, transcript, and intent classification land in the same usage ledger as everything else. A missed call is still part of the record.
- Voicemail drop
- Per-language transcription
- Intent + summary
- Routing back to a seat
On the wire
A call is a path. A path has a policy. A policy is something you can read.
The Dials voice model.
Hear it for yourself.
Place a mock call against your scoped session and watch the event land in the ledger. No carrier credentials required.