voepy
Cloud communications platform

Smarter voice.Stronger connections.

Calling, conferences, IVR, real-time streaming — every call control verb, one API. 30–60% cheaper than Twilio. Real billing transparency, no premium-route surprises.

  • No credit card
  • Sandbox mode
  • Full API in 5 min
30–60%
below Twilio
<200ms
p99 webhook
99.97%
90d uptime
voepy · Outbound
connected
Active call · queue 03 / 47
Acme Corp · Jordan Reeves
+1 (512) 555-0100 → +1 (555) 867-5309
00:23
duration
Mute
Hold
Recording
Transfer
End
Latency
112ms p99
Region
us-east-1
Cost
$0.00109
Event stream
live
  • 00:21.4answer.received112ms
  • 00:22.0recording.startedok
  • 00:23.1ledger.debit$0.00109
Built for
  • Sales dialers
    Outbound at 10k/day, AMD before connect
  • Call centers
    Inbound DID → conference → recording
  • Telehealth
    HIPAA-aware recording + waiting rooms
  • Logistics dispatch
    Driver bridges, geo-aware routing
  • Appointment reminders
    Scheduled out + DTMF confirmation
  • Verification calls
    OTP delivery, fraud-screening flows
The problem·03 issues

Voice infrastructure shouldn't be this opaque.

The hidden tax of legacy voice — and why building on top of it bleeds margin every day.

No. 01Peak-hour shock

Premium-route sticker shock

You priced a US-domestic call at $0.0085. The invoice landed at $0.014 because traffic took a route nobody told you about. Your CFO wants a model. The model assumes one rate.

$0.0055
hidden per minute on Twilio
No. 02Verb gaps

Verbs you can't reach

Production wants per-participant broadcast. The SDK exposes mute and nothing else. Now you're patching TwiML strings in your handler. The carrier itself supports the verb — but you can't.

12 verbs
missing through Twilio's surface
No. 03Quiet drift

Reconciliation drift

Carrier CDR says 1.84 minutes. Your invoice says 1.92. Multiply by ten thousand calls and the gap funds someone's quarter — not yours. You want to SELECT * from that drift. You can't.

0.4–1.1%
monthly drift, unaudited
04/12
Why voepy

Four reasons your next voice stack should be ours.

The pitch in four cards. Real numbers, real method names. No marketing flourish.

01 / Pricing

30–60% below Twilio. Same minute, lower price.

Direct per-minute carrier rates with transparent flat pricing. Every call shown line-by-line in your ledger — no premium routes hidden in the small print.

View live rate card
US-domestic outbound
Twilio
$0.0140/min
US-domestic outbound
voepy
$0.0085/min
39% less
02 / Surface

Every call control verb, exposed 1:1.

Calls, conferences with hold/mute/broadcast, IVR primitives, recording, AMD, real-time streaming, transcription. Carrier-grade and complete from day one.

See full surface
calls.dial
conferences.create
calls.bridge
conferences.hold
calls.refer
conferences.mute
calls.fork.start
conferences.play
calls.gather
conferences.speak
calls.amd
conferences.record
streaming.start
transcription.start
calls.hangup
numbers.lease
03 / Billing

Prepaid balance. Ledger-backed every cent.

Top up via Stripe. Watch your balance debit in real time. Every charge has a row you can SELECT * from. Daily reconciliation against carrier CDRs — drift over 1% pages on-call.

See pricing
tsidmincostmarkup
12:04:18.221call_01HX3K…0.32$0.00272$0.00109
12:03:47.108call_01HX3J…1.84$0.01564$0.00626
12:03:11.954call_01HX3H…0.06$0.00051$0.00020
12:02:55.713conf_01HX3G…4.21$0.07578$0.03032
04 / Routing

Drop-in inbound router. No SIP refer dance.

Carrier → answer → conference → bridge → record. The full inbound-router pattern works through one API. Carrier SIP retry dedup is built in.

See the pattern
carrieranswerconferencebridge Brecord
How it works·03 steps

