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
LIVEappointment 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: 01JX8W7HJB5
BODY
{
  "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.

CAPABILITYOPENPHNBLANDVAPIRETELL
Schema-first outcomes
Webhook-native
TCPA compliance
Python + TypeScript SDKs
MCP + agent-framework integrations
PRICING

Pay for outcomes, not infrastructure.

Starter

$0/mo
+ $0.08/min
  • 50 free min / mo
  • Hosted engine
  • Dashboard + extraction
Start free

Pro

POPULAR
$49/mo
+ $0.06/min
  • Contact memory
  • Priority queue
  • Webhook retries
  • 3 team seats
Start 14-day trial

Scale

$199/mo
+ Volume pricing
  • Multi-agent mgmt
  • Custom templates
  • SLA + priority support
  • White-label
Book a demo
QUESTIONS

Answers.

Give your agent
a phone.

Start free. $10 demo credit. No credit card until you scale.

Start free →