Skip to main content

Changelog

New features, improvements, and fixes shipped to DialStack. Newest releases first.

October 5, 2026​

New features​

Platform settings​

  • Serve your portal from your own domain — platforms can put the portal on a domain they own, such as voice.example.com, and DialStack issues and renews its certificate. Once the domain is live, notification emails (voicemail, fax, emergency call alerts, etc.) can come from it too. See Custom Domain.

Ring groups and call queues​

  • Ring group calls can ring silently — supported deskphones can show a ring group call on screen and flash their light without ringing out loud, while direct calls keep their normal ringtone. Turn it on per phone under Advanced on the device page. See Silent ringing for ring group calls.
  • Ring queue agents who are already on a call — a queue can now ring agents who are on a call that didn't come from a queue, for teams such as dispatchers who deliberately take a second call. The default is unchanged: busy agents are skipped. See Agents on another call and ring_busy_agents in the Call Queues API.

Phone numbers​

  • Discard a port order draft — a draft port order that you don't intend to submit can be discarded, which releases the numbers it reserved. See Discarding a draft.

Devices​

  • See what is blocking an escalated phone — the Provisioning Escalations page shows each phone's name, MAC address, model, serial number and account, explains what is blocking it, and lets you enter a missing serial number right in the table. Closed escalations can be reviewed too. See Provisioning Escalations.

Hardware​

  • Easier hardware orders — the account picker shows each account's ID, so accounts with the same name can be told apart. A recipient name is now optional, and a draft order can be deleted. See Order Hardware.

Billing​

  • Billing files guide — a new guide explains the monthly billing files for your platform and your accounts, with worked examples in JSON and CSV. See Billing Files.

Softphone SDK​

  • Native calling on iOS — React Native SDK 0.2.0 connects calls to the system calling screen on iOS as well as Android. An incoming call wakes a backgrounded or closed app, rings on the lock screen, and can be answered there or in the app. The system's call, the app's call and the DialStack call now stay in step, so when one of them fails the others end too instead of staying open. A hold or resume that the server still hasn't confirmed after retries ends the call rather than leaving the two sides out of step. See the Mobile Integration Guide and the OS-integrated calling example.
  • Speaker toggle in the React Native softphone — when an app's OS integration manages call audio, it can give the softphone control of the audio output. The in-call audio button then works as a speaker toggle and also reflects switches made from the system call screen, a headset or a car. The OS-integrated example now shows speaker routing, ringback and the proximity sensor. Available in React Native SDK 0.2.0.
  • Mobile Integration Guide — a new guide describes the four levels at which you can add DialStack calling to a mobile app, from the drop-in softphone to the signalling protocol, what each level gives you, and what you build yourself. See the Mobile Integration Guide.
  • Share one softphone connection across browser tabs — the WebRTC guide now shows how to keep a single connection shared by several tabs, and documents the session limit: up to three sessions per user across browsers and mobile apps, with a fourth replacing the oldest. See Sharing one connection across browser tabs.

Bug fixes​

  • A blind transfer to a voicemail box, such as a shared voicemail extension, kept the transferring user's phone on hold until the caller finished leaving a message, and then showed the transfer as failed. The transfer now completes as soon as the voicemail answers.
  • An attended transfer to a call answered by voicemail or a menu was refused, leaving the caller on hold with nobody there. The caller now takes over the voicemail or menu.
  • A blind transfer of an inbound call to an external number showed the transferring user's number instead of the original caller's.
  • After a chained transfer, a call log entry could show the previous party's ID and number, and looking it up returned the wrong call.
  • For a call that went to voicemail, the call.end webhook's started_at was the time voicemail answered rather than the time the call started.
  • In a rare timing case, hold, resume and mute could fail for the first 30 seconds of a softphone call.
  • In a rare case, a hang-up, transfer or hold from a deskphone using encrypted signaling was lost, so the action failed and the other party stayed connected.
  • In a rare case during a network failover, an outbound call to an external number could be answered after it had already ended, leaving the called party on a silent line.
  • Removing a user from a deskphone, or moving the phone to another user, could leave the phone unable to register until it was restarted. It now switches to its new configuration.
  • Assigning a device to some users failed with an error even though they had no device. Errors on a user's page also appeared only later, on the Users list. Both are fixed.
  • Some deskphones picked up configuration changes only when restarted or synced. They now check for changes on their own.
  • Some deskphones and DECT bases kept retrying an unavailable server instead of switching to the backup. They now fail over, once they next fetch their configuration.
  • Certain phone models showed a standing "HTTP password not set" alert after provisioning.
  • A dial plan created through the API with the documented field names (schedule, target, prompt_clip, clip, voice_app) opened in the dial plan editor with empty nodes.
  • When a port order was refused because its billing phone number was with a different carrier than the ported numbers, the message didn't name the billing number. Editing the order afterwards also skipped ahead to the review step.
  • A port order that was never rejected could show a rejection date.
  • After the softphone lost its connection and reconnected, calls from before the drop stayed on screen as live calls that couldn't be reached or hung up. They now end, and a hang-up the server can't match to a call now ends that call on screen. Fixed in SDK 3.5.0 and React Native SDK 0.2.0.
  • Connecting the softphone could fail with an error when it started without a session token, held an expired one, was asked to connect while a connection or automatic reconnect was already in progress, or was reconnected right after disconnect(). These cases now connect normally in SDK 3.5.0 and React Native SDK 0.2.0.

September 28, 2026​

New features​

Calls​

  • Block specific callers — account admins can stop chosen numbers from reaching any phone number on the account. A blocked call is declined before any phone rings and still appears in call history as a failed call. Manage the list under Account Settings → Telephony, or through the Blocked Numbers API. See Blocked numbers.

Call recording​

  • Set how long call recordings are kept — a new Recording Retention setting sits next to Transcript Retention and controls when recording audio is deleted: one year by default, adjustable up to seven years. The call stays in your call history once its audio is gone. Available in the portal and through the Accounts API. See Account settings.

Voicemail​

  • Use an audio clip as a voicemail greeting — a user's or shared voicemail box's greeting can be one of the account's audio clips, so several mailboxes can share one message. See Using an audio clip.

Ring groups and call queues​

  • Add several members at once — the member picker for ring groups and queues lets you pick several users and add them in one step. See Ring groups and Queues.
  • Drag to reorder queue members — change a member's position by dragging its row. New members are added to the end automatically, and a member's position can also be changed through the Call Queues API.
  • Queue agents already on a call are not rung — an agent on any other call, whether inbound, outbound, internal or forwarded to their cell phone, is now treated as busy instead of being offered another queue call.

Click-to-call​

  • Ring a different set of destinations for click-to-call — a user's Find Me / Follow Me can hold named alternate ladders, and a click-to-call can choose one with find_me_follow_me_key, for example to ring only the user's cell phone. The user's usual routing is unchanged, including for users on default routing. See Create a call and the mobile click-to-call example.

Webhooks​

  • Follow port orders without polling — the new port_order.updated event fires when a port order changes status or its scheduled date is set or moved. See port_order.updated.
  • Call parking events — call.parked fires when a call is parked, and call.unparked fires when it leaves the slot, with a reason of retrieved, abandoned or timeout. See Call parking lifecycle.

Call logs​

  • See parked time in the call log — a park now has its own call-log entry covering the time the caller waited in the slot, grouped with the rest of the conversation. See Parked calls.

