Power dialer for developers
Your agents make calls.
You don't touch telephony.
One middleware, one hook. Upload contacts, start a campaign, and your team is live — with real-time transcripts, AI summaries, and every compliance rule enforced automatically.
// The only backend code you write
import { DialerAuth } from '@dialer/node'
app.use(DialerAuth({
apiKey: process.env.DIALER_API_KEY,
getAgentId: (req) => req.user.id
}))
// The only frontend code you write
import { useDialer, CallCard } from '@dialer/react'
export default function Agent() {
const { activeCall, endCall } =
useDialer({ authUrl: '/dialer-auth' })
return activeCall
? <CallCard call={activeCall} onEnd={endCall} />
: <div>Waiting for a call...</div>
}
Everything else — dialing, bridging, transcription, compliance — is the platform's job.
What happens
when a call connects
The platform dials. When a human answers, the bridge connects in under two seconds. No dead air.
Events stream over SSE — no webhooks, no public URLs.
Works on localhost without ngrok.
Everything you
didn't want to build
Your team writes two files. The rest runs on the platform and never goes wrong on a call.
On by default.
Not a configuration.
You don't turn compliance on. You'd have to actively work to turn it off — and we don't let you.
One number.
No surprises.
A seat fee covers normal usage. Overage only kicks in when your team is working hard — which is a good problem to have.
The API is the product.
Everything the dashboard can do, the API can do. Secret key auth, full TypeScript types, 100 req/min.
sk_...) · SHA-256 hashed100 req/min · Full TypeScript types
OpenAPI spec · Docker Compose test environment
Ready to ship
your calling team?
Sign up, upload contacts, start your first campaign. No telephony experience required.
$99/seat/month · cancel anytime