New features, improvements, and fixes to Dial

Notable changes to Dial — new capabilities, improvements, and fixes. Filter by tag, or subscribe via RSS.

August 14, 2026

Changed

Self-Hosted mode is approved per account

Self-Hosted mode hands live calls to a server Dial doesn’t run, so new accounts now request access before they can point calls at one. Accounts already using Self-Hosted are unaffected — they keep it, and nothing about their configuration changes.

apiplatform

August 9, 2026

Added

Creating an account requires a verified phone number

An account is created only once both an email address and a phone number are verified. When the email is new, POST /v1/auth/verify returns a registrationId and no account — continue from there:

  • POST /v1/auth/register-number texts a code to the number that will own the account
  • POST /v1/auth/verify-number submits that code and returns the account and its API key
apiclisdksplatform

August 3, 2026

Added

Attach an opt-in screenshot to a 10DLC registration

Carrier reviewers approve a registration much faster when they can see the consent screen your messageFlow describes. Submit 10DLC registration now takes an optional screenshot — send the body as multipart/form-data with a data part holding the usual JSON and one optInImage file part (max 2 MB; JPEG, PNG, WebP, or GIF). Dial hosts the image and puts it in front of reviewers; the response’s optInImageUrl shows exactly what they see. On a resubmission, leaving the file out keeps the stored screenshot, and sending "optInImage": null inside campaign removes it.

api

August 2, 2026

Added

Share an account with your team

An account owner can invite teammates by email so a team works from the same phone numbers. Each member signs in with their own address, holds their own API key on the same account, and shares its numbers, messages, calls and contacts; usage bills to the account’s balance. Members can do everything the owner can except delete the account.

apiplatformclidocs

July 30, 2026

Changed

A sole proprietor 10DLC registration now gives a vertical

POST /api/v1/numbers/{id}/10dlc requires a new vertical on the brand when kind is sole_proprietor — the trade the brand operates in. The carrier registry asks for it on every sole proprietor brand, and the earlier form didn’t collect it.

api

July 29, 2026

Added

Register a US number for 10DLC

US carriers block outbound SMS and MMS sent from an unregistered 10-digit number to a US phone number. You can now register a number for 10DLC through the API and lift that block:

  • POST /api/v1/numbers/{id}/10dlc submits the registration — application/json carrying kind (sole_proprietor or business), a brand (who is registering) and a campaign (what you send, and how people opted in). It costs $25.00 one-time per number, drawn from your credit balance; resubmitting after a rejection is free.
  • GET /api/v1/numbers/{id}/10dlc returns the brand, the campaign, and where the registration stands.
  • Phone numbers carry a new tenDlc object reporting where the registration stands: not_registered, in_review, with_carrier, approved, or rejected (with a reason saying exactly what to change). It’s null when 10DLC doesn’t apply — a non-US number, a number with the imessage capability, or an account that isn’t pay-as-you-go and has no registration yet.
api

July 27, 2026

Added

Free-account limits on the account object

GET /api/v1/account now returns a limits object — maxCallDurationSeconds and maxConcurrentCalls — for accounts that have never added credit and never subscribed, and null for accounts that have paid. Read it instead of hardcoding the values.

api

July 21, 2026

Added

Free-account call limits

Accounts that have never added credit and never subscribed now run with two guardrails: every call is hard-capped at 5 minutes (regardless of any configured maxCallDurationSeconds), and at most 2 calls can be in progress at once, inbound and outbound combined. An outbound call over the concurrency limit is rejected with a new 429 error (code call_limit_reached); an inbound call over the limit is declined. Both limits lift permanently the first time you add credit or start a subscription. See Free accounts.

apiplatform

July 9, 2026

Added

Self-Hosted audio mode — bring your whole voice stack

Self-Hosted mode gains a second variant: audio ("type": "audio"). Dial pipes the raw call audio to your WebSocket server, full duplex, over the new Self-hosted audio protocol — you bring the entire voice pipeline: a speech-to-speech model (OpenAI Realtime, Gemini Live, …) or your own STT → LLM → TTS chain. The existing bring-your-own-LLM variant is unchanged and now documented as the Self-hosted LLM protocol.

apiplatform

July 7, 2026

Added

Typing indicators

Set a typing indicatorPOST /api/v1/typing with {toNumber, value, fromNumber} shows (or clears) a typing indicator on the recipient’s device, as if someone were composing from your number. iMessage numbers display it; standard (SMS) numbers have no typing concept and silently no-op, so you can call it unconditionally before a send. Delivering a message or reaction from the same number clears the indicator natively — start again after a send if you’re still composing. Free of charge.

apiclisdksintegrations

July 6, 2026

Added

Live call lifecycle events — call.status_changed

A new account event, call.status_changed, fires the moment a call moves through its lifecycle — QueuedRingingIn-ProgressTerminated — so you can react while a call is happening instead of learning about it only when it ends. Each event carries the state entered (status {state, label}), the state left (previousState), and — on termination — the terminationType (completed, busy, no-answer, failed, canceled), mirroring the status object the calls API already returns.

apiclisdks

July 5, 2026

Added

Voice messages

A single audio attachment sent from an iMessage number is now delivered as a native voice message — playable inline in the recipient’s thread, not a file to download. Pass forceAudioFile: true on Send a message to opt back into a regular file attachment. body is now optional whenever media is attached, so media-only sends work. In the CLI: dial message --media <url> with --force-audio-file to opt out.

apicli

June 7, 2026

Changed

Call language is now optional — auto-detected from the phone number

language on Make a call is no longer required. When omitted, Dial detects the language from the phone number’s country prefix — the destination number for outbound calls, the caller’s number for inbound calls — and the voice agent handles both that language and en-US. Pass an explicit language to pin the call to a single language, exactly as before.

apicli

May 27, 2026

New

Unified event stream across SDKs

Every SDK now exposes the same new_events_connection() / newEventsConnection() API for consuming your account’s live event stream — inbound messages, completed calls, and more — with the same loop in every language.

CLI listen service

sdksclidocs