Devices​

  • Use every programmable key — button templates no longer have to keep a Line button, so every key on a desk phone can be used for something else. A template's full layout can also be created in one Button Templates API call. See Creating a template.
  • Send support a phone's serial number — when a phone can't be set up until its manufacturer releases it, its detail page asks for the serial number so support can get it released faster. The serial number can also be set through the Devices API. See A device that needs attention.

Hardware​

  • Order hardware for your accounts — platform admins can build a hardware order for any account, and get live shipping prices. Once DialStack enables payment for your platform you can pay by ACH; until then, submit the order as a request for DialStack to place. This is an early release. See Order Hardware.

Softphone SDK​

  • The web softphone fits its container — in SDK 3.4.0 the softphone fills the height its host gives it, scrolls when that space is short, and keeps the call controls in view. The in-call keypad is part of the call screen rather than an overlay. See the SDKs documentation.

Bug fixes​

  • After a call transfer, the call log could show extra entries with a destination of s or a negative duration, and transfer webhooks could name the wrong party or omit related_call. Transferred calls now produce one entry per phase, and webhooks and the call log agree.
  • A blind transfer into a queue showed queue members the transferring user instead of the original caller.
  • A blind transfer to a destination that couldn't be reached left the caller connected in silence. The caller is now disconnected.
  • After a voice app transferred a caller to an external number, the caller could stay connected after the other party hung up. The call now ends with the transfer.
  • A parked caller who hung up before being retrieved showed a zero-second park that ended when the call was parked. The park now runs until the caller hangs up.
  • A call parked with an attended transfer to *68 showed the parking user's internal identity instead of their extension in the call log.
  • In a rare case, retrieving a parked call left the caller connected alone after the other party hung up.
  • Internal calls that ended in a voicemail box, such as a shared voicemail extension or a ring group that times out to voicemail, showed s as the destination in the call log.
  • The call ID a softphone received didn't match the ID in webhooks, the Calls API, and the call log. It now matches.
  • Deleting a call listener while the caller was silent could leave it attached until the call ended. It is now removed right away.
  • Outbound calls to some numbers that were slow to start ringing were cancelled before they connected. They now keep ringing.
  • When a call woke several of a user's mobile devices, a device that came online after another had been reached never received the call and showed it as failed.
  • Removing a phone number's directory listing always failed, so the listing couldn't be moved to another number. It can now be removed.
  • Phone numbers added by a number order or port now appear in the audit log.
  • Correcting a rejected port order in the portal could send each step to the carrier, which could refuse the order before you reached the field you needed to fix. Changes are now saved as you go and sent only when you resubmit. Through the API, an update to a rejected port order now only saves it; pass resubmit: true to send it back to the carrier. See the Number Porting API.
  • Some deskphone models showed a setup prompt after provisioning, and lost their line when the primary server was unreachable even though they had registered with the backup. They now provision fully and keep their line during failover.
  • Creating a Managed VoiceAI agent could be refused for ordinary instructions, with a generic error. Those instructions are now accepted, and a refusal explains why.
  • Error notifications in the portal couldn't be closed, and didn't respond while a dialog was open. They now have a close button that works over dialogs.
  • The Find Me / Follow Me card accepted an invalid external number and only failed on save. It now flags the number inline and keeps Save disabled.
  • In the dial plan editor, an Internal Extension node's timeout is greyed out only when its target controls its own ring timing, such as a user with Find Me / Follow Me. Otherwise it stays editable.

September 21, 2026​

New features​

Softphone SDK​

  • Merge two calls into a three-way conference — the web softphone's in-call screen can merge two connected calls into one conversation, then split them back into separate calls. Hold, mute, and hang-up controls apply to the whole conference while it is merged. Doesn't work on mobile yet. Available in SDK 3.3.0. See the SDKs documentation.
  • Connect Android calls to the system calling screen — SDK 3.3.0 adds an OS call bridge and a worked Android example, so an incoming call can wake a backgrounded or closed app, ring on the lock screen, and be answered through the system interface. Outbound calls reported to the system can continue when the app moves to the background. See the OS-integrated calling example.

Dial plans​

  • Let callers dial an extension from an IVR menu — turn on extension entry for a menu and callers can key any extension in the account instead of choosing a listed option. It is off by default. An invalid extension follows the menu's Invalid exit when it is connected, or replays the prompt when it is not. See the Dial Plans guide.

Billing​

  • Allocate users and phone numbers to a service location — set where each voice seat and phone number is billed so a multi-location account's taxes, fees, and monthly total can be broken down by site without splitting the account into separate bills. The per-location breakdown will appear in billing files beginning October 1. See Users and Phone Numbers.

Service Subscription Agreements​

  • Choose the Service Subscription Agreement per account — a platform cleared to offer both the standard and healthcare Service Subscription Agreements can choose the appropriate one while creating each account, instead of using one agreement for the whole platform. The choice can be corrected until the customer accepts it. See Choosing the Service Subscription Agreement.

Call recording​

  • Choose which call directions are recorded — keep recording enabled for the account, then turn inbound, outbound, or internal call recording on or off independently. See Account settings.

Transcripts​

  • Set how long transcript text is retained — choose from 1 day to 7 years for call-recording and voicemail transcripts and their AI summaries. All accounts start at one year by default. Only the text is cleared when the window passes, so call history and audio follow their existing lifecycles. A separate retention control for call-recording audio is coming soon. Available through the Accounts API and SDK 3.3.0.

Phone numbers​

  • Protect phone numbers with an outbound porting PIN — every account with phone numbers now has a five-digit PIN that must be supplied before its numbers can be moved to another provider. Account and platform administrators can view or rotate it under Account Settings → Telephony. See Outbound porting PIN.

Branding​

  • Send customers to your own help center — set a Help center URL to replace the portal's built-in help entry and page-specific help with your own support content. See Platform settings.

Bug fixes​

  • Very short voicemail and call transcripts intentionally skip AI summarization, but no completion event was sent, leaving webhook consumers unable to distinguish a skip from work still in progress. voicemail.summary.complete and recording.summary.complete now fire in that case too; fetching the call or voicemail then shows a null summary and sentiment, confirming the skip rather than work in progress.
  • Retrieving a parked call produced two unrelated call-log entries, and the retrieval could show a zero duration, the wrong caller, or no transcript. The entries now link to each other and report the recovered call details correctly.
  • Locking an SMS port-out window failed even though opening one worked. Sending expires_at: null now locks the number as documented.
  • In a rare case, one side of a call recording could become silent for several minutes after the audio source changed. Recordings now continue capturing both sides.
  • Changing an extension in the portal could silently remove its user from ring groups and leave phone-number routing attached to the old extension. Extension changes now preserve those relationships.
  • After an agent answered a queue call and blind-transferred it, the caller could remain connected in silence after the transfer target hung up. The caller is now disconnected with the target.

September 14, 2026​

New features​

Call queues​

  • Let callers leave a queue by pressing a key — choose a digit or # and send the caller to a user, voicemail, or another queue without making them wait for the queue's Max wait. A new queue.call.exited webhook distinguishes this choice from a timeout. See the Queues guide and Webhook Events.

Devices​

  • Encrypt a device's call signaling — supported deskphones and DECT bases can now use TLS for their SIP transport. Choose it for one device under Advanced, while other devices continue to inherit the account or platform setting. See the Devices guide.

Users​

  • Rename users who only use the portal — an account administrator can now edit the name of a user who has portal access without a voice seat. See the Users guide.