Live in under five minutes.

From signup to a real call: three steps, no install, no card, no demo on the calendar.

Step 0160 seconds

Pull your key

Sign up. We seed your account with $5 of test balance and a real US number. The sandbox key works against the same surface as production — no card, no contract.

sandbox key14d
tlx_test_9f7c4b1a02e83d6e1c0a9b1f72
balance$5.00
01 of 3
Step 025 minutes

Make your first call

One curl, one webhook URL. Verb names match the docs. Response shapes match production. Replay traffic from your existing handler with two header swaps.

POST /v1/calls200
curl api.voepy.com/v1/calls
to +1 512 555 0100
verb dial
↳ call_01HX3K2P9R
02 of 3
Step 03Day 1, prod

Wire it in

Flip the env var. Watch your ledger debit per call in real time. Set a per-tenant spend cap. Reconciliation runs nightly — drift over 1% pages on-call, not you.

live · production4 events
  • call.answered112ms
  • amd.machine42ms
  • recording.readyok
  • ledger.debit$0.00109
03 of 3
avg first call 4m 41sno cardno installStart now
06/12
Migration

Migrating from Twilio? Change two imports.

Same surface for the things that matter — dial, hangup, gather, record. We expose call control directly via REST, not XML markup.

Twilio
before.ts
import twilio from 'twilio'

const client = twilio(SID, TOKEN)

await client.calls.create({
  from: '+15125550100',
  to:   '+15558675309',
  url:  'https://example.com/twiml.xml',
})
voepy
after.ts
import { voepy } from '@voepy/sdk'

const client = new voepy({ apiKey: KEY })

await client.calls.dial({
  from: '+15125550100',
  to:   '+15558675309',
  record: 'on-demand',
})

Stuck on XML markup? An adapter shim lets you point your existing <Response> URL at us and migrate piece-by-piece. Otherwise, prefer call control: it's faster to debug, and the latency tail is half.

07/12
Pattern

Build a call center in 50 lines.

No SIP refer dance, no custom bridge orchestration. Conferences are the bridge. Recording starts on the conference, not the leg.

Inbound flow
~25 lines · idempotent
Caller+1 (312) 555-011801call.initiatedwebhook → /webhooks/voepy02calls.answerPOST /v1/calls/{id}/actions/answer03conferences.createPOST /v1/conferences04aconferences.dialIn→ leg B (agent)04bconferences.recordStart+ transcriptionStartcarrier dials our DIDanswerPOST /v1/conferencesparallelon conf
inbound.ts
typescript
// 1. Mount the inbound webhook
app.post('/webhooks/voepy', async (req, res) => {
  const { event_type, payload } = req.body.data

  if (event_type === 'call.initiated') {
    await client.calls.answer(payload.call_control_id)

    const conf = await client.conferences.create({
      call_control_id: payload.call_control_id,
      name:            `call-${payload.call_session_id}`,
    })

    // dial leg B → connect an agent
    await client.conferences.dialIn(conf.id, {
      to:   pickAgent(payload.from),
      from: payload.to,
    })

    await client.conferences.recordStart(conf.id, { format: 'mp3' })
    await client.conferences.transcriptionStart(conf.id)
  }

  res.sendStatus(200)
})

Either party hangs up → conference ends, recording saved, transcription processed, webhook delivered. Carrier-side SIP retry dedup is built in — your handler stays idempotent.

Brand·03 frames

voepy in the wild.

One mark, one neon-on-black palette, and a quiet typographic system. The voice is the product — the rest just stays out of its way.

voepy product on a laptop and iPhone — outbound call dashboard
01/Product
Product
Smarter voice. Stronger connections.
voepy reception with the neon-green wordmark on a black wall
02/Workspace
Workspace
One black wall, one neon sign, one team.
voepy stationery — notebook, business cards, ID badge, letterhead
03/Stationery
Stationery
Cards, badges, letterhead — the print system.
Primary
#B6FF1A
hsl 78 100% 56%
Type
GeistInstrument
sans · serif italic accent · mono
Mark
voepy
cone · 3 bars · neon stroke
08 / 12 · numbers

