Notable changes to Dial — new capabilities, improvements, and fixes. Filter by tag, or subscribe via RSS.
November 12, 2026
Added
A published versioning and deprecation policy
The REST API now has a written versioning and deprecation policy: breaking changes ship under a new path version, and anything deprecated in /v1 keeps working for at least 6 months, announced with Deprecation and Sunset response headers.
October 29, 2026
Changed
WhatsApp groups count as one recipient for sending limits
A WhatsApp group is now treated like a single contact by the WhatsApp sending limits: the per-recipient cap counts what your number sent into the group, and the unanswered limit counts your messages since anyone in the group last wrote. A message from any member counts as a reply. Past either, a send into the group is rejected with 429 (rate_limited). It applies to every group your number is in, whether it created the group or was added to it.
October 28, 2026
Changed
Name the channel when you create a group
Create a group now takes a channel field (--channel in the CLI), so a request says which channel the group is created on. Only whatsapp is supported today, and it’s the default, so requests that leave it out keep working. Any other value is rejected with 400. Read more.
October 25, 2026
Added
Webhooks can cover chosen phone numbers
A webhook can now be limited to specific numbers: pass phoneNumberIds when you create it, and it receives events only for those numbers. Omit it and the webhook still covers every number on the account. A new PATCH /api/v1/webhooks/{id} endpoint lets you change a webhook’s URL, event types, or numbers without recreating it, and the signing secret stays the same. Read more.
October 20, 2026
Added
Allow lists for inbound calls
Decline inbound calls from anyone who isn’t on a list you keep. A list covers every number on the account or just the numbers you pick, and a number’s own list replaces the account-wide one. Manage lists under Policies in the dashboard, with /api/v1/policies, the dial policy commands, the MCP tools, or the SDKs. A declined call is recorded with the new terminationType blocked and a blockedByPolicyId, and emits call.status_changed and call.ended like any other call. Phone numbers now report the list screening them as inboundCallPolicy. Read more.
October 18, 2026
Added
Add a number to an existing 10DLC campaign
Business accounts can now put another number under a 10DLC campaign they already registered — no form and no fee. GET /api/v1/10dlc/brands lists each brand’s campaigns, and POST /api/v1/numbers/{id}/10dlc accepts { "campaignId": "…" }. On an approved campaign the number is ready within moments; on one still in review it’s approved together with the campaign. Read more.
October 13, 2026
Added
A paused WhatsApp status
When Dial temporarily pauses WhatsApp sending on a line, its whatsapp.status now reports paused instead of staying ready, and you get a number.status_changed event for it. When sending resumes, the status returns to ready with a second event. Previously the line kept reporting ready while sends failed with 503 whatsapp_unavailable, and nothing told you when they would start working again.
October 11, 2026
Added
Inbound contact cards on iMessage and WhatsApp
A contact card someone shares with your iMessage or WhatsApp line now arrives as a regular media item on the message.received event and on GET /api/v1/messages, with contentType: "text/vcard" and a url that serves the .vcf file itself. Previously an iMessage contact card was dropped and the message arrived empty. See Receive an SMS and WhatsApp.
October 8, 2026
Changed
WhatsApp typing stops at about 30 seconds
The “typing…” a WhatsApp text message or text reply shows before it arrives is now capped at about 30 seconds. It still lasts about 200-250 ms per character, so a short message is unchanged, but a long message no longer keeps the send waiting for minutes. The message itself is sent in full, however long it is. See WhatsApp.
October 6, 2026
Added
channel: "sms" on Send a message and typing
Send a message and Set a typing indicator accept channel: "sms" to name the SMS rail explicitly. On a standard number it is the same as omitting channel, so existing requests need no change. A number with a monthly SMS sending allowance answers 429 once that allowance is spent.
September 30, 2026
Changed
WhatsApp messages type before they’re sent
A WhatsApp text message, and a WhatsApp text reply, now shows “typing…” to the recipient for about 200-250 ms per character before it arrives. The request returns once the message is sent, so a WhatsApp send takes that much longer to answer: about 7 seconds for a 30-character message. Sends with an attachment, reactions, and other channels are unchanged. See WhatsApp.
September 28, 2026
Added
Calls say why they failed
A call now carries failureReason when it ends as failed and Dial knows the cause. The same value is on the call.ended and call.status_changed events. Today the reasons come from a Self-Hosted audio target: self_hosted_key_rejected (Pipecat Cloud rejected your public key), self_hosted_agent_not_found, self_hosted_at_capacity, and self_hosted_unreachable. It is null on every other call. More values may be added, so treat an unknown value like null. See When a call fails.
September 27, 2026
Added
Self-Hosted audio: connect to a Pipecat Cloud agent
The audio config on POST /api/v1/self-hosted now accepts pipecatCloud: { agentName, publicKey } in place of wsUrl. Before every connection, including a reconnect mid-call, Dial fetches a single-use token from the agent’s /start endpoint, so Pipecat’s WebSocket token auth can stay on. See Pipecat Cloud.
September 23, 2026
Added
Groups report their channel
Each entry from GET /api/v1/groups now carries channel — whatsapp or imessage, the same value its messages carry — so you can tell which channel’s rules apply to a group before you send into it.
September 22, 2026
Changed
A WhatsApp line in a cooling-off period now retries itself
When WhatsApp puts a number in a cooling-off period before it will accept another verification request, setup fails and whatsapp.retryAvailableAt says when the period lifts. Until now that was where it stopped: the line sat failed until somebody asked for a retry, and a period that expired overnight was noticed the next morning.
September 7, 2026
Changed
WhatsApp can now send media
POST /api/v1/messages on a WhatsApp line (channel: "whatsapp") now accepts a single media attachment — the same media / mediaUrls fields as every other channel — where before it was text-only. More than one attachment is rejected with 400.
September 4, 2026
Fixed
Replying to a message that arrived over SMS answers 400, not 500
A threaded reply attaches to its target by the message id the target’s channel carries, and only iMessage and RCS carry one. When the other party has neither, an inbound message reaches your iMessage line over the SMS fallback — and a body reply to that message had nothing to attach to. Reply to a message reported that as 500 Internal server error, which read as a fault on our side for a request that simply isn’t supported.
September 3, 2026
Added
WhatsApp lines (beta)
WhatsApp is now a channel you can connect to a Dial iMessage number, documented at WhatsApp lines. It’s enabled per account while in beta — talk to us to request access, and until it’s granted the WhatsApp provisioning endpoints answer 404 rather than 403, because to an account without access the capability doesn’t exist.
August 20, 2026
Added
Know when a message is delivered, rejected, or read
Sending a message told you Dial accepted it, and nothing more — the carrier’s actual verdict arrived later with no way to hear about it. A new message.status_changed event now publishes each advance on the account stream, so you can react the moment a message lands or is rejected instead of polling GET /api/v1/messages.
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.