Managed VoiceAI​

  • See the cost before creating the first agent — the creation screen now states the billing impact across all of the account's locations. The account's Monthly rates card shows this rate only when Managed VoiceAI is available or already active; AI connected through your own voice app does not incur it. See Account settings.

Bug fixes​

  • A queue's Keep callers in the queue when setting was saved and displayed but never enforced. A waiting caller now moves to the configured timeout behavior or dial-plan exit after the queue has lacked the required staffing for about 30 seconds.
  • In several rare cases where a queue could not start serving a caller, the call ended instead of following the configured fallback. These failures now use the dial plan's No Answer exit first, then the queue's timeout behavior.
  • A queue using any strategy except Ring all rang only the first step of an agent's Find Me / Follow Me sequence. Later steps, including external numbers, now receive queue calls and use their own ring times.
  • An Internal Extension node's Timeout was silently ignored when it targeted a user with Find Me / Follow Me, a ring group, or a queue. The new Override resource timeout control makes the node's value govern that target when wanted.
  • On some inbound calls answered in a React Native softphone, audio took 12 to 22 seconds to start. Network candidates gathered after answer now reach the call immediately.
  • The first page of call logs could take 5 to 28 seconds to load on an account with a long call history, regardless of the requested page size. The API now scans only enough history to return the requested page.
  • When many phones at one site registered at once, the whole site could be blocked for five minutes, and retries could extend the block repeatedly. The site now recovers automatically within seconds after the burst passes.
  • A port order's requested date could appear one day early for users west of UTC. Calendar dates now display as the date that was requested.
  • Converting a portal-only member to a voice-only member succeeded, but the detail page continued to show the old role and billing state. It now follows the new voice member record and refreshes correctly.
  • A rare failure during a VoiceAI call could stop new calls from being set up in one region. The affected media connection now times out cleanly without blocking other calls.
  • The Learn more link for a device that needs attention never appeared. It now opens a guide explaining why the phone cannot fetch its configuration yet and what happens next.

September 7, 2026​

New features​

Call queues​

  • Hold music per queue — a queue can now play its own audio clip while callers wait, instead of the account's hold music. Leave it on Account default and one change on the account still covers every queue. See the Queues guide.
  • Entry and periodic prompts — a queue can greet a caller once when they join, and replay a second recording on an interval for as long as they wait. Both come from the account's audio clips, pause the hold music while they play, and are cut short the moment an agent answers. See the Queues guide.
  • Overflow into another queue — a queue's timeout behavior can now send the caller to a different queue, for tiered escalation. The option was accepted by the API before but never worked and was hidden in the portal; it is now offered and delivers the caller. A chain that would loop back on itself is rejected. See the Queues guide.

Click-to-call​

  • Choose the caller ID per call — POST /v1/calls takes an optional did, one of the account's numbers to present as caller ID for that one call, ahead of the user's and the account's standing settings. See the Calls API.

Phone numbers​

  • Change the date of a port in progress — an order that is processing or scheduled has a Change Port Date action to request a new date and time, in the portal and over the API. See the Porting guide and the Port Orders API.

Devices​

  • More DECT models — a single-cell DECT base and its matching handset, sold as a lower-cost bundle, can now be ordered and provision themselves like the existing DECT bases. See the Devices guide.

Softphone SDK​

  • Add a call from the in-call screen — an Add call control dials a second destination and puts the current call on hold, so a user can start a second call, switch between the two, and hang up either. Until now a second call could only arrive as an incoming call. Available on web and React Native. See the softphone component.

Sandbox​

  • Sandbox click-to-call places a real call — POST /v1/calls on a test key used to be simulated, so no device ever rang. It now rings and connects for real; only the public network is refused. Simulation is still available through the test helpers. See Testing your integration.

Bug fixes​

  • A queue's Max wait could cut a caller off while an agent was already being connected to them. A ring in progress now finishes, and the timeout behavior runs when it ends instead. Short waits also clamped how long an agent's phone rang, so a five-second queue could not be answered at all. And a Max wait of 0 never ended: the caller was silently stranded after an hour. It now runs the timeout behavior at that one-hour ceiling.
  • A dial plan's Internal Extension node targeting a queue draws a No Answer exit, and it never fired; the queue's own timeout behavior always ran instead. The exit is now taken, and also when the queue refuses the caller because it is full or nobody is signed in.
  • Two ring-group nodes chained on No Answer never reached the second group; the caller was hung up instead.
  • A ring group's Ring user timeout target rang for the group's own member timeout, so a five-second group gave its fallback person five seconds. The fallback now rings for 30 seconds, or follows the user's own Find Me / Follow Me steps when they have some.
  • A call that reached voicemail but left no message was reported as voicemail in the call log and in call.end, sometimes as completed, depending on exactly when the caller hung up. Every such call is now no-answer; voicemail means a message was stored.
  • On a dial plan with several ring steps, the call log named the first step's user and the second step's destination as the parties, whoever actually answered. It now names the party that answered.
  • call.* webhooks could carry to_number as the raw string that was dialed next to an E.164 from_number, most visibly on sandbox accounts and on fictional test numbers. Both are now E.164.
  • An inbound call could produce two extra no-answer records ten seconds apart before ringing, because a routing loop in one region failed the first attempts and the carrier retried. The loop is fixed, so the call rings on the first attempt.
  • Outbound calls intermittently sat in silence for 13 to 42 seconds before the caller heard anything, when a carrier route accepted the call and then stalled. A stalled route now fails over to the next one within a few seconds.
  • In a rare timing case on a call queue, the agent who answered was disconnected the instant they picked up, so the call looked like a colleague had beaten them to it, and the call log could credit the wrong agent. The queue no longer tears down an answered call on that race.
  • On a mobile softphone woken by a push notification, the call could connect with audio while the screen stayed on "Ringing…", then drop about half a minute after answer.

August 31, 2026​

New features​

Webhooks​

  • Know when an account's billable counts change — four new events (user.created, user.deleted, phone_number.activated, phone_number.disconnected) fire whenever a user or a phone number enters or leaves service, each carrying the billable count either side of the change. See Webhook Events and Platform settings.
  • call.ringing says which way the call is going — the event now carries direction (inbound, outbound or internal), like the other call lifecycle events, so a screen pop can tell an incoming call from an outgoing one without a second lookup. See Webhook Events.

Find Me / Follow Me​

  • Confirm Pick-Up (External) for Find Me / Follow Me — when a step rings an external number, an external voicemail can answer and end the sequence before the later steps ever ring. Turn on Confirm Pick-Up (External) and an external callee has to press "1" to be connected; anything else is dropped and the sequence carries on. Off by default. See the Users guide.

Embedded portal​

  • Control who may sign the subscription agreement — accepting the agreement is now its own session component, agreement_acceptance, separate from account_onboarding. A session with onboarding alone can read the agreement and show the accept screen; only a session you mint with the acceptance component can submit it. The onboarding portal takes a matching canAcceptAgreement so a non-signer sees an explanation rather than a button that fails. See Account sessions.
  • A component can tell sandbox from live — DialStackInstance.livemode reports whether the instance is working on live data, derived from the publishable key, with no extra call. See the SDKs.

