Release log
Major OpenPhonex releases, with links to the features and guides you can use today.
Major product updates, newest first. Follow the links in each entry to configure or use the feature.
The initial roundup covers 18–31 August 2026. Dates are in UTC and follow verified production deployments, not pull-request merge dates. For features released across several services, an entry uses the date by which the required services were confirmed deployed.
9 September 2026
Every automatic ending now records its reason
- A call ended by the platform records
ended_reasonon the call and on its terminal webhook; previously that field was left empty on calls the media worker ended, so the reason existed in the event and never reached the record. - The five reasons are unchanged:
hangup_requested,remote_party_disconnected,max_call_duration_reached,no_caller_speech_after_answerandagent_completed. - A call that has not ended, or that failed before connecting, still reports no reason; failures keep reporting through
technical_failure.failure_reason_codeinstead. - Why a call ended
The maximum length and the silence window are per-agent
- Each agent can now set its own maximum call length and its own after-answer silence window, instead of inheriting one platform value.
- An agent that sets neither keeps the platform defaults, so existing agents are unchanged.
- A call ended by either rule reports the same reasons it always did,
max_call_duration_reachedandno_caller_speech_after_answer, so nothing downstream needs to change. - When a call ends automatically
A call the agent finishes now says so
- A call the agent ends itself — its script reaches a goodbye, or its workflow completes — now reports
ended_reasonagent_completed, where that reason was previously empty. - This is the commonest ending in a scripted workflow, so it closes the largest remaining gap in "why did this call end": before, a conversation that simply finished looked the same as one with no reason recorded at all.
- The four platform endings are unchanged and keep their own reasons;
agent_completedis never reported for a hang-up, a call that hit a limit, or a call that failed before connecting. - Why a call ended · When a call ends automatically
Outbound calls and Simulations Lab runs need nothing installed
- One hosted dialer places every managed outbound call and one hosted runner drives every real-time Simulations Lab session, for every workspace: there is no worker to run, no worker key to install and no gateway deployment to register before
POST /v1/callsworks. - Each job's workspace, project, agent, caller number and destination are read from the call record itself, and every room's metadata and evidence receipts stay bound to the workspace and run that asked for it.
- A workspace that runs its own self-hosted gateway in queue mode keeps dialing through that gateway; what outbound depends on is your outbound authorization, not any setup of your own.
- A gateway token minted without an explicit
scopeslist now carries onlygateways:reportandcalls:authorize;selfhost-bootstrap.shand the workspace's Gateway Tokens action request the full runtime set instead, and tokens that already exist keep the scopes they were stored with. - Hosted workers hold no workspace credential · Deployment modes · Simulations Lab · Outbound authorization
8 September 2026
Calls that end themselves
- OpenPhonex now ends a live call on its own, so a call cannot run unattended against your balance, when: nobody left on the call, 29 minutes reached, or nobody heard for 20 seconds after answer, reported as
remote_party_disconnected,max_call_duration_reachedandno_caller_speech_after_answer. - A caller who leaves is now noticed even when the network never says so: the media server is asked who is on the call every 15 seconds, and a call empty for 15 seconds continuously ends.
- All three values are platform-wide and cannot be set per agent yet. A call ended by a rule is billed exactly like any other completed call, and ends sooner, so it can only cost less.
- An ordinary hang-up by the other party is now reported as
remote_party_disconnectedon the call detail and in thecall.completedandcall.endedwebhooks, where that reason was previously empty. - When a call ends automatically
End a live call, and see why a call ended
POST /v1/calls/{call_id}/hangupasks a call that is already live to hang up; it answers202withhangup_requested_atand never reports the call as ended, because the media session is torn down separately and the call then completes through its ordinary path.- Asking twice returns the original request rather than starting a second teardown, and an unacknowledged request stays visible so a request nothing acted on is something you can see.
- A call still queued for origination is refused with a pointer to
POST /v1/calls/{call_id}/cancel, which remains the right tool before anything dials. - A completed call now carries
ended_reason:remote_party_disconnected,hangup_requested,max_call_duration_reachedorno_caller_speech_after_answer. It is empty on calls that completed before this shipped, and a failed call still reportstechnical_failure.failure_reason_codeinstead. - End a call that is still running · Why a call ended · Customer REST operations
Carrier verification progress reaches your number request on its own
- A business profile whose identity is with the carrier is now re-checked on a schedule instead of only when someone presses Sync, so progress is picked up without anyone watching for it.
- Your number request moves to the state the carrier check actually implies in the same pass, so a request no longer sits on "awaiting verification" while the carrier already has the identity.
- When the carrier verifies the identity, the request continues from there without an operator step.
- Customer REST operations
Post-call extraction runs without being asked twice
- An agent with an active extraction schema now has its calls extracted automatically: the extraction worker is a deployed role, so
call.post_call_extractionwork is claimed as it is queued instead of waiting for someone to run it. call.extraction.readyandcall.extraction.failedwebhooks fire for those calls, so an integration that derives an outcome from them stops seeing silence.- Calls that queued before this release are extracted too, oldest first, as long as their transcript is still retained.
- Extraction remains opt-in per agent, and nothing changes for an agent without a schema.
- Optional post-call extraction · Configure an event endpoint
Transcript confidence is a measurement, or nothing
GET /v1/calls/{call_id}/transcriptreturnsconfidence: nullfor a turn whose speech recogniser reported no confidence, instead of the fixed placeholder every turn used to carry.- Deepgram reports a real per-utterance confidence; Azure does not report one at all, so calls on an Azure recogniser return null for every turn.
- Turn boundaries (
start_ms,end_ms) are now the measured ones. A turn nothing measured has an equal start and end rather than an invented length. - Read call evidence
A longer endpointing hold, and per-agent thresholds in every language
- Agents in a language with no trained turn detector now hold 800 ms after the caller stops speaking before treating the turn as finished, replacing a 200 ms-era default that could end a turn during a mid-sentence pause.
min_speech_msandsilence_hold_msare explicit numbers and now apply in every language, overriding any sensitivity preset and the platform hold.- A
min_speech_msbelow the 500 ms interruption floor is raised to it on a phone call, because shorter bursts of background noise were cutting agents off mid-word. interruption_sensitivityremains English-only, because a preset is a name for a measurement taken on English audio; set the two explicit values instead on an agent in another language.- Interruptions and barge-in
7 September 2026
Simpler workspace capabilities and optional destination restrictions
- Open Capabilities to see available destinations first, followed by channels, effective call limits, and explanations of voice spending, wallet spending and simultaneous calls.
- Add optional country restrictions for outbound calls and SMS; removing them restores only destinations already available to your workspace.
- Request higher limits from the page without changing caps, prices or wallet funds; higher-limit requests still go through operator review.
- Syria is no longer blanket-blocked by OpenPhonex; carrier availability, number rules, pricing checks and other applicable safeguards still apply.
- Destination controls · Workspace limits
Import a campaign contact list from an Excel workbook
- The campaign wizard's contacts step now accepts a CSV or an
.xlsxworkbook; both are read in your browser and post the same rows toPOST /v1/contact-lists, so the two produce identical lists and per-row reports. - Date and number cells arrive as the text the sheet displays, not an Excel serial number or a rounded float — keep an account reference or a phone number in a text-formatted column.
- Every contact list now records a
source(api,csv,xlsx, ormcp) so you can see how its rows arrived. - Contact lists · Build the list
Several obligations per contact, a payment reminder that reads contact variables, per-contact languages
- A contact variable may be a list of flat objects (one debtor, several loans): at most 16 items of 16 keys, string or number values, within the same 4 KB row budget. The workspace wizard groups several CSV rows per phone number into one contact's
obligations(Several rows per phone number). - A conversation workflow speaks a list only through a section you author in a disclosing step (
{{#obligations}} … {{/obligations}}), once per item, in your own words; the all-or-nothing rules extend to lists. - New starter template Payment reminder from contact variables (
payment_reminder_variables): the payment reminder whose one read tool is served from the campaign contact's own variables, with the same verification-before-disclosure gate and no customer endpoint. - Each contact's
languageis the language its calls are made in (the campaign'slanguageis the default); a contact whose language the AI agent does not publish endspre_dial_failedwithskip_reasonlanguage_not_published, and a contact with no language on a multilingual agent endslanguage_required. - Contact lists · Languages · Several obligations on one account
Campaign results with business outcomes, and a review inbox
- The results export (
GET /v1/campaigns/{campaign_id}/export) keeps its columns and appends the last call's business outcome: the workflow outcome and its label, the interrupt that ended the call, the post-call extraction status and oneextraction.<field>column per field of the AI agent's extraction schema, and whether a recording and a transcript exist;GET /v1/campaigns/{campaign_id}/resultsis the same as JSON. - The review inbox lists the attempts whose workflow asked for a person (promise to pay, already paid, dispute, hardship, callback, language request, wrong party) with the call's evidence inline; a reviewer resolves each with a note (
POST /v1/campaigns/{campaign_id}/reviews/{attempt_id}/resolve, audited, one resolution per attempt) and exports the resolved set (GET .../reviews/export). - The workspace shows Review inbox (N) on every campaign; the inbox filters by state, outcome and language, plays the recording, links the transcript and shows the extracted fields.
- Campaigns · Review inbox · Post-call results
Campaigns open to every active workspace
- Campaigns and authorized application batches are part of what every active workspace may do; the per-profile switch
campaigns_allowedand the launch reason codecampaigns_not_in_profileno longer exist. - A call sent with
bulk: true, your own batch label ascampaign_idand auser_authorization.authorized_byis an ordinary authorized call on any active workspace; a batch without an authorizer or with an unknown relationship is still held, and the custom implementation-services profile still sends every launch and batch to an operator (needs_review.custom_always_review). - The campaign wizard's review step previews each launch check — sanctioned destinations, workspace state, voice, your destination allowlist, purpose, consent basis, operator review — and says how many days a list takes under the tighter of your daily call cap and unique-destinations cap.
- The Capabilities page shows a Campaigns row and labels every cap in force, including operator-set spend caps.
- Launch a campaign · Campaigns · Policy & outbound · Authorized application batches
6 September 2026
Capabilities
- The workspace outbound permission record is now called capabilities across the API, the MCP tools and the workspace, with no compatibility aliases:
GET/POST /v1/organizations/{organization_id}/capabilitiesandPOST .../accept-policyreplace theoutbound-permitroutes,get_capabilities/request_capabilitiesreplace the permit tools, the response key iscapabilities, and authorization decisions carrycapabilities_snapshotand the reason codechannel_not_enabled. - Every workspace has exactly one record from the moment it is created (
not_activated), and activation is automatic through both trust doors — an operator approving your business verification, or your first registration-free number — granting the default profile with its caps, the channels your workspace holds, and every destination except sanctioned countries; the states arenot_activated,pending_review,activeandsuspended. - A request must choose its destinations:
all_countries: true, or at least one country code; an unrecognized entry is refused by name. - The Capabilities page in the workspace shows the record, the caps in force, usage and open reviews, and takes requests with a searchable destination picker; calling rules attached by an operator are returned as
calling_ruleswithcalling_rules_active, andmetadata.operational_profileis gone. - Your workspace capabilities · API reference · Tool reference
Destination countries required for the outbound permit
- Requesting or replacing the outbound permit now requires at least one destination country; an empty or unrecognized list is refused instead of authorizing every destination.
- The three outbound permit routes (
GET/POST /v1/organizations/{organization_id}/outbound-permitandPOST .../accept-policy) are documented in the API reference. - Outbound permits · API reference
Outbound permit
- The self-serve outbound permission, formerly called the risk envelope, is renamed across the API, MCP tools, and the workspace, with no compatibility aliases.
- Read or request it at
GET /v1/organizations/{organization_id}/outbound-permit, or through theget_outbound_permit/request_outbound_permitMCP tools. - Request and track your permit from the Onboarding page: choose one or more use-case profiles, the channels you need, and destination countries, then accept the outbound policy.
- Approval is instant once business verification (KYB) is complete; adding the custom implementation-services profile always goes to operator review.
- Request your outbound permit · Tool reference
Delivery and acknowledgements controls in the agent editor
- Delivery profiles and acknowledgements, previously API and MCP only, now have full controls in the agent editor.
- Inside Voice stack, a chooser under each voice offers Provider default and the four delivery profiles, each labelled with what it changes and audible on the same Listen preview a call uses.
- Acknowledgements gets its own section: an on/off switch, up to six phrases of your own, a delay from 0.6 to 3.0 seconds, and a preview in your agent's own voice.
- Both controls stay off or unset for every agent until you change them.
- Choose a delivery profile in the editor · Switch on acknowledgements in the editor
Self-serve outbound campaigns
- Upload a contact list, set calling windows and a retry policy, and launch an agent at your own customers or consented contacts, without an operator.
- The four-step wizard checks column mapping, calling hours and the cost estimate before launch.
- Every campaign call clears the do-not-call register when placed and again when the agent starts talking.
- Cold sales and telemarketing still go through operator review.
- Read Campaigns · Build your do-not-call register
Edit a launched campaign, and export results
- A scheduled or paused campaign can now be edited without cancelling it, in the workspace or through
PATCH /v1/campaigns/{campaign_id}and the MCPupdate_campaigntool. - Editable fields include caller IDs, calling windows, retry policy, concurrency, and end date; the start time is editable only while still scheduled.
- Duplicating a campaign now opens the copy in the wizard instead of a fresh blank draft.
- Export CSV downloads every contact's status, disposition, attempts, and call outcome for a run.
- Edit a campaign · Export campaign results
Campaigns page loading again for every workspace
- Opening Campaigns briefly returned "This page could not be loaded" for every workspace instead of the dashboard.
- The cause was in the workspace shell's page loader, not in campaign data or configuration.
- No campaign, contact list, schedule, or call was affected, and the API, MCP tools, and webhooks kept working throughout.
- The page loads normally again.
- Read Campaigns
Auto multilingual: follow the caller across every supported language
- Auto multilingual in the agent editor now offers All supported languages alongside Selected languages only.
- The API carries the same choice:
follow_caller: {"enabled": true, "scope": "all"}onPATCH /v1/agents/{agent_id}/voice-stackor the MCPset_agent_voice_stacktool. - This resolves every language your selected transcriber and voice actually support, instead of listing them one at a time; leaving
scopeunset keeps an agent's existing selected-languages behavior. - The accepted set still comes from the real call configuration, not every language any provider advertises anywhere.
- A transcriber's simultaneous-candidate limit can still refuse an "all" publish that is too large — choose a smaller set or another transcriber.
- Configure Auto multilingual · Follow the caller across languages
Tool-wait feedback: what a caller hears while a slow tool call runs
voice_polish.tool_waitfills the wait during a slow integration action, knowledge search, or webhook.- Choose
off(default, not stored),sound(a quiet looping keyboard-typing bed, wordless in every language), oracknowledge(a short reviewed phrase in the agent's own voice). - A delay from 0.6 to 3.0 seconds controls how long a tool may run before feedback starts; most tools finish inside it and the caller hears nothing.
- The control lives in the agent editor's Voice & behaviour page, next to Acknowledgements, with Hear the phrase and Hear the typing sound previews.
- The Calls page now shows a Tool waits section on call detail, listing the setting the call ran with and each start, cut, or skip with its reason and offset.
- Turn on tool-wait feedback
5 September 2026
Delivery profiles for agent voices
- An agent's voice can now perform its speech in one of four ways:
natural,lively,calm, orprecise. - Set
voice_polish.deliveryonPATCH /v1/agents/{agent_id}/voice-stack, through the MCPset_agent_voice_stacktool, or per request onPOST /v1/voice-previewsto hear a profile before saving. - Each profile drives one allowlisted control per provider and model, and the preview response reports what was actually applied.
- Leaving
deliveryunset keeps the provider's own defaults, so an agent that never chooses a profile sounds exactly as before. - Fish and Azure voices accept and store a profile but do not change their audio yet.
- Choose a delivery profile · Hear it before you save
Acknowledgements while a slow reply is prepared
- An agent can now say one short phrase in its own voice while a slow answer is still being written, instead of leaving the caller in dead air.
- Enable
voice_polish.acknowledgementsonPATCH /v1/agents/{agent_id}/voice-stackor the MCPset_agent_voice_stacktool, with up to six phrases of your own and a delay of 600 to 3000 ms. - The phrase plays on its own audio track and is cancelled the moment the real reply or the caller starts, at most once per turn and never during a goodbye.
- It is off unless you enable it, is not a transcript line, and a language with no reviewed phrases stays silent rather than falling back to English.
- Turn on acknowledgements · Set the delay and phrases
4 September 2026
Ten numbers and ten simultaneous calls on pay as you go
- PAYG now includes an allowance of 10 billed phone numbers and 10 simultaneous live calls per workspace; number rental and call usage remain separately charged.
- Contact us for higher capacity.
- Numbers, Billing, and number checkout show your billed-number usage and remaining allowance before you order.
- Changing a use-case profile no longer changes your concurrency limit; explicit operator limits, available funds, rate limits, and carrier capacity still apply.
- Check your workspace allowance · Open Phone numbers
3 September 2026
Grant bundles and a scope catalogue for API keys
- A workspace API key's
scopescan now name a grant bundle —all,all-read, orall-write— instead of listing every scope by hand. - A bundle is stored on the key by name and expanded against the live scope catalogue at use time.
- A scope added later is covered automatically, with no need to reissue the key.
- No bundle ever yields an operator-only or specialized-principal scope, and existing keys minted with an explicit scope list are unchanged.
GET /v1/api-keys/scopesreturns each bundle's current expansion, every customer-grantable scope by namespace, and the operator-only scopes no workspace key can hold; the workspace API Keys key-creation dialog reads from the same endpoint.- Mint a key with a grant bundle · Read the grant catalogue
2 September 2026
Actionable technical evidence for failed calls
- Failed calls now carry a bounded, versioned
technical_failureobject in signed lifecycle results,GET /v1/call-results, and the Calls workspace. - It identifies an allowlisted terminal status, reason, and failure stage without exposing raw provider errors, SIP headers, transcripts, phone numbers, credentials, or stack traces.
- OpenPhonex reports
no_answeronly when a durable ringing-timeout event proves it. - Historical or unclassified failures remain explicitly unknown instead of being reinterpreted from call duration or current configuration.
- Read post-call technical evidence · Inspect call evidence
More reliable spoken endings and call evidence
- Affected ElevenLabs v3 dialogue voices now use a streaming synthesis path that preserves the audible decay of final words, instead of the provider websocket path that clipped every turn.
- Other providers and ElevenLabs' regular low-latency websocket remain on their existing transports.
- Terminal farewells now finish their bounded playout and evidence handoff before the worker seals the call, and stored agent clips end at the last audible room audio.
- Room-disconnect teardown is bounded so usage, evidence, lifecycle, and cleanup can finish instead of leaving an otherwise completed call orphaned.
- Choose and preview a voice · Understand call evidence
Multilingual calls continue after a language switch
- An applied language switch now keeps the call's shared simultaneous recognizer attached, so the agent continues hearing the caller after changing its spoken language.
- Applied switches and out-of-set refusals both produce a spoken next turn rather than leaving the caller in silence.
- Structured switch evidence is preserved after the call.
- Configure Follow the caller · Read language-switch evidence
1 September 2026
Audio environments for agents and simulations
- Add an optional version-pinned ambience to an agent's outgoing audio, or give an adaptive-voice simulation a separate caller-side noise condition.
- The five initial environments are quiet office, call centre, cafe, street, and television; Off is the quiet baseline.
- Agent output volume and simulated caller noise level remain independent controls.
- The same catalogue and configuration are available through the public API and MCP, and voice previews preserve your selected language and text while applying the chosen ambience.
- Configure audio environments · Test noisy callers in Simulations Lab
Offline adaptive-voice simulations
- Hosted Simulations Lab can now run the offline adaptive-voice runner for supported agents, generating and transcribing caller audio to test recognition robustness, including the caller-noise environments above.
- Offline adaptive voice now supports both eligible Deepgram-based stacks and an Azure-pinned Speech component.
- Azure tests keep that pinned transcription or synthesis provider, use the selected language's exact locale, and never fall back to another provider.
- This mode still does not prove LiveKit room timing, barge-in behavior, or teardown timing; those require a realtime-room validation path.
- Use Simulations Lab
31 August 2026
Follow the caller across languages
- One agent can use several published languages, with a shared voice and optional language-specific voices and greetings.
- Follow the caller adds controlled switching within that set during supported browser tests and phone calls.
- After call evidence arrives, call details distinguish applied language changes from rejected or failed attempts.
- Follow mode requires a compatible shared transcriber; workflow-bound calls remain fixed-language, and detection and explicit switch requests depend on the configured provider.
- Configure multilingual agents · Read call evidence
Microsoft Azure AI Speech voices
- Azure AI Speech joins the voice providers available in the library.
- Browse its voices and locales, audition text, and select a supported voice for your agent.
- Provider credentials and the selected voice's capabilities still determine availability.
- Explore the Voice Library
Agent configuration and simulation runs through MCP
- MCP clients can configure agents and voice stacks, discover voice choices, and preview voices with the appropriate permissions.
- You can also author simulation suites, preview a run's cost, start supported runs, and read their results; suite execution is now accessible from the agent workspace as well.
- Deterministic and adaptive-chat tests are available.
- Adaptive-voice testing is not enabled in the hosted service at the time of this roundup; check the supported runners returned by the run preview before starting a suite.
- Connect through MCP · Use Simulations Lab
30 August 2026
Pay as you go, with browser-testing credit
- PAYG has no monthly platform subscription.
- Eligible customers receive a one-time USD $5 browser-testing credit, separate from purchased funds.
- Phone calls, SMS, and phone numbers still require purchased funds and incur their applicable charges.
- Understand billing and browser credit
A larger, provider-backed Voice Library
- Browse provider-backed voice inventories with combined language, accent, character, and provider filters; search and pagination let you explore larger catalogs without loading every voice at once.
- A voice is grouped with its supported model choices instead of being repeated for each model.
- Cartesia Sonic 3.6 is among the supported provider choices, and you can audition your own text.
- Provider inventory refreshes retain the previous successful catalog if a refresh fails, a removed voice is not silently replaced on saved agents, and availability depends on the provider and account configuration.
- Browse and audition voices
Published multilingual profiles
- Choose several languages on one agent and select a published starting language for each call.
- Share the agent's instructions, tools, and knowledge while using language-specific greetings and optional voice overrides.
- Calls keep their admitted configuration even if the agent is edited later.
- Set up language profiles
26 August 2026
Simulations Lab: repeatable agent tests
- Create caller scenarios against a pinned agent version and inspect transcripts and rule-based results.
- Use deterministic checks for exact behavior, or adaptive chat for a model-generated caller.
- Simulation-only tool fixtures keep these tests separate from real customer actions.
- Adaptive runs have provider costs and explicit budgets.
- Create a simulation suite
Customer-owned DIDLogic accounts
- Imported, customer-owned DIDLogic accounts can be used with hosted agents while the carrier continues billing the customer directly.
- OpenPhonex bills its applicable agent components without charging that externally billed carrier usage to the workspace wallet again.
- Understand deployment and billing ownership
25 August 2026
Locally initiated calls from self-hosted gateways
- Self-hosted gateways can initiate admitted outbound calls with their deployment-bound credential, without requiring a broad workspace API key.
- Workspace policy, authorization, and billing admission still apply.
- Choose a deployment mode