pstn/dev

/ Programmable voice CPaaS

Outbound calls at $0.05/min.Agents at $0.06.

Per-second billing. Prepaid wallet. Default spend caps — $50 a day, $1,000 a month— on every new account. Add a card, get $5 credit. We don't charge it.

real call recording · click to play

Built onJambonzSinchCartesiaDeepgramGroq

Four products. One platform.

Pick what you need. Pay by the second.

Full pricing & carrier fees

AI Voice Agent

Hosted voice agent, AI compute included.

$0.06per minute

STT + LLM + TTS + telephony. One bill. Sub-second time-to-first-audio.

SIP Trunk

BYO carrier voice, in and out.

$0.05per minute

Plug your own Asterisk / FreeSWITCH / LiveKit / Pipecat into our SIP edge.

Phone Numbers

Buy and route US DIDs in seconds.

$1.50per number / month

Search by area code, attach to a trunk or AI agent, port-out anytime.

[ early access ]

SMS Outbound

Programmable A2P messaging.

$0.012per segment

US 10DLC and Toll-Free, pass-through carrier fees published transparently.

Path of a call

Three hops between a phone and your code.

Carrier audio lands on our edge in Hillsboro, Kamailio routes it into a Jambonz session, your agent (or your SIP trunk) gets the streaming media. Sub-100ms post-dial delay. STIR/SHAKEN attestation included.

  1. 01

    Caller

    +1 (415) 555-0100

  2. 02

    pstn.dev edge

    Jambonz · Kamailio · Sinch

  3. 03

    Your agent

    STT → LLM → TTS

REST + Webhooks

One API for the whole call.

POST a call. Pass an agent_id and we run STT, model, and voice — billed per second. Pass a trunk_id and bridge to your own SIP endpoint instead.

  • POST /v1/calls
  • POST /v1/agents
  • POST /v1/sip-trunks
  • POST /v1/phone-numbers/buy
  • POST /v1/verifications
import Pstn from 'pstn-node';

const pstn = new Pstn(process.env.PSTN_API_KEY);

const call = await pstn.calls.create({
  to:    '+15558675309',
  from:  '+14155552671',
  agent: 'agent_01HX4P5Q9KZ2',
  metadata: { lead_id: 'lead_2912' },
});

console.log(call.id, call.status);
// → call_01HX4PKQX9V2T6HMEWFYZGTX21 queued

Latency budget

Where the 530ms goes.

A voice agent is a stack of vendors, each with their own clock. Here's ours, broken out so you can audit it before you ship.

Carrier ingress → STT first partial

Deepgram Nova-3 streaming, Hillsboro edge.

~180ms p50

STT final → LLM first token

Groq Llama 3.3 70B. No caching tricks.

~140ms p50

LLM first token → TTS first audio out

Cartesia Sonic Turbo, streaming chunks.

~210ms p50

Time-to-first-audio target: ≤ 640ms p50 · ≤ 900ms p95 on a real PSTN handset. Measured weekly. Status published at status.pstn.dev.

What you watch in production

Every call is a structured event stream.

Live transcript, RTT, codec, accrued cost — all webhooked to your backend in real time. The CDR is signed on hangup so you can reconcile against your own ledger without trusting our totals.

  • call.started · call.transcript.partial
  • call.tool.invoked · call.transferred
  • call.ended · cdr.signed
in-progress·call_01HX4PKQX9V2T6HMEWFYZGTX21
duration
00:14
accrued
$0.0140
codec
G.711µ · 8kHz
rtt p50
47ms
  • agentHi, this is Ada from Northwind. Got a sec to talk about the demo?
  • callerYeah, sure — what's it about?
  • agentQuick version: we cut your build time in half. Want me to send a calendar link?
  • callerYeah, send it
events streamed via webhook · CDR signed on hangup

$5 on signup

Add a card. Get $5. We don't charge it.

A card on file is how we keep burner-email farms out — not how we sneak in a first charge. Auto-recharge stays off until you turn it on. Wallet hits zero, calls stop. No overdraft, no surprise bill.

Place a phone call with one POST.

REST, webhooks, signed CDRs. No carrier negotiation. No 60-day net terms. Just an API key.