Bug fixes​

  • The subscription agreement could be signed by anyone with access to an account, not only the person entitled to sign for it. Signing is now checked when the acceptance is submitted, not only in the browser.
  • A softphone signed in on more than one device or tab rang on only one of them. Every active session for the user now rings, including sessions connected in a different region.
  • Softphone calls from some native mobile clients intermittently failed to establish audio, because the answer could come back without the information needed to negotiate a media path when the client was slow to gather network candidates.
  • A call queue whose agents are reached at an external number — a cell phone, typically — never rang anybody, because the outgoing leg was placed without a caller identity and the carrier refused it.
  • On a call queue served from another region, an agent's leg could occasionally fail to dial, so fewer phones rang than should have.
  • With Confirm Pick-Up (External) on a ring group, the call log, call.answered and call.end reported the call as connected from the moment the external number answered, which could be tens of seconds before anyone pressed "1". The connection time is now the moment the two parties are actually joined.
  • On some deskphone models the programmable keys could not be configured — the phone reported no keys at all, silently, while registering and calling normally.
  • The white-label guide described signing a user into the portal by redirecting with a session token. Nothing consumed it, so it never worked. The guide now documents the portal access that is actually supported. See the White-label guide.

August 27, 2026​

New features​

Do not disturb​

  • Server-side Do Not Disturb — a user can now be put on do-not-disturb through the API. A call dialed to them, or ringing them through a ring group, is silenced on every device at once: deskphones, softphone, and their follow-me destinations. It sits alongside the key on the phone itself, which still silences only that handset. See the Users API and the Presence guide.

Accounts​

  • An account can see the rates it is paying — account settings now show the account's standing monthly rates, and adding a user or ordering a number states what it adds to the bill. The figures are the rates in force today, with any agreed change flagged ahead of it. Available over the API too. See the Accounts API.
  • Account IDs are visible and searchable — an account's ID now appears next to its name in the portal and can be searched on, which matters when several accounts share a name.

Phone numbers​

  • Add many numbers to a port order at once — a port order no longer takes one number per row. Paste a whole list — from a spreadsheet column, a comma-separated line, or a carrier's own export — and every number is validated as it lands, with duplicates and unusable entries called out individually. See the Porting guide.
  • Inbound caller ID prefix at a glance — the phone numbers table has a column for each number's inbound caller ID prefix, so it can be checked across an account without opening every number. See the Numbers guide.
  • Inbound caller names — inbound calls now carry the caller's name where the carrier network publishes one, so a deskphone shows who is calling and not only their number. See the Numbers guide.

Voicemail​

  • Dial *98 and be asked which mailbox — *98<extension> still opens a mailbox directly; *98 alone now asks which one, which is easier from a borrowed phone. See the voicemail access guide.

Bug fixes​

  • With Confirm Pick-Up (External), the time to press "1" was whatever was left of the ring timeout, so a destination that answered late — a mobile, typically — was dropped mid-prompt. Every destination now gets 15 seconds from when it answers, and the prompt repeats. See the Ring groups guide.
  • An External Number step in a dial plan silently discarded numbers it considered invalid — no message, and the field was empty again when reopened. A rejected number now explains itself, the step keeps the number it already had, and Save is held until the entry is corrected.
  • A portal user invited into an account that signs in through single sign-on had to set a password before they could use single sign-on at all. They can now activate directly.
  • The webhook guide promised in-order delivery per account, which was read as a guarantee about a call's own lifecycle events. It is not one — a recording event can arrive before the call ends — and the guide now says which orderings hold. See the Webhook events guide.
  • Deleting a sandbox account could release a test phone number that other sandbox accounts were still using, because those fictional numbers are shared. Deletion is now scoped to the account it is deleting.
  • An outbound call dialed from a phone and refused before it was placed — a destination the account may not call, for instance — left a failed call-log entry and sent no webhooks. Nothing is placed, so nothing is logged now. Calls started through the API still record the entry.
  • Settings that a platform controls on behalf of its accounts could be changed through the API by an account administrator. They are now refused server-side, as the portal already implied.
  • The phone number limit on an account governs both ordering and porting, but several labels and messages described it as applying to new numbers only. Every place it appears now says the same thing.

August 7, 2026​

New features​

Presence​

  • Live park slot presence — the presence API now reports what is parked right now, alongside user presence. Ask for every slot in the account or name the ones you care about, and you get each slot's occupant — the caller's number and label, who parked them, when, and when the call rings back — plus an update the moment a slot fills or empties. See the Presence API.

Accounts​

  • Creating an account produces its main location — the address collected when an account is created now becomes the account's main location, so a single-site account is immediately correct for 911 and for taxes and fees with no separate step. In the portal, the new-device form pre-selects that location; creating a device through the API still takes the location you give it, and leaves it unset if you give none. The separate billing address is deprecated but still accepted, and most existing accounts have had a main location created from theirs. Later address changes are made on the location itself. See the Locations guide and the Accounts API.
  • See who administers an account — a new read-only endpoint lists the people who can administer an account in the portal, with their roles. These are a different population from the account's telephony users: an administrator or owner may have no phone seat and so never appeared on any public endpoint. Useful if you want to show an administrator-only link or sync the right people into your own system. See the Admin Portal Users API.

Phone numbers​

  • Search a long list of numbers — the phone numbers list now has a search box that filters the tab you are viewing as you type, matching on the number, caller ID name, carrier, and call-routing target. It lives in the shared phone-numbers component, so it appears both in the portal and anywhere you embed that component yourself. See the Numbers guide.

Softphone SDK​

  • Wider server SDK coverage — the server SDK now forwards expand[] on the methods that accept it, along with search on the user list, and adds several resources that had no server-side surface before. users.list in particular previously dropped both outright and users.retrieve sent no query string at all, so an expanded field could not be requested even by hand. See the SDKs documentation.

Bug fixes​

  • Some calls lost the far party's audio from its recording and from live-listen, while the call itself sounded normal to both parties. Recordings now capture both sides.
  • A number's caller ID prefix reached most forwarded calls but not all of them, and showed less than it should have. When the caller's name was not known, the prefix replaced their number rather than labelling it, so the answering phone saw [Acme] and no number; it now shows [Acme] +14084806024. A call forwarded by a voice app lost the prefix entirely. A number routed to a call queue and answered on an external number, such as a staff member's cell phone, showed the company's own number in place of the original caller — that path now presents the original caller with the prefix, like every other forwarded call.
  • A location whose emergency address was rejected by the carrier failed silently — the account looked fine, but devices at that location could not place outbound calls. A failed location is now flagged in the portal so the address can be corrected and retried.
  • In Firefox, an outbound softphone call that drew early ringback from the carrier showed a "call failed" message while connecting perfectly normally. Firefox does not support the mechanism used for early media, and that is now handled rather than reported as an error.
  • A rare stall in the call-handling layer of one region could stop new calls from being set up there, and several behaviors then extended a brief stall into a long one. Those have been removed, so a stall no longer spreads or persists the way it did, and it is now detected and alerted on promptly.
  • Branded documentation pages hosted for a platform returned an error instead of the page. They now render, and several links between pages that led nowhere have been corrected.

August 3, 2026​

New features​

Call recording & transcription​

  • Sentiment on transcribed calls and voicemails — a transcribed call or voicemail now carries an AI-derived sentiment alongside its summary: an overall verdict plus a per-speaker breakdown on calls. It appears on the AI Summary and Transcript cards in the portal and on the call and voicemail resources in the API. See Call Logs for how sentiment is judged and when the per-speaker badges appear, and the Calls API.

Presence​

  • Separate WebRTC reachability signal — a user's presence now includes a webrtc object with its own state and a count of live browser sessions, reported separately from their overall availability. See the Presence API.

