# Dial — Communication Stack for AI Agents ## Instructions for AI Agents - For clean Markdown of any page, append `.md` to the page URL - For section-specific indexes, append `/llms.txt` to any section URL - For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getdial.ai/_mcp/server ## Docs - [Introduction](https://docs.getdial.ai/documentation/get-started/introduction.md): Dial gives your AI agent a phone number — send SMS, place AI voice calls, and receive inbound messages via the CLI, SDKs, and REST API. - [Quickstart](https://docs.getdial.ai/documentation/get-started/quickstart.md): Install the Dial CLI, create an account, and send your first SMS in a few minutes. - [Using Dial from an agent](https://docs.getdial.ai/documentation/get-started/using-dial-from-an-agent.md): How AI agents use Dial: the CLI, the Remote or Local MCP server, or an in-process SDK — and which to choose. - [Authentication](https://docs.getdial.ai/documentation/get-started/authentication.md): Authenticate every Dial request with a sk_live_ API key sent as a Bearer token. - [Core concepts](https://docs.getdial.ai/documentation/get-started/core-concepts.md): The Dial object model — accounts, API keys, phone numbers, messages, calls, and events. - [Send an SMS](https://docs.getdial.ai/documentation/capabilities/send-an-sms.md): Send an SMS from a Dial phone number using the CLI, an SDK, or the REST API. - [Receive an SMS](https://docs.getdial.ai/documentation/capabilities/receive-an-sms.md): Receive an inbound SMS — such as a one-time code — by consuming the account event stream. - [Place a voice call](https://docs.getdial.ai/documentation/capabilities/place-a-voice-call.md): Place an outbound AI voice call with a system prompt, language, and voice. - [Receive a voice call](https://docs.getdial.ai/documentation/capabilities/receive-a-voice-call.md): Let an AI voice answer calls to your Dial number, then read the transcript once the call ends. - [Manage phone numbers](https://docs.getdial.ai/documentation/platform/manage-phone-numbers.md): List and purchase the phone numbers on your Dial account. - [Stream account events](https://docs.getdial.ai/documentation/platform/stream-account-events.md): Consume a live stream of account events (inbound messages, completed calls) from any SDK or the CLI. - [Webhooks](https://docs.getdial.ai/documentation/platform/webhooks.md): Receive account events as signed HTTP POSTs to your own HTTPS endpoint, with retries and HMAC verification. - [Context MCP](https://docs.getdial.ai/documentation/platform/context-mcp.md): Attach your own MCP server so your voice agent can call its tools during a call — with Dial managing OAuth and token refresh for you. - [Self-Hosted](https://docs.getdial.ai/documentation/platform/self-hosted.md): Bring your own agent. Point Dial at a WebSocket server you host — drive calls with your own LLM, or take the raw call audio and bring your entire voice stack. - [Install & onboarding](https://docs.getdial.ai/documentation/cli/install-and-onboarding.md): Install the Dial CLI and create an account with the email one-time code flow. - [Commands](https://docs.getdial.ai/documentation/cli/commands.md): Reference for every dial command, its flags, and --json output. - [Listen service](https://docs.getdial.ai/documentation/cli/listen-service.md): Run the Dial listen daemon to capture account events on your machine. - [SDKs overview](https://docs.getdial.ai/documentation/sdks/overview.md): Install a Dial SDK and construct a client; the common method set across languages. - [Node SDK](https://docs.getdial.ai/documentation/sdks/node.md): Use the @getdial/sdk TypeScript/Node client to send messages, place calls, and stream events. - [Python SDK](https://docs.getdial.ai/documentation/sdks/python.md): Use the async Python Dial client to send messages, place calls, and stream events. - [LangChain integration](https://docs.getdial.ai/documentation/sdks/langchain.md): Give a LangChain agent Dial tools for sending messages and placing calls. - [Vercel AI SDK integration](https://docs.getdial.ai/documentation/sdks/ai-sdk.md): Give any AI SDK model Dial tools for sending SMS and placing AI voice calls. - [CrewAI integration](https://docs.getdial.ai/documentation/sdks/crewai.md): Give a CrewAI crew Dial tools for SMS, OTP, and voice calls — phone identity for multi-agent web tasks. - [AutoGen integration](https://docs.getdial.ai/documentation/sdks/autogen.md): Give a Microsoft AutoGen agent Dial tools for SMS, OTP, and voice calls — phone identity for enterprise multi-agent systems. - [Microsoft Agent Framework integration](https://docs.getdial.ai/documentation/sdks/agentframework.md): Give a Microsoft Agent Framework agent Dial tools for SMS, OTP, and voice calls — phone identity for production Azure AI agents. - [How Dial works](https://docs.getdial.ai/documentation/reference/how-it-works.md): The Dial request and event model: outbound actions and inbound events, conceptually. - [Errors & status codes](https://docs.getdial.ai/documentation/reference/errors.md): HTTP status codes Dial returns and the shape of error responses. - [Usage & limits](https://docs.getdial.ai/documentation/reference/usage-and-limits.md): Check account usage and understand request limits. - [Support](https://docs.getdial.ai/documentation/reference/support.md): How to get help with Dial. - [Changelog](https://docs.getdial.ai/documentation/changelog/changelog.md): New features, improvements, and fixes to Dial - [Changelog (all entries)](https://docs.getdial.ai/documentation/changelog/changelog/llms.txt) - [Claude Code](https://docs.getdial.ai/integrations/agent-clients/coding-agent/claude-code.md): Use Dial from Claude Code by dropping the Dial skill into your Claude config. - [Cursor](https://docs.getdial.ai/integrations/agent-clients/coding-agent/cursor.md): Use Dial from Cursor by dropping the Dial skill into your Cursor config. - [Codex](https://docs.getdial.ai/integrations/agent-clients/coding-agent/codex.md): Use Dial from Codex by dropping the Dial skill into your Codex config. - [Opencode](https://docs.getdial.ai/integrations/agent-clients/coding-agent/opencode.md): Use Dial from Opencode by dropping the Dial skill into your Opencode config. - [Pi](https://docs.getdial.ai/integrations/agent-clients/coding-agent/pi.md): Use Dial from Pi by dropping the Dial skill into your Pi config. - [OpenClaw](https://docs.getdial.ai/integrations/agent-clients/openclaw.md): Use Dial from an OpenClaw agent — install the Dial skill and route inbound events into OpenClaw. - [NanoClaw](https://docs.getdial.ai/integrations/agent-clients/nanoclaw.md): Use Dial from a NanoClaw agent — install the Dial skill and route inbound events via a CLI command target. - [Hermes Agent](https://docs.getdial.ai/integrations/agent-clients/hermes-agent.md): Use Dial from a Hermes agent — install the Dial skill and route inbound events into Hermes. - [Vercel Chat SDK](https://docs.getdial.ai/integrations/agent-clients/vercel-chat-sdk.md): Add Dial as a channel to any bot built on Vercel's Chat SDK — the same handler answers SMS, MMS, iMessage, and inbound voice through one adapter. - [CLI Skill](https://docs.getdial.ai/integrations/tools/cli-skill.md): Install the Dial CLI skill into any local AI agent so it knows how to drive the `dial` CLI on demand. - [Smithery](https://docs.getdial.ai/integrations/tools/smithery.md): Install Dial from Smithery — the remote MCP server, or the CLI skill — no manual config. - [MCP](https://docs.getdial.ai/integrations/tools/mcp.md): Connect any MCP client to Dial — hosted over OAuth, or local over stdio with your saved CLI key. Same tools, two transports. - [Zapier](https://docs.getdial.ai/integrations/tools/zapier.md): Connect Dial to 8,000+ apps with Zapier — trigger Zaps on inbound messages and calls, send messages, place AI voice calls, and provision numbers, no code required. - [CLI command target](https://docs.getdial.ai/integrations/methods/cli-command-target.md): Run a local executable per Dial event — the daemon passes the event JSON as the final positional argument. - [Local URL target](https://docs.getdial.ai/integrations/methods/local-url-target.md): Fan Dial events out to a local HTTP endpoint with optional HMAC signing or bearer-token auth. - [Events](https://docs.getdial.ai/api-reference/events/overview.md): Reference for the JSON payloads Dial publishes on the account event stream. - [message.received](https://docs.getdial.ai/api-reference/events/message-received.md): Event emitted when an inbound message arrives on a Dial number. - [call.status_changed](https://docs.getdial.ai/api-reference/events/call-status-changed.md): Event emitted each time a call moves through its lifecycle — queued, ringing, in-progress, terminated. - [call.ended](https://docs.getdial.ai/api-reference/events/call-ended.md): Event emitted when a voice call finishes — inbound or outbound. - [call.transcribed](https://docs.getdial.ai/api-reference/events/call-transcribed.md): Event emitted when a voice call's transcript is ready. - [webhook.ping](https://docs.getdial.ai/api-reference/events/webhook-ping.md): A test event Dial sends to a single webhook subscription on demand. - [Self-hosted LLM protocol](https://docs.getdial.ai/api-reference/self-hosted-protocol/overview.md): The WebSocket protocol your server speaks when driving a Dial call in Self-Hosted mode — connection, signing, message types, and resumability. - [ping_pong](https://docs.getdial.ai/api-reference/self-hosted-protocol/ping-pong.md): Keepalive between Dial and your server — Dial pings, you echo it back. - [call_connected](https://docs.getdial.ai/api-reference/self-hosted-protocol/call-connected.md): Sent when Dial connects to your server — on every connection, including reconnects. - [transcript_update](https://docs.getdial.ai/api-reference/self-hosted-protocol/transcript-update.md): The latest full transcript snapshot. Informational — no response expected. - [response_required](https://docs.getdial.ai/api-reference/self-hosted-protocol/response-required.md): Dial wants the agent to speak — reply with response frames carrying this response_id. - [reminder_required](https://docs.getdial.ai/api-reference/self-hosted-protocol/reminder-required.md): The user has been silent for a while — optionally produce a gentle nudge. - [response](https://docs.getdial.ai/api-reference/self-hosted-protocol/response.md): The agent's spoken reply to a request — streamable, and able to end the call. - [interrupt](https://docs.getdial.ai/api-reference/self-hosted-protocol/interrupt.md): Make the agent speak immediately, barging in out of turn. - [Self-hosted audio protocol](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/overview.md): The WebSocket protocol your server speaks in Self-Hosted audio mode — Dial pipes the raw call audio to you, full duplex, and your stack does the rest. - [media](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/media.md): Audio frames, both directions — caller audio to your server, agent audio back to the caller. - [ping_pong](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/ping-pong.md): Keepalive between Dial and your server — Dial pings, you echo it back. - [call_connected](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/call-connected.md): Sent when Dial connects to your server — on every connection, including mid-call reconnects. - [dtmf](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/dtmf.md): A keypad digit the caller pressed. - [duration_warning](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/duration-warning.md): The call is approaching its maximum-duration cap — wrap up before Dial ends it. - [mark & clear](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/playback-control.md): Playback checkpoints and barge-in — how your server tracks and interrupts what the caller is hearing. - [end_call & call_ended](https://docs.getdial.ai/api-reference/self-hosted-audio-protocol/ending-calls.md): Hanging up from your side, and how Dial tells you the call is over. ## API Docs - REST API > Authentication [Request a sign-up code](https://docs.getdial.ai/api-reference/rest-api/authentication/signup.md) - REST API > Authentication [Verify a sign-up code](https://docs.getdial.ai/api-reference/rest-api/authentication/verify-signup.md) - REST API > Authentication [Register a phone number](https://docs.getdial.ai/api-reference/rest-api/authentication/register-number.md) - REST API > Authentication [Verify a phone number](https://docs.getdial.ai/api-reference/rest-api/authentication/verify-number.md) - REST API > Account [Get the current account](https://docs.getdial.ai/api-reference/rest-api/account/get-account.md) - REST API > Account [Delete the current account](https://docs.getdial.ai/api-reference/rest-api/account/delete-account.md) - REST API > Account [Update the current account](https://docs.getdial.ai/api-reference/rest-api/account/update-account.md) - REST API > Usage [Get account usage](https://docs.getdial.ai/api-reference/rest-api/usage/get-usage.md) - REST API > Billing [Get billing status](https://docs.getdial.ai/api-reference/rest-api/billing/get-billing.md) - REST API > Billing [Start a credit top-up checkout](https://docs.getdial.ai/api-reference/rest-api/billing/create-credits-checkout.md) - REST API > Billing [Start a subscription checkout](https://docs.getdial.ai/api-reference/rest-api/billing/create-subscription-checkout.md) - REST API > Billing [Cancel the subscription at period end](https://docs.getdial.ai/api-reference/rest-api/billing/cancel-subscription.md) - REST API > Billing [Resume a subscription scheduled to cancel](https://docs.getdial.ai/api-reference/rest-api/billing/resume-subscription.md) - REST API > Billing [Change the subscription billing interval](https://docs.getdial.ai/api-reference/rest-api/billing/change-subscription-interval.md) - REST API > Billing [Preview a subscription change](https://docs.getdial.ai/api-reference/rest-api/billing/preview-subscription-change.md) - REST API > Billing [Start a checkout to save a card](https://docs.getdial.ai/api-reference/rest-api/billing/create-payment-method-setup.md) - REST API > Billing [Remove a saved card](https://docs.getdial.ai/api-reference/rest-api/billing/remove-payment-method.md) - REST API > Billing [Set the default card](https://docs.getdial.ai/api-reference/rest-api/billing/set-default-payment-method.md) - REST API > Billing [Download an invoice](https://docs.getdial.ai/api-reference/rest-api/billing/get-invoice.md) - REST API > Billing [List billing activity](https://docs.getdial.ai/api-reference/rest-api/billing/list-billing-activity.md) - REST API > Phone Numbers [List phone numbers](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/list-numbers.md) - REST API > Phone Numbers [Provision a phone number](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/provision-number.md) - REST API > Phone Numbers [Get a phone number](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/get-number.md) - REST API > Phone Numbers [Release a phone number](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/release-number.md) - REST API > Phone Numbers [Update a phone number](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/update-number.md) - REST API > Phone Numbers [Get 10DLC registration](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/get-ten-dlc-registration.md) - REST API > Phone Numbers [Submit 10DLC registration](https://docs.getdial.ai/api-reference/rest-api/phone-numbers/submit-ten-dlc-registration.md) - REST API > Messages [List messages](https://docs.getdial.ai/api-reference/rest-api/messages/list-messages.md) - REST API > Messages [Send a message](https://docs.getdial.ai/api-reference/rest-api/messages/send-message.md) - REST API > Messages [Reply to a message](https://docs.getdial.ai/api-reference/rest-api/messages/reply-to-message.md) - REST API > Messages [Set a typing indicator](https://docs.getdial.ai/api-reference/rest-api/messages/send-typing.md) - REST API > Messages [Get public media](https://docs.getdial.ai/api-reference/rest-api/messages/get-public-media.md) - REST API > Calls [List calls](https://docs.getdial.ai/api-reference/rest-api/calls/list-calls.md) - REST API > Calls [Place an AI voice call](https://docs.getdial.ai/api-reference/rest-api/calls/make-call.md) - REST API > Calls [Get a call](https://docs.getdial.ai/api-reference/rest-api/calls/get-call.md) - REST API > Events [Wait for an event](https://docs.getdial.ai/api-reference/rest-api/events/wait-for-event.md) - REST API > Events [Open an event stream](https://docs.getdial.ai/api-reference/rest-api/events/subscribe-to-events.md) - REST API > Webhooks [List webhook subscriptions](https://docs.getdial.ai/api-reference/rest-api/webhooks/list-webhooks.md) - REST API > Webhooks [Create a webhook subscription](https://docs.getdial.ai/api-reference/rest-api/webhooks/create-webhook.md) - REST API > Webhooks [Get a webhook subscription](https://docs.getdial.ai/api-reference/rest-api/webhooks/get-webhook.md) - REST API > Webhooks [Delete a webhook subscription](https://docs.getdial.ai/api-reference/rest-api/webhooks/delete-webhook.md) - REST API > Webhooks [Reveal the signing secret](https://docs.getdial.ai/api-reference/rest-api/webhooks/reveal-webhook-secret.md) - REST API > Webhooks [Fire a webhook.ping event at this subscription](https://docs.getdial.ai/api-reference/rest-api/webhooks/fire-webhook-ping.md) - REST API > Context Mcp [List Context MCP connections](https://docs.getdial.ai/api-reference/rest-api/context-mcp/list-context-mcps.md) - REST API > Context Mcp [Connect a Context MCP server](https://docs.getdial.ai/api-reference/rest-api/context-mcp/create-context-mcp.md) - REST API > Context Mcp [Get a Context MCP connection](https://docs.getdial.ai/api-reference/rest-api/context-mcp/get-context-mcp.md) - REST API > Context Mcp [Disconnect a Context MCP server](https://docs.getdial.ai/api-reference/rest-api/context-mcp/delete-context-mcp.md) - REST API > Self Hosted [Get Self-Hosted configuration](https://docs.getdial.ai/api-reference/rest-api/self-hosted/get-self-hosted.md) - REST API > Self Hosted [Apply a Self-Hosted state transition](https://docs.getdial.ai/api-reference/rest-api/self-hosted/apply-self-hosted-action.md) - REST API > Self Hosted [Reveal the Self-Hosted signing secret](https://docs.getdial.ai/api-reference/rest-api/self-hosted/reveal-self-hosted-secret.md) - REST API > Members [List account members](https://docs.getdial.ai/api-reference/rest-api/members/list-members.md) - REST API > Members [Invite a member](https://docs.getdial.ai/api-reference/rest-api/members/invite-member.md) - REST API > Members [Remove a member](https://docs.getdial.ai/api-reference/rest-api/members/remove-member.md) - REST API > Members [Look up an invitation](https://docs.getdial.ai/api-reference/rest-api/members/get-member-invite.md) - REST API > Members [Accept an invitation](https://docs.getdial.ai/api-reference/rest-api/members/accept-member-invite.md) - REST API > Members [List accounts you can access](https://docs.getdial.ai/api-reference/rest-api/members/list-memberships.md) - REST API > Members [Get your API key for another account](https://docs.getdial.ai/api-reference/rest-api/members/get-membership-key.md) ## OpenAPI Specification The raw OpenAPI 3.1 specification for this API is available at: - [OpenAPI JSON](https://docs.getdial.ai/openapi.json) - [OpenAPI YAML](https://docs.getdial.ai/openapi.yaml)