Skip to content
New: the dialpress Node SDK. Route SIP like Express and put an agent on any call.Get started
DialPress
DialPress
Developers

Program the phone network

Everything in the dashboard is in the API: calls, messages, media, routing flows, agents, and recordings, with a generated OpenAPI reference.

Getting startedterminal
$ npm install dialpress added 1 package, TypeScript types included $ export DIALPRESS_TOKEN=sk_live_… $ node pbx.js ✓ connection READY · gateway agi.dialpress.ai ✓ claimed /internal /inbound · methods INVITE REGISTER MESSAGE INVITE /inbound/15550100 → handoff /ai/front-desk

Get started

From install to your first answered call.

01

Install

npm install dialpress. TypeScript types are included.

02

Connect

Connect to the gateway with a token and claim the paths your app serves.

03

Answer

Write an app.invite handler, call your number, and watch it answer.

Five ways in

Use the one that fits your stack.

02

REST API

Place and answer calls, send messages, and manage agents and routing flows. Scoped tokens, shown once.

04

Events and webhooks

Call state, keypresses, registrations, messages, recordings, and routing runs, live or replayed from any offset.

Routes like Express

app.invite, app.register, app.message: every SIP method is a router verb, with Router(), middleware, params, async handlers, and error handling as in Express 5. Digest auth is one middleware.

pbx.js
const dialpress = require('dialpress') const app = dialpress() app.register('/internal/:ext', auth, (req, res) => res.status(200).set('Contact', req.get('Contact')).end()) app.message('/internal/:ext', (req, res) => res.proxy(`user:${req.params.ext}`)) app.invite('/internal/:ext', async (req, res) => { const { outcome } = await res.dial(`user:${req.params.ext}`, { timeout: 20 }) if (outcome === 'busy') return res.sendStatus(486) res.end() }) app.invite('/inbound/:did', (req, res) => res.handoff('/ai/front-desk')) app.connect({ address: 'agi.dialpress.ai' })
An AI voice botbot.js
const dialpress = require('dialpress') const bot = dialpress() bot.invite('/ai/:name', async (req, res) => { await res.answer() const media = await res.media({ sampleRate: 16000 }) media.on('audio', (pcm) => stt.write(pcm)) // caller voice llm.on('reply', async (t) => media.play(await tts(t))) vad.on('speech', () => media.clear()) // barge-in res.on('dtmf', (d) => d === '0' && res.handoff('/internal/0', { summary: llm.summary() })) }) bot.connect({ address: 'agi.dialpress.ai', pathPrefixes: ['/ai'] })

An AI voice bot is just another app

A bot claims its paths, answers, and opens the call’s audio with res.media(): caller PCM in for speech recognition, your text to speech out in real time, clear() for barge-in. When it is done, res.handoff() passes the live call to a person with a summary.

What the SDK gives you

Every SIP method

invite, register, message, subscribe, refer, and the rest, plus in-dialog requests on the call’s path.

Call verbs

dial, play, gather, queue, proxy, redirect, and transfer: the building blocks of a PBX or IVR.

Apps compose by path

Several apps share one gateway. A call moves between them with res.handoff() and keeps its call ID.

Live call audio

res.media() streams 16-bit PCM both ways, with markers and barge-in.

Events and CDRs

Call state, DTMF, and call detail records as events, with app.hangup() after every call.

A local simulator

Test routes and bots against a simulated SIP server before you point them at production.

Common questions

Which languages can I use?

The dialpress SDK is for Node.js and TypeScript. The REST API, WebSocket media streams, gRPC, and MCP work from any language.

Can I bring my own LLM and speech models?

Yes. Use OpenAI or Gemini for agents, and open speech models on your GPUs or a cloud speech provider.

Can I self-host DialPress?

Yes, on one Linux server, with Docker Compose, or on Kubernetes with Helm. Your apps work the same on our cloud or yours.

Does it work with my phone numbers?

Yes. Port numbers in for free, or connect your SIP trunks and PBX.

Build on the voice layer.

14-day free trial, 250 AI voice minutes, full API access.