Softphone SDK​

  • Discover other users from a user session — a new GET /v1/me/directory endpoint returns every other user on the signed-in user's account, as an id and display name only, so a softphone can build its own contact list, presence watch list, and transfer targets without your backend supplying a roster. See the User Profile API.
  • Watch other users' presence from the softphone — phone.subscribePresence(userIds) now subscribes over the softphone's existing connection and delivers a snapshot plus updates, so you can show who is available, on a call, or offline. Offline covers a user with no connected device at all, whether they work from a browser softphone, a deskphone, or a DECT handset. The basic softphone example demonstrates a team presence list. See the SDKs documentation.

Accounts​

  • Manage voice access and portal role independently — a user's voice seat and their administrator or owner role can now be added or removed separately, in any order, and both can be chosen when creating a user. An administrator or owner can exist with no voice seat and no billing, and a voice user can be promoted without being recreated. See the Users guide.

AI agents​

  • DialStack docs skill for AI agents — if you build against DialStack through an AI agent, you can now install a skill that makes it read these docs before answering and cite the page it used, instead of answering from memory. It is deliberately thin — a pointer layer with almost no product detail of its own — so it does not go stale when we ship. It follows the open Agent Skills standard, so Claude Code, Cursor, Codex, Copilot and Gemini CLI can all read it, and an organization owner can install it once for a whole support or admin team working in the browser. See the AI agents guide for install steps.

Documentation​

  • Redesigned developer documentation — the developer docs have a new look, and the guide above is reachable from the site's "For AI" menu.

API changes​

  • @dialstack/sdk 2.0.0 is published on npm — the SDK is published to npm as a major release. Its breaking changes are the ones announced in the last release and on June 29 — required owner email and contact name, required billing address and pricing on account creation, and the removal of account_role from user responses — plus one not previously listed: the deprecated users.endpoints resource has been removed. See the SDKs documentation.

Bug fixes​

  • On some deskphone models, placing a call on hold played a continuous dial tone into the handset for as long as the call was held. The tone is now off by default, and can be turned back on from the account's provisioning settings.
  • A deskphone could keep showing a SIP password prompt after a line was removed from it, because the removed line kept trying to register. Unused lines are now deactivated when the phone's configuration changes.
  • Retrieving a parked call from a deskphone could produce a call log entry with an internal identifier in place of the caller and no user attached; the entry is now attributed to the user and device that retrieved the call.
  • Calls answered by an AI agent connected and then went silent after about a second. Voice-app calls now hold their media path for the life of the call.
  • A voicemail deposit that captured no caller audio — an immediate hangup, or a dead-air robocall — could not be played back, and because playback never completed the message stayed unread. Once a mailbox held one, the phone's message-waiting light stayed lit no matter how many messages were heard. Empty deposits are now discarded and the light clears. This affected both personal and shared mailboxes.
  • Deleting a location that still had devices or pending hardware orders attached left them pointing at it. Those devices lost outbound calling, because they no longer resolved to an emergency address, and the staged orders could not be fulfilled. A location with devices or orders attached can no longer be deleted. Devices left pointing at an already-deleted location now show as having no location assigned, so an administrator can assign the correct one.
  • Changing an account's phone number limit in Telephony settings reported success and then reverted to the default of 25; the limit now saves, and is enforced when numbers arrive by port as well.
  • Fax-enabled numbers showed a call-routing target and a "Set routing" link in the phone numbers table, suggesting routing had to be configured for faxing to work. They now show "Not applicable".
  • An account's email address could not be changed on any account that had an owner — the attempt returned a generic failure with no explanation. The contact email is now independent of the owner's sign-in identity and saves normally.
  • The "Transfer ownership" action was offered to account administrators who were not permitted to use it, and the click was then refused. It is now shown disabled with the reason, for anyone other than the current owner or a platform administrator.
  • An account created on a platform that is not yet billable was stamped as billable, so making the platform billable later would have started charging for accounts created during setup, including test accounts. New accounts now inherit the platform's billing state.
  • Webhook deliveries refused before they left our network — for example an endpoint whose public DNS resolves to a private address — were dropped without counting toward the endpoint's health, so the endpoint was never flagged and nobody was notified. They now count, and such an endpoint reaches the unhealthy state and emails the platform's administrators like any other failing endpoint.

July 27, 2026​

New features​

Testing your integration​

  • Trigger every webhook event in sandbox, with no real call — authenticate with a sandbox key and every event DialStack emits in production can be exercised without placing a real call. See the testing guide.

    • Creating a call runs a simulated two-leg call. It advances on timers and produces call.* events, a recording, a transcript, and a summary with sample content, plus a complete call record when it ends.
    • The number you dial scripts the outcome. +1 500 555 01xx selects answered, no answer, busy, answering machine, or a mid-call transfer; 933 produces call.emergency. Your tests drive your real code path, with no test-only branches.
    • Two sandbox-only endpoints cover the rest. POST /v1/test_helpers/calls starts an inbound call for screen-pop and caller-ID testing, deposits a voicemail, or sets an explicit outcome and timings. POST /v1/test_helpers/events fires a single fax, queue, or other standalone event on demand.
    • Delivery is your real path. The same signed, retried, ordered webhooks and the same /v1/events stream as live traffic — only the source of the events is fabricated.

Devices​

  • Roll out a button layout across your phones — a button template can now be applied to many phones at once and designated as the account default, so new deskphones and DECT handsets inherit it automatically instead of being configured one at a time. Each phone still shows only the rows its model supports. See the Button Templates guide.

Calls​

  • Look up a call while it is still in progress — retrieving a call by ID now returns a live view during the call instead of only after it ends, so you can poll an in-flight call for its current state and caller display name. See the Calls API.
  • New connected_at timestamp for time-to-pickup — a new connected_at field records when the winning leg — a user's device or an external-number fallback — answered, on both the call resource and the call.answered / call.end events. It is null when nobody took the call: the caller hung up during the greeting or while ringing, or the call went to voicemail. It gives you a precise time-to-pickup signal on inbound calls that play a greeting, menu, or voice app before ringing a user, where the call is answered up front so the audio plays reliably. answered_at is unchanged and keeps its existing meaning: the signalling answer, which a greeting, menu, or voice app answering the media path satisfies. See the Calls API.

Phone numbers​

  • Set call routing up front when ordering or porting a number — the number ordering and porting flows now include a "Call routing" step where you pick a routing destination, so a number is already routed the moment it activates instead of sending the first callers to a "configure routing" prompt. The step is optional — you can choose "Set up routing later" and set it on each number afterwards. This completes the work behind setting routing ahead of a port, released on July 20. See the Numbers guide.

Accounts​

  • Accept the subscription agreement with your API key — a platform provisioning accounts programmatically can now accept the subscription agreement on an account's behalf using its secret key, instead of requiring the account owner to sign in to the portal. By calling it you assert that you presented the terms to the account owner and that the owner accepted them. See the Accounts API.
  • Account members list includes admins and owners without a phone seat — the account's people list now shows everyone with access, including administrators and owners who have no telephony seat, with badges marking which are billable. Previously anyone without a seat was invisible. See the Users guide.

Webhooks​

  • Retries pause for endpoints that keep failing — after five consecutive failed deliveries, an endpoint is treated as unhealthy: events are attempted once instead of retried, and the platform's administrators are emailed so the endpoint can be fixed. A single successful delivery clears the state and normal retries resume. See the webhook events guide.

