October 11, 9:00 AM – 9:00 PM, 2026 · San Francisco
Give your agent a phone
Dial gives your agent a real phone number: AI voice calls, texts, iMessage and WhatsApp, from one API.
1Get started
- aSign up at getdial.ai to get a number and $5.
- bCopy your API key from Settings and your number from Numbers into
DIAL_API_KEYandDIAL_NUMBER. - cRequest $100 in builder credits with your signup email.
- dRead the docs and the SDK.
npm install @getdial/sdknpm install @getdial/sdkUsing Claude Code? Give it our docs
claude mcp add --transport http docs-getdial-ai https://docs.getdial.ai/_mcp/serverclaude mcp add --transport http docs-getdial-ai https://docs.getdial.ai/_mcp/server2What works today
To any US number. New accounts: 5-minute calls, 2 at a time.
Between Dial numbers. Texts to regular phones need a business registration (10DLC), which you can submit after the hackathon.
Tell us your use case at the Dial table.
Tell us your use case at the Dial table.
3Place an AI voice call
Describe the job in plain words. The agent makes the call; you get the transcript.
import { DialClient } from "@getdial/sdk";
const dial = new DialClient({ apiKey: process.env.DIAL_API_KEY! });
export async function POST(req: Request) {
const { to } = await req.json(); // e.g. "+14155550123"
const call = await dial.makeCall({
to,
fromNumber: process.env.DIAL_NUMBER!,
outboundInstruction: "Book a table for 2 at 7pm, name Sam.",
});
// When it ends, dial.getCall(call.id) has the transcript.
return Response.json({ callId: call.id });
}import { DialClient } from "@getdial/sdk";
const dial = new DialClient({ apiKey: process.env.DIAL_API_KEY! });
export async function POST(req: Request) {
const { to } = await req.json(); // e.g. "+14155550123"
const call = await dial.makeCall({
to,
fromNumber: process.env.DIAL_NUMBER!,
outboundInstruction: "Book a table for 2 at 7pm, name Sam.",
});
// When it ends, dial.getCall(call.id) has the transcript.
return Response.json({ callId: call.id });
}4Two agents texting each other
Buy a second number with dial number purchase, then agent A books a table with agent B, the restaurant. Dial to Dial works right away.
import asyncio, os
from dial_sdk import DialClient, DialConfig, SendMessageParams
KEY = os.environ["DIAL_API_KEY"]
A, B = os.environ["DIAL_NUMBER_A"], os.environ["DIAL_NUMBER_B"]
# A books a table, B is the restaurant. Swap these for your LLM.
LINES = [
"Hi! Any table for 4 tonight around 7?", # A
"We have 7:15 or 8:00. Which works?", # B
"7:15 please, under Sam.", # A
"Booked: 4 at 7:15pm for Sam. Any allergies?", # B
"One vegetarian, no allergies.", # A
"Noted. See you tonight!", # B
]
async def next_text(events): # the next text from agent A or B
async for e in events:
m = e["data"]
if e["type"] == "message.received" and m["from"] in (A, B):
return m
async def main():
async with DialClient(DialConfig(api_key=KEY)) as dial:
async with dial.new_events_connection() as events:
await dial.send_message(SendMessageParams(
from_number=A, to=B, body=LINES[0]))
for line in LINES[1:]: # each agent answers the other
m = await next_text(events)
await dial.send_message(SendMessageParams(
from_number=m["to"], to=m["from"], body=line))
asyncio.run(main())import asyncio, os
from dial_sdk import DialClient, DialConfig, SendMessageParams
KEY = os.environ["DIAL_API_KEY"]
A, B = os.environ["DIAL_NUMBER_A"], os.environ["DIAL_NUMBER_B"]
# A books a table, B is the restaurant. Swap these for your LLM.
LINES = [
"Hi! Any table for 4 tonight around 7?", # A
"We have 7:15 or 8:00. Which works?", # B
"7:15 please, under Sam.", # A
"Booked: 4 at 7:15pm for Sam. Any allergies?", # B
"One vegetarian, no allergies.", # A
"Noted. See you tonight!", # B
]
async def next_text(events): # the next text from agent A or B
async for e in events:
m = e["data"]
if e["type"] == "message.received" and m["from"] in (A, B):
return m
async def main():
async with DialClient(DialConfig(api_key=KEY)) as dial:
async with dial.new_events_connection() as events:
await dial.send_message(SendMessageParams(
from_number=A, to=B, body=LINES[0]))
for line in LINES[1:]: # each agent answers the other
m = await next_text(events)
await dial.send_message(SendMessageParams(
from_number=m["to"], to=m["from"], body=line))
asyncio.run(main())5iMessage and WhatsApp
Turned on by request. Send a request and come find us at the Dial table to walk us through what you're building. Once it's on, add channel: "imessage" or channel: "whatsapp" to sendMessage.
Request credits or access
Sign up first, then use the same email here. Credits are added during the event. Request at getdial.ai/hackathon/speedhacks/quickstart. Stuck? Come to the Dial table or read the docs and the SDK.
Stuck?
Come to the Dial table, or check the docs and the SDK reference.