PHONE CALLS · FOR AI AGENTS
Give your agent
a phone.
Objective in, outcome out. OpenPhn runs real phone calls on behalf of your AI agents and returns clean, structured JSON. Appointment booking, lead qualification, supplier check-ins.
◆ SDK · PYTHON · TS◆ WEBHOOK-NATIVE◆ TCPA COMPLIANT
DEMO · DENTIST APPOINTMENTREADY · 00:00 / 02:13
AGENT "Perfect — please confirm."
CALLEE "Booked. The cleaning runs about 45 minutes, the fee is $180."
AGENT "Great, thank you!"
{
"booked": true,
"date": extracting…,
"time": extracting…,
"duration_minutes": extracting…,
"cost_usd": extracting…,
"patient": extracting…
}
00:00GEMINI 3.102:13
LIVE›appointment booked · 1m 42s · confidence 0.940 calls today
HOW IT WORKS
Three steps. Everything else is abstracted.
01
Define the objective
Describe what the agent should accomplish + what fields you want back. Plain English. Schema shape in JSON.
02
We make the call
OpenPhn dials via your Twilio/Vonage/Telnyx, runs the conversation with Gemini Live, handles voicemail and retries.
03
Webhook fires
Structured JSON arrives at your endpoint, signed with HMAC-SHA256. Transcript included. Retries on 5xx.
YOUR STACK
Works with whatever agent you're building with.
PERSONAL AGENTS
OpenClawHermesNanobotNemoClawPicoClawIronClawmemU
FRAMEWORKS
Claude Agent SDKOpenAI AgentsLangChainLangGraphCrewAIMastraLlamaIndex
NO-CODE
n8nLangflowDify
UNIVERSAL
MCP
// SOUL.md: skills: [openphn-openclaw]
import { claw } from "openclaw"
claw.on("appointment_needed", async ({ patient, date }) => {
const call = await claw.phone.call({
to: patient.dentist_number,
objective: `Book cleaning for ${patient.name} on ${date}`,
schema: { booked: "boolean", time: "iso-time" },
})
claw.memory.save("last_booking", call.outcome)
})
PLAYABLE SCENARIOS
Hear what a call sounds like.
See the JSON it produces.
ONE API CALL
Ten lines of code. Any language.
TypeScript
Python
curl
import { OpenPhn } from "openphn"
const client = new OpenPhn({ apiKey: process.env.OPENPHN_KEY! })
const call = await client.calls.create({
to: "+14155551234",
objective: "Book a dental cleaning for Sarah Chen next Tuesday",
outcome_schema: {
booked: "boolean",
date: "iso-date",
time: "iso-time?",
cost_usd: "number?",
},
})
// Result arrives at your webhook ~2 minutes later.
WEBHOOK DELIVERY
Signed, idempotent,
retry-safe.
Every outcome is delivered as a signed POST to your endpoint. HMAC-SHA256. Retries at 5s / 30s / 120s on 5xx. Use the X-OpenPhn-Delivery header for idempotent processing.
Read the webhook spec →REQUEST HEADERS
POST /your-webhook HTTP/1.1
Host: your-app.example.com
Content-Type: application/json
X-OpenPhn-Signature: sha256=<hex>
X-OpenPhn-Event: call.completed
X-OpenPhn-Delivery: 01JX8W7HJB5BODY
{
"event": "call.completed",
"call_id": "call_01JX8W7HJB5",
"status": "delivered",
"outcome": {
"booked": true,
"date": "2026-04-22",
"time": "15:00",
"cost_usd": 180
},
"duration_seconds": 133,
"confidence": 0.94,
"transcript_url": "https://api.openphn.com/v1/calls/call_01JX8W7HJB5/transcript"
}COMPARISON
Purpose-built for agent stacks.
| CAPABILITY | OPENPHN | BLAND | VAPI | RETELL |
|---|---|---|---|---|
| Schema-first outcomes | ● | ○ | ○ | ○ |
| Webhook-native | ● | ● | ● | ● |
| TCPA compliance | ● | ◐ | ◐ | ◐ |
| Python + TypeScript SDKs | ● | ● | ● | ○ |
| MCP + agent-framework integrations | ● | ○ | ○ | ○ |
PRICING
Pay for outcomes, not infrastructure.
Pro
POPULAR$49/mo
+ $0.06/min
- ◆Contact memory
- ◆Priority queue
- ◆Webhook retries
- ◆3 team seats
Scale
$199/mo
+ Volume pricing
- ◆Multi-agent mgmt
- ◆Custom templates
- ◆SLA + priority support
- ◆White-label
QUESTIONS
Answers.
Give your agent
a phone.
Start free. $10 demo credit. No credit card until you scale.