Softphone SDK​

  • Compose your own softphone from its parts — the softphone's pieces (dial pad, call list, emergency-address banner, and the rest) are now self-contained and independently usable, so you can lay out your own interface instead of embedding the whole overlay. The SDK reference and a new usage guide cover the available hooks and components. See the SDKs documentation.
  • Native keypad tones on mobile — dialed digits are now sent natively during a call on mobile, so interactive menus and calling-card prompts respond reliably.
  • Sessions recover after a device sleeps — the softphone now detects a connection that went silent while the device was asleep and re-establishes it, instead of appearing connected but unable to place or receive calls.
  • Steadier connect and emergency-address handling — connecting and registering the softphone is more reliable, and the emergency-address state is reported more accurately during setup.

API changes​

  • POST /v1/accounts now requires email and primary_contact_name — both fields were optional and are now validated, so that every account is created with an owner. Creates that omit either field return a validation error. See the Accounts API.
  • account_role removed from /v1/users responses — this field was an admin-portal concept that had already been removed from the published API reference; the responses now match. Administrator and owner roles are available in the account's members list in the portal. See the Users API.

Bug fixes​

  • When checking voicemail from a phone, messages played back-to-back with no pause and no way to replay or erase one after hearing it. The options available after each message are now announced, so callers can replay, save, delete, or move between messages. This affected both personal and shared voicemail boxes.
  • Some deskphone models in timezones that observe daylight saving time showed the time one hour early; they now apply the seasonal change correctly.
  • A call log entry could show internal identifiers and untranslated text instead of readable numbers and labels, for calls that reached voicemail through a device's voicemail key or a shared voicemail button.
  • A call answered by an external fallback number was attributed to the wrong user on the call log and on call events; the call is now attributed to whoever actually answered, with the user who was rung recorded separately.
  • A menu that routed one of its own options back to itself could hang up the call instead of replaying the menu.
  • Editing an existing location's address in the portal reported success but kept the old address; the change now saves.
  • Creating an AI agent from within the dial plan editor showed a form with no way to save it; the form now scrolls and can be completed from that entry point.
  • Sandbox accounts are no longer asked to accept the subscription agreement, which had blocked opening them in the portal.
  • More port-in rejection reasons from the current carrier are now spelled out on the port order rather than shown as unknown.
  • A platform's handle can no longer be changed after the platform is created. Changing it left sign-in and branding pointing at the old handle.

July 20, 2026​

New features​

Call recording & privacy​

  • Automatic redaction of sensitive information — accounts can now opt in to have sensitive details (card numbers, Social Security numbers, and personal names and addresses) automatically removed from call transcripts and silenced in the recording audio. Turn it on from the account's Telephony settings. See the Accounts guide.

Softphone SDK​

  • Multiple calls at once in the softphone — the SDK softphone now handles more than one call at a time: a second incoming call gives a call-waiting alert, and you can swap between calls or transfer between them. See the SDKs documentation.
  • Standalone React Native package — the softphone now ships as a dedicated React Native package that any React Native app can embed, with native emergency-address handling built in. See the SDKs documentation and the React Native softphone example.
  • Sessions stay connected longer — softphone connections now refresh their access token automatically before it expires, so long-running calls and idle sessions no longer get disconnected and have to reconnect.

Phone numbers​

  • Per-number caller ID prefix — you can now set a short label on a phone number that is added in front of the caller's name on inbound calls (for example, [Acme] John Smith), so users can tell at a glance which number a call came in on. See the Numbers guide.
  • Set routing before a port completes — when you add numbers to an in-progress port order, they now appear right away so you can assign their inbound routing ahead of the scheduled cutover, instead of showing as unroutable until the port finishes. See the Numbers guide.

Webhooks​

  • Account-scoped webhook endpoints — platforms can now point a specific account's events at their own dedicated webhook receiver, without that receiver seeing any other account's events. See the Webhook Endpoints API and the webhook events guide.

Developer settings​

  • Rotate live and sandbox keys independently — you can now rotate your live secret key or your sandbox secret key on its own, instead of rotating both at the same time. See the Platform Settings guide.

Accounts​

  • Non-billable account owner — an account owner can now be designated to sign the subscription agreement and administer the account without being billed as a telephony user. See the Accounts guide.

Bug fixes​

  • Voice-app calls that dial or transfer to an internal extension now reach the user across all of their devices, along with ring groups, queues, and other voice apps.
  • The "Routed to" value on a call log now shows the extension that actually answered, for cases where it could previously display an intermediate number.
  • Improved handling of a rare timing case so a parked caller stays connected when the agent who answered from a queue is transferred elsewhere.
  • On a ring group, choosing "None (hang up)" as the timeout action now reliably clears a previously configured action.
  • A recently cancelled phone number now updates to inactive promptly once the carrier completes the disconnect.
  • A call queue's extension now stays displayed correctly after you edit other settings on the queue.
  • When a port order is rejected because the account number on file with the current carrier is incorrect, the status now spells out the reason to make it easier to correct.
  • Tightened the softphone's emergency-address check so an address is shown as confirmed only once the session's network location has been registered.

July 13, 2026​

New features​

Softphone SDK​

  • Embeddable softphone for web and mobile — a complete, ready-to-use softphone dialer now ships with the SDK, built from a single shared codebase that runs on both web and React Native. Drop it into your own application to give users a full calling experience — placing and receiving calls, attended transfer, hold, an incoming ringtone, and emergency-address handling — without building a dialer from scratch. See the SDKs documentation and the React Native softphone example.

Call recording​

  • Pause and resume recording — an agent can now pause recording while collecting sensitive information (such as a payment card number) and resume afterward. Pause and resume from the API, or with the in-call *7 toggle from the phone. The recording stays a single file with a silent gap. See the Calls API.

Phone numbers​

  • More inbound routing choices for a number — a number with no target now rings every user on the account instead of dead-ending, and you can also deliberately set a number to "route to nothing" so inbound calls are dropped silently. See the Numbers guide.

Call queues​

  • Reconnect waiting callers when an agent is made available — making an agent available from the admin portal (or adding a new agent to a queue) now immediately reconnects callers already waiting on hold, instead of waiting for the next queue event. See the Queues guide.

Devices​

  • One-touch park — on supported deskphones, a park key now parks a live call with a single press, retrieves the call with a single press, and lights up when a call is waiting. See the Devices guide.
  • Clearer status keys — on supported deskphones, speed-dial, busy-indicator, and park keys now glow green when idle and red during a call, instead of staying dark until a call is in progress.

Platform admin​

  • Edit account pricing after creation — platform admins can now adjust an account's retail pricing from the account's Pricing card, within the approved bands. See Managing Accounts.

Bug fixes​

  • Voicemail messages could occasionally be deleted at random when a mailbox reached its message limit; mailboxes now correctly remove only the oldest messages.
  • The first second or so of some prompts (voicemail access, on-hold, parking, and dial-plan audio clips) could be clipped; prompts now play from the beginning.
  • Voicemail menus were refined: the options menu now announces itself, sitting idle at the PIN prompt now plays a simple goodbye instead of a "too many attempts" message, and pressing a key during a multi-part prompt reliably interrupts it.
  • Some inbound calls answered by an external forwarding number never sent a call.end webhook; the terminating event is now delivered.
  • Attended-transfer consultation calls now send a final call event to webhook consumers, instead of appearing to start and never end.
  • Voice-app calls that dial or transfer to an outside number now use the account's outbound caller ID instead of being rejected.
  • Callers who reach a queue with no available agents now get a clear outcome instead of a repeating ringback tone.
  • Fixed a rare timing issue where answering a parking ring-back — when it rang more than one of your devices at once — could fail to reconnect you to the parked caller.
  • Creating a number order for a number already in use on another account no longer leaves the number unroutable.
  • Emergency-call notification emails for calls placed from a softphone now include the device and the caller's emergency address, matching desk-phone calls.
  • Line keys edited directly from a deskphone no longer override the managed configuration on the next provisioning cycle.
  • Removing a user's extension in the admin portal now saves correctly.
  • Adding a device that is already on the account now shows a clear message instead of a generic error.
  • Platforms that do not define a dark theme no longer have dark styling appear in the admin portal.

