Voice
Calls as code.
Voice you can read.
Every Dials call is a path. Identity authorizes it, a route shapes it, a record preserves 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 identity, the same signed record, the same line in the history.
- Outbound and inbound
- STIR/SHAKEN signed
- Per-call record
- Safe local environment
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 history. 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 join the same history 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 call from the console and watch the record land — line by line, signed end to end. No setup required.