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

  1. aSign up at getdial.ai to get a number and $5.
  2. bCopy your API key from Settings and your number from Numbers into DIAL_API_KEY and DIAL_NUMBER.
  3. cRequest $100 in builder credits with your signup email.
  4. dRead the docs and the SDK.
npm install @getdial/sdk

Using Claude Code? Give it our docs

claude mcp add --transport http docs-getdial-ai https://docs.getdial.ai/_mcp/server

2What works today

Voice callsReady now

To any US number. New accounts: 5-minute calls, 2 at a time.

SMSDial to Dial

Between Dial numbers. Texts to regular phones need a business registration (10DLC), which you can submit after the hackathon.

iMessageBy request

Tell us your use case at the Dial table.

WhatsAppBy request

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 });
}

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())

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.

What do you need?

Stuck?

Come to the Dial table, or check the docs and the SDK reference.