July 6, 2026​

New features​

Numbers & E911​

  • Use a temporary number as a location's primary number — a location can now use a temporary number as its primary number, so emergency (E911) service can be set up while a permanent number is still being ported in. See the Locations guide.

Faxes​

  • Guardrail when auto-deleting faxes — if a fax line is set to delete documents automatically, a notification recipient is now required, so incoming faxes are always delivered somewhere before they're removed. See the Faxes guide.

Call queues​

  • Smarter waiting-caller routing — several refinements to how queued callers are matched to agents: a waiting caller is connected as soon as an agent frees up, and no-answer handling moves smoothly through the available agents. See the Queues guide.

Call parking​

  • More parking slots — accounts can now use many more call parking slots, supporting larger multi-location businesses. See the Parking guide.

Platform admin​

  • Hide the built-in AI voice agent — platforms that provide their own AI voice solution can now hide DialStack's default AI agent option from their accounts.

Bug fixes​

  • Completing an attended or cross-region transfer no longer occasionally drops the connected call; the remaining parties now stay on the line as expected.
  • Fixed a failure that could stop call listening, AI voice, and transcription audio from starting.
  • Opening a link straight to a specific port order or call log in the admin portal now loads the right account instead of a blank account picker.
  • The busy indicator (BLF) light for a parked call now lights reliably on subscribed phones.
  • Fixed the voicemail waiting light on DECT handsets, which was not being driven correctly.
  • Speed-dial and busy-indicator keys on supported deskphones now show the assigned name and a working status light instead of a raw identifier.
  • Admins with both platform and account access can once again switch between accounts in the account picker.
  • When creating an account fails, the portal now shows the actual reason instead of a generic error.

June 29, 2026​

New features​

Platform admin​

  • Create accounts with billing and pricing in one step — the Create Account flow now captures the billing address and the agreed retail pricing as part of creating a customer account, with the option to send an onboarding invite immediately. See Managing Accounts. Note for API users: POST /v1/accounts now requires billing_address and pricing. See the Accounts API.

Developers​

  • Configurable webhook endpoints — you can now register multiple webhook endpoints and subscribe each to only the event types it cares about (for example one endpoint for call events and another for voicemails), instead of every event going to a single URL. Endpoints are also scoped by mode, so sandbox traffic never reaches a live URL. See the Webhook Endpoints API.
  • Voicemail summary webhook — a new voicemail.summary.complete event fires when the AI-generated summary of a voicemail is ready; fetch the summary text from the Voicemails API.

Devices​

  • An additional deskphone model is supported — one more desk phone model can now be added and provisioned. See the Devices guide.

Bug fixes​

  • Fixed a bug that prevented recording, and the resulting transcript and summary, for some inbound calls answered automatically (for example by a voice app, menu, or queue).
  • A number port that had been approved but not yet submitted to the carrier was shown with a confirmed-looking status and transfer date, implying the port was already scheduled. It now reads "Ready to Submit" with no date until it is actually submitted.
  • After a number was re-ported and the transfer completed, the number could incorrectly appear under the "Cancelled" tab and could not be assigned routing from the portal. Such numbers are now correctly shown as active.
  • Fixed a rare case where retrieving a parked call that had been parked during an attended transfer left the caller hearing only hold music for the rest of the call.
  • A parking-slot busy lamp on some deskphones could stay lit after the parked call was picked up; it now clears correctly.
  • The hardware Message/voicemail key on some deskphones could return a fast-busy instead of reaching the mailbox; it now connects reliably.
  • Fixed certain desk phone models not lighting their message-waiting lamp when a new voicemail arrived.
  • A device assigned to a button template can no longer lose its primary line key, which previously could prevent held calls from being retrieved on some phones.
  • Sandbox-mode accounts could not place internal extension-to-extension calls, so those calls produced no events or webhooks. Internal calls in sandbox now connect and emit events; only calls to the public phone network remain blocked.
  • Opening a fax from the account portal no longer stacks two detail dialogs; faxes now open as a normal page.
  • Fixed platform branding changes failing to save with a generic error.
  • The documentation support assistant now works for visitors who are not signed in.

June 22, 2026​

New features​

WebRTC​

  • Early media on outbound calls — outbound WebRTC calls now play early media before the call connects: carrier ringback, busy and other in-band tones, and any pre-answer announcements or auto-attendant audio. Previously the caller heard silence until the other side answered. See the WebRTC guide.
  • Local ringback tone — for internal calls and when an out-of-band ringing signal is received, the SDK now generates a ringback tone locally so the caller hears ringing instead of silence while the call is connecting.

Extensions​

  • Assisted extension-length renumbering — changing an account's extension length now opens a confirmation dialog that previews and applies a renumbering of every existing extension so they keep working at the new length, updates speed-dial buttons that point at them, and reprovisions the account's phones automatically. See Changing the extension length.

Numbers​

  • Set up routing before a number is active — you can now assign call routing to a number that is still porting in or being provisioned, so it rings the right place the moment it activates instead of needing a manual change after the fact.

Platform admin​

  • Subscription agreement acceptance — account owners now review and accept the DialStack service subscription agreement (including the 911/E911 acknowledgement) at first sign-in, and the accepted version, date, and IP are recorded.

Developers​

  • User presence API — a new read-only presence resource reports whether a user is reachable, offline, or on a call right now, for both the signed-in user and any user on the account. See the Presence API.
  • Voicemails linked to their call — a voicemail now references the call that produced it; request expand[]=call to inline the full call object. See the Voicemails API.

Bug fixes​

  • Click-to-call (calls started from the API or app) now follows the user's full Find Me / Follow Me sequence instead of ringing only the first step.
  • The recording.transcription.complete and recording.summary.complete webhooks now send the call identifier in the same format as every other event and the documentation.
  • The SDK event stream now stops trying to reconnect once a session has expired or been revoked, instead of retrying indefinitely with a stale token.
  • Number port rejections now report a specific, actionable reason (such as an invalid porting PIN) instead of a generic carrier error.
  • Removing a line from a device no longer leaves the user unable to be assigned a new device.
  • Fixed certain phone models incorrectly showing buttons as unsupported when applying a button template, even though the model does support them.
  • When call recording is turned off but transcription is on, the audio captured only to produce the transcript is now reliably deleted even if transcription fails.

June 15, 2026​

New features​

Fax​

  • Fax is now available — send and receive faxes from DialStack. A new Faxes page in the account portal lets you send a fax by picking a fax-enabled number and uploading a PDF, browse inbound and outbound faxes with filtering by direction, status, and number, open any fax in an in-app viewer, and see at a glance which inbound faxes are unread. Enable fax on a dedicated phone number — while fax is on, that number receives inbound faxes instead of voice calls — and add email recipients to be notified when one arrives. See the Faxes guide and the Fax API.

Voice apps​

  • Transfer to an external SIP endpoint — a dial plan transfer can now target a SIP address (for example, an external AI voice agent), in addition to extensions and phone numbers. See the Voice Apps guide.
  • AI agent call transfer — the built-in voice AI agent can now hand a caller off to an extension or phone number after its closing message, with no dead air. See the voice AI guide.

Devices​

  • Ordered hardware in the Devices section — hardware you have ordered but not yet received now appears under Devices, where you can pre-stage each unit (who it is for and which location) before it ships.
  • Base station deletion preserves handsets — deleting a DECT base station no longer deletes its paired handsets; the handsets remain so they can be re-paired to another base.
  • Reorder phone buttons — programmable button templates now support drag-and-drop reordering. See the Button Templates guide.

Platform admin​

  • Agreed pricing in the admin portal — the agreed retail pricing added through the API last release can now be set directly in the UI, on the Create Account form and in a new Pricing section on the account page. See Managing Accounts.
  • Troubleshooting and network requirement guides — new Basic Troubleshooting and Network Requirements guides are now available under Platform Admin. See Basic Troubleshooting.

WebRTC​

  • Longer-lived sessions and instant revocation — WebRTC user session tokens now last 24 hours by default and can be configured up to 7 days, reducing how often your app has to refresh them, and a new endpoint immediately revokes all of a user's active sessions. See the API.

Misc​

  • Tabbed account settings — the Account Settings page is now organized into tabs (General, Telephony, Locations, Devices, Activity) instead of one long scrolling page.
  • Dial plan editor zoom — the dial plan editor now zooms with the scroll wheel, centered on the cursor; drag to pan.

Bug fixes​

  • Fixed a case where audio could be silent toward the other party after answering an incoming WebRTC call, so the far end now reliably hears the browser microphone.
  • Fixed incoming WebRTC calls that could fail to connect on the first press of Answer — a rare timing issue while the browser was still prompting for microphone access; a second press worked.
  • Resubmitting a number port order now reports a clear, actionable reason when something needs attention (such as a scheduled date that has passed) instead of a generic error, and an approved order whose submission failed can now be edited and resubmitted.
  • Fixed the call logs page failing to load for an account when a call had incomplete direction information.
  • Fixed a registered device that could incorrectly show as Offline because of a username letter-case mismatch.
  • Fixed a "no SIP lines configured" error when rebooting or resyncing shared devices that are not assigned to a user.
  • Assigning a device to a user who already has one now shows a clear message instead of a raw error.
  • Setting or changing a voicemail PIN by phone now works reliably; digits pressed while the prompt is still playing are no longer discarded.
  • The hardware Voicemail key on deskphones and DECT handsets now reliably dials your mailbox.
  • Extended the busy-lamp fix so a monitored extension's indicator clears reliably in ring groups, queues, and Find Me / Follow Me scenarios.
  • Transferring a call to 911 no longer attaches an incorrect dispatchable location; the emergency operator determines the location instead.

June 8, 2026​

New features​

WebRTC​

  • Call transfer — WebRTC users can now transfer calls, both blind (transfer immediately) and attended (consult the destination first, then complete). Available in the SDK and the softphone example.
  • E911 emergency calling — WebRTC users can now register a validated emergency address that is bound to their device and used to route 911 with a dispatchable location. Emergency calls are never blocked. With emergency calling in place, WebRTC users can now place regular outbound calls to the public phone network, which were held back until E911 support was ready. See the emergency calling guide.

Platform admin​

  • Agreed pricing — platforms can now set and retrieve agreed retail pricing per account through the API, supporting platform-initiated onboarding.

Devices​

  • Programmable phone buttons — configure the buttons on desk phones and DECT handsets through reusable templates. Rather than picking low-level key types, you choose what each button should do — speed dial, busy-lamp/presence monitoring of another extension, or a shared mailbox key that lights when messages wait, dials in to listen, and can transfer a caller into the box — and bind the template to devices, with per-device overrides. See the Button Templates guide.
  • DECT handset improvements — the handset model can now be edited from the device page, and the add-device hardware selection flow has been refreshed. See Managing Devices.
  • Faster line updates on assignment — assigning, reassigning, or unassigning a user on a device now refreshes the affected phones immediately, with no manual reload prompt.

Bug fixes​

  • Hanging up an answered incoming call from the WebRTC softphone now reliably ends the call for both parties.
  • Fixed a rare timing issue where a call could keep ringing even after it was answered, instead of connecting.
  • Searching for available numbers by an unsupported ZIP code now returns a clear, actionable message instead of a generic error.
  • Deleting an account now correctly disconnects its numbers.
  • Fixed a busy-lamp indicator that could stay lit on some desk phones after a monitored extension's call ended.
  • Fixed a failure that prevented voicemails left in a shared mailbox from being saved.
  • Fixed an occasional incorrect voicemail transcription summary.

June 1, 2026​

New features​

WebRTC​

  • WebRTC initial release — users can now make and receive calls over WebRTC. Up to 8 simultaneous calls per user are supported, with hold/resume functionality. See the WebRTC guide for more details. Limitations: outbound calls to the public phone network are temporarily disabled while we finish emergency-calling support (expected within a week), and more advanced features (e.g. call transfer) will follow soon.
  • Softphone example — a ready-to-run browser softphone built on the SDK is now included in the SDK examples.

Voice apps​

  • Notify mode — the Voice App dial-plan node now supports a Notify mode for streaming live call audio to an external listener (for example, an AI agent or observer) without joining the call. Pick the mode directly in the dial-plan editor.

Locations​

  • Main location — every account now has a designated main location used to determine tax jurisdiction and regulatory fees for users and numbers without a location of their own (such as WebRTC-only users). The first location you create is set automatically; swap it any time from Account Settings. The main does not affect E911 — emergency calls always use the calling device's own location. See the Locations guide.

Misc​

  • The holiday exit for schedule nodes is back in the dial plan editor, allowing separate call routing on holidays.

Bug fixes​

  • Call logs that intermittently failed to load now load reliably.
  • Creating a new queue from the dial-plan editor no longer fails.
  • Fixed a bug where phones dialed for a queue or Find Me / Follow Me call would sometimes not stop ringing when the call was abandoned before being answered.
  • Ordering a new (fake) number in sandbox mode now works reliably.
  • Fixed a failure when porting a number to DialStack.

May 25, 2026​

New features​

Queues​

  • Position announcements — callers waiting in queues now hear their position.
  • Queue UX overhaul — saner defaults, dispatch warnings, queue-member auto-login on add, and settings polish.
  • Lifecycle webhook events — new webhook events for queue state transitions.

Devices​

  • DECT handsets — handsets are now a supported device type in /v1/devices: add-device flow, handset detail page, nullable paired base, per-device location for E911.
  • Devices section redesign — the Devices UI has been refreshed.

Call parking​

  • Configurable park timeout — set the call-parking timeout under account settings.
  • New docs — see the Call Parking guide.

Call routing​

  • Connected-line identity is now stamped on calls from the PSTN to a user's devices, internal dials, queue ringback, and ring-group ringback — callers and callees see the right name and number.
  • hang_up dial-plan node — an explicit hangup step is now available in the dial-plan editor.

Bug fixes​

  • When a parked caller hangs up, all phones that were ringing them back now stop ringing immediately.
  • Helper CDRs are filtered out of call logs.