Skip to main content

Changelog

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

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 callPOST /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 callPOST /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 liveDialStackInstance.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 softphonephone.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.