Numbers we can prove. Not ones we wish we had.

01
0.00%
uptime
rolling 90-day window
02
<0ms
p99 webhook
delivery latency
03
every cent
ledgered
down to fractional rounding
04
0.0%
drift bar
pages on-call when crossed
status.voepy.comlast incident · 2026-03-14 · 18 min · root-caused publicly99.97% · 90d
10/12
Pricing

Pay for what you use. Cap what you don't.

All prices in USD. Direct per-minute rates with a flat plan multiplier. No premium routes hidden in the small print.

Live rate card
ProductTwiliovoepyΔ
  • US-domestic outbound$0.0140$0.0085−39%
  • Inbound to local DID$0.0085$0.0050−41%
  • Real-time transcription$0.085/min$0.038/min−55%
  • Conference participant$0.0040$0.0018−55%
Carrier-direct routing · per-second billing · no premium tiers.updated 2026-04-30

Starter

$0/mo
Pay-as-you-go
Outbound1.40×
Inbound1.40×
Conferences1.40×
Streaming1.40×
Spend cap$50/day
Most popular

Pro

Recommended
$99/mo
+ $1k call credit
Outbound1.25×
Inbound1.25×
Conferences1.25×
Streaming1.25×
Spend cap$1,000/day

Enterprise

Custom
+ negotiated minimums
Outbound1.10×
Inbound1.10×
Conferences1.10×
Streaming1.10×
Spend capCustom
Prices revisited quarterly. Last update: 2026-04-30. All plans roll up per-second, no minimum-revenue commits.
11/12
Frequently asked

Questions worth answering plainly. If yours isn't here, the engineer who'd fix it is one email away.

Do I have to rip out Twilio in one weekend?
No. Most teams move one route at a time — outbound first, then inbound, then conferences. The verb surface matches 1:1, so you can A/B traffic between providers in your own router for as long as you want. We've had teams run dual-write for a quarter before fully cutting over.
What's actually in the sandbox?
$5 of test balance, a real US number, and the full production surface — every verb, every webhook, every response shape. The only difference is traffic terminates on a synthetic carrier so you don't pay per-minute while you're wiring things up. No card, expires in 14 days, renewable.
Is the pricing genuinely 30–60% lower?
Yes, and it's line-itemed. US-domestic outbound is $0.0085/min vs Twilio's $0.0140. Conferences, recording, transcription, and AMD are all priced separately at carrier-pass-through plus a flat 40% markup we publish in the rate card. No premium routes, no MIN_USD, no per-region surprises.
How do you handle SIP REFER and inbound retry dedup?
SIP REFER is exposed as calls.refer with the full RFC 3515 envelope. Inbound retry dedup is built into the edge — duplicate INVITEs within a 30-second window collapse to a single webhook delivery, keyed on Call-ID + CSeq. You don't write that code. We did.
Where can I terminate calls?
US, Canada, EU-27, UK, Australia, Singapore, Japan, Brazil, and Mexico in MVP. Pakistan and India dial-in are on a waitlist — message us if that's a blocker for you. Outbound termination covers the same regions plus another 60 ITU country codes via two upstream carriers with automatic failover.
How do you reconcile carrier CDRs against your invoice?
Nightly. Every call your account billed against gets matched to its carrier CDR by call-ID, duration, and source IP. Drift over 1% pages on-call automatically. The reconciliation log is queryable by your finance team — not buried behind a support ticket.
Is there a self-hosted option?
Not in MVP. The economics of running carrier interconnects on someone else's hardware don't pencil out for the team sizes we currently serve. If you're a regulated workload that genuinely needs an air-gap, talk to us directly — we've done one private deployment, and the rules for the second one are still being drawn.
12/12 · ship

Try it in five minutes.
Sandbox mode is free.

One curl away from a working call. No credit card needed for sandbox.

  • No credit card
  • Cancel anytime
  • EU + US sandbox