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.

13 September 2026

GPT-Live 1 voices in the Voice Library

  • Browse all 14 GPT-Live 1 voices in the Voice Library's new Multilingual group, with OpenAI's own presentation, gender, regional influence and Natural/Generated labels.
  • Play starts a short real GPT-Live session so you can hear a voice before choosing it; previews are cached and never billed to your workspace.
  • Use switches an agent straight to that voice from the Voice Library.
  • Language following is automatic and not configurable per voice; see the dated results from testing all 14 voices across seven languages, including where Sinhala still needs care.
  • Voice Library · Which languages the voice agent follows · We ran GPT-Live-1 through 107 calls in seven languages

Session replay is on, masked so it cannot capture what customers typed or said

  • Product analytics now includes session replay, masked so text, typed values, phone numbers, recordings and message bodies are never captured in the clear.
  • Replay records nothing until you accept analytics, and stops immediately if you decline or withdraw consent later.
  • The privacy policy describes exactly what replay captures and what it blocks, effective September 14, 2026.
  • Privacy policy

12 September 2026

Faster number browsing and outbound pricing

  • Phone numbers loads market availability and starting prices faster, while retaining the same prices and availability rules.
  • Outbound pricing lookups are faster too, with the same destination matching and billing rules.
  • Phone numbers and pricing

GPT-Live 1 conversation engine

  • Choose GPT-Live 1 under an agent's Conversation engine to listen and speak at the same time, with a separate backend model for tools.
  • Standard remains the default. GPT-Live browser tests use the Published snapshot, and phone or browser workflow runs still require Standard.
  • GPT-Live call duration and backend tool-model tokens are billed separately; Standard speech-to-text is not charged on this path.
  • Conversation engines · Voice billing

Inbound pricing follows the number's capacity plan

  • Inbound rates now come from the number's verified capacity plan. Existing eligible numbers retain their rate.
  • The Numbers page explains when a capacity combination is unsupported or its carrier evidence needs refreshing.
  • Inbound pricing and capacity

Inbound numbers can activate while outbound setup retries

  • A carrier-ready number can receive calls while outbound caller-ID setup is still pending or retrying.
  • The Numbers page shows outbound setup separately, and outgoing calls remain blocked until that setup succeeds.
  • Number availability and activation

Number purchases check the carrier's zero-channel offer

  • Managed number orders now require a confirmed zero-channel offer belonging to the selected number group, so an offer with bundled channels cannot silently replace it.
  • Markets with bundled channels or missing carrier evidence stay visible with an explanation; an unrecognized availability reason reads Temporarily unavailable.
  • Number availability and activation

Calls disconnect before billing settlement finishes

  • Ending a voice call now disconnects the phone leg before settlement work runs, so a slow billing operation does not leave the caller on a silent line.
  • Call evidence and billing

11 September 2026

A call's technical details now show the carrier leg, not just the recording

  • Calls carried by the OpenPhonex SIP bridge now show the bridge's own counters for the leg between the bridge and the carrier, alongside the existing recording telemetry, so a call that sounded off on the phone can be checked without a packet capture.
  • New rows in the Calls page Technical details: Carrier → SIP bridge, SIP bridge → carrier, Room → SIP bridge, SIP mixer, and a separate Carrier reception (RTCP) row. A counter the bridge did not report is always absent rather than shown as zero, and a leg the capture never saw reads as not captured, never as clean.
  • GET /v1/calls/{call_id}/observability returns the same projection under media_evidence.sip_call_statistics, plus the carrier's own reception report as the separate media_evidence.carrier_reception.
  • Carrier-leg call quality

Downloaded call recordings balance a quiet caller against the agent

  • The full-call recording download now balances caller and agent speech using each track's own speech-bearing sections, so a quiet participant is easier to hear without amplifying silence or a noise-only track.
  • Timing and transcript turn boundaries are unchanged, and the separately stored caller and agent tracks remain the unmodified source evidence.
  • What a recording contains

10 September 2026

The Phone numbers page is a table, and Overview opens with what needs you

  • Phone numbers is now one table with a selected-number panel, a Routes to column for every number, and Voice and SMS capability chips that each explain themselves on hover, with a review mark on Business SMS.
  • Getting a number browses by country first, with number-type and feature filters, shows the carrier's monthly price where it lists one and "Quote at review" where it does not, and charges nothing until you confirm the exact price; a request in flight shows three steps: submitted, in review, assigned.
  • Overview leads with one status line that always matches the checklist below it, a Needs you list of everything blocking you, each with the control that clears it, and a Going live checklist that disappears once you're live.
  • The activity chart compares each window's calls with the period before it, Recent calls now reads exactly like the Calls page, and GET /v1/calls/stats windows report answered and failed counts too.
  • What a call-stats window counts · Bring your own agent

A purchased number's activation status now reflects the current reading

  • A purchased number's activation status text now always reflects the current carrier and platform reading, instead of repeating a blocker's sentence after that blocker has cleared.
  • Where a number request waits

The workspace gets one consistent design, and a call's telemetry moves into the call record

  • Voices, Billing, API keys, Calls, Campaigns, Knowledge bases, and every other workspace page now share one consistent look for sections, badges, statuses, and empty states.
  • A call's timing and cost evidence — latency, cost, and which figures are measured versus estimated — now lives on the Performance tab of that call's record in Calls.
  • The old /calls/performance page is gone; visiting it, with or without a call_id, redirects straight to the call's Performance tab, so existing links and bookmarks keep working.
  • The API keys page's new Connect an AI assistant card lets you create a scoped key and copy a ready-made MCP server entry to paste into your assistant's settings.
  • Where a call's telemetry lives · Connect from the workspace

Inbound calls are priced in every standard metered market, not just two

  • Eligible managed numbers on the carrier's standard metered capacity plan now have an inbound rate in 60 countries. The catalogue previously held rows for the +1 and +372 prefixes only.
  • A call OpenPhonex cannot price is refused at admission and reports carrier_rate_missing, shown in the workspace as "Pricing is unavailable for this number". Numbers the new rates cover no longer meet that blocker.
  • A number the carrier delivers with its own included or dedicated channels stays outside the plan and has no metered rate, so its incoming calls are still refused. GET /v1/numbers/{number_id}/activation reports that.
  • Outbound and SMS prices are untouched: this release replaced the inbound rates only.
  • The inbound rate the quote is based on · Inbound attempts rejected before connection

A wrong party and a cease contact are now two different outcomes

  • The payment-reminder starter template routes a wrong party and a request not to be contacted to two separate outcome steps, wrong_party_stop and cease_contact_stop, where both used to land on one stop_and_suppress step labelled "Wrong party or cease contact — immediate stop". Each label states its own consequence now: both stop the call, a cease contact also adds the number to your do-not-call register and a wrong party leaves it where it was. The dispute and hardship labels lost the word "suppress" for the same reason — neither ever registered anything either.
  • Campaign exports and the contacts page follow the labels: workflow_outcome and workflow_outcome_label carry the new step id and the new wording. Campaign dispositions do not change — a wrong party is still connected_wrong_party and a cease contact still do_not_call — and the workspace still renders runs recorded against the old stop_and_suppress id as it did before.
  • Validation now refuses three drafts it used to accept: one pointing both interrupts at a single outcome step, one letting anything other than the cease-contact interrupt reach the cease-contact outcome, and one carrying a starter-template label that claims the opposite of what the route landing on it does.
  • Any draft whose two interrupts named one existing step was split for you on this release — one from the earlier starter template and one you wired yourself alike, bar a draft with no step for the new outcome to end on, which is left as it was. The shared step keeps its id, every other route into it and any label you wrote yourself; published versions are untouched. The repair is a write, so a client holding a base_revision from before the release gets one 409 on its first PATCH /v1/agents/{agent_id}/workflow or publish after it, with the current draft in the 409 body under current.
  • Wrong party and cease contact · Do-not-call register

Nothing promises a 48-hour carrier review that never started

  • The headline on GET /v1/end-users/{end_user_profile_id}/registration-status no longer reads "Registration usually completes within ~48h, often faster". It counts how many of that profile's number registrations OpenPhonex has actually submitted to the carrier, and is empty when none is — including for every profile before its first number order. The old sentence appeared whenever OpenPhonex's own checks were incomplete, which never established that anything had been sent.
  • That headline is also empty while the profile is rejected or needs more information, because that is what needs your attention instead. The per-number headline on GET /v1/numbers/{number_id}/activation reports the same submission for one number and adds the published activation time for that market when there is one — passed through, never composed, and described as the market's figure rather than as something the carrier said about your request.
  • next_action on that same endpoint no longer tells you to wait for carrier approval on a number nothing was ever sent for. A blocking item still speaks first; with nothing blocking the number it is one of three sentences now — submitted and awaiting the carrier, not submitted yet, or a registration that exists but is not showing as open.
  • activation_estimate on GET /v1/numbers/requirements is not always a duration and must be checked before it is shown as one. It holds the carrier's published activation time where registration is required and that market publishes one, and is now empty where it publishes none — Estonia among them — instead of substituting "~48h, usually faster". The other two values, instant_after_payment_and_policy_checks and manual_review, are routing states, not times.
  • How long a regulated number takes to activate

A reviewer can put a contact back in the queue

  • Resolving a campaign review accepts requeue_contact: true, for when you disagree with the outcome and want the contact called again. The commonest case is a wrong party: that verdict comes from one reading of one caller reply and it closes the contact. Resolving dials nobody — the contact becomes due and the next dispatch decides, applying every rule it normally does.
  • A requeue can be refused, and the refusal comes back on the 200 body rather than only in the audit trail: requeue_requested, contact_requeued and requeue_refused_reason, which is one of do_not_call_register, contact_phone_unknown or campaign_run_not_dispatchable. A refusal is still a successful resolution — the note and the audit event are recorded either way — and a requeue_contact that is not a boolean answers 400.
  • A contact a dispatcher has already re-claimed comes back contact_requeued: false with an empty requeue_refused_reason: nothing was declined by policy, that contact is simply already back in the queue. A reviewer cannot undo an opt-out, and an opt-out that lands while a resolution is being decided now refuses the requeue as well, where it could previously put that contact back in the queue as if the opt-out had not happened.
  • A call classified as a wrong party now records a call.wrong_party_signals event, readable on GET /v1/calls/{call_id}/events and never delivered to a webhook endpoint. It carries route_id, from_step_id, turn_index, utterance_characters and utterance_words — the size of the caller's reply, never its text. turn_index is -1 when the turn count could not be read, never 0, because 0 is a real turn index.
  • Review inbox · Do-not-call register · call.wrong_party_signals

Voice settings are saved by the voice-stack route, and refused elsewhere

  • Sending turn_taking, voice_polish, audio_environment, follow_caller, languages or language_profiles to PATCH /v1/agents/{agent_id} now returns 400 naming the route that does save them. Until this release the same request returned 200 and discarded the setting, so a limit you believed was saved was not and the call ran on the platform default.
  • The MCP update_agent tool is the same route and behaves the same way. If you have code setting one of these through it that appears to succeed, it has never taken effect — move it to PATCH /v1/agents/{agent_id}/voice-stack or the set_agent_voice_stack tool.
  • Unrelated extra fields your client happens to send are still accepted and ignored, as before. Only these six recognised-but-misplaced names are refused.
  • PATCH /v1/agents/{agent_id}/voice-stack also returns 400 if you send a TTS provider and model with no voice_id where that provider has voices to choose from; such a save previously returned 200 and stored a stack with no voice, and the call then failed before the caller heard anything. Editing an older agent whose stored voice predates the rule still resolves the provider's own default.
  • Voice settings belong to the voice-stack route · A voice selection must name an exact voice

A call whose media session disappears now says so

  • ended_reason gains one value, media_session_lost, for a call whose media session went away underneath it — the room was removed, or the connection carrying the audio failed — so nobody hung up, no limit fired and the agent did not finish.
  • It reports what was observed rather than guessing at a cause. If someone had just asked to end that call it is still not reported as hangup_requested; the hangup request is answered separately and says the call was already gone.
  • Calls that ended this way previously carried no reason at all, so a count of reasons over time will show empty values becoming media_session_lost from this release rather than a new kind of ending appearing.
  • Simulations Lab test calls can report it too, where a synthetic room closes before the synthetic caller's own departure is delivered. A Lab result is judged on its assertions, not on this field.
  • Why a call ended · When the media session is lost

A recipient who did not answer is no longer a technical rejection

  • An outbound call the recipient never answered is now recorded as no_answer with the reserved outbound_ringing_timeout reason, where it was previously classified as a technical rejection by the far end.
  • The misclassification fired whenever the ring deadline passed with no SIP response at all, which is the ordinary shape: on one measured batch 37 of 50 attempts landed in the rejection bucket, making a pilot look like a platform outage and hiding the failures that really were ours.
  • No new vocabulary. outbound_ringing_timeout and the no_answer terminal status are both already published, and a call is still only reported no_answer when that durable event proves it, so nothing downstream changes.
  • If you alert on technical-failure rates for outbound campaigns, expect that rate to fall and no_answer to rise by the same amount from this release.
  • Verify every delivery

The agent's closing line is played to the end

  • When the agent ends the call itself, its closing line is now played to the end before the call is torn down.
  • OpenPhonex learns that a line has finished playing slightly before the other party has actually heard it, and hanging up at that moment clipped the last word or two.
  • The call is instead held open until the audio going to the caller has fallen quiet. That wait is short and bounded: it gives up after about a second and ends the call anyway, so a closing line that never finishes cannot hold a call open.
  • Why a call ended

A Simulations Lab room that delivered nothing no longer reports a pass

  • A real-time attempt whose synthetic caller was admitted to the room and then delivered nothing now finalizes as error with the code caller_delivery_failed.
  • Such an attempt previously kept the pass its offline evaluation had earned, so a suite reported green for a room in which no audio ever reached your AI agent.
  • Nothing is newly broken by this: those attempts already delivered nothing, and a suite that starts reporting caller_delivery_failed is naming a fault it already had.
  • Like every errored attempt it is excluded from your AI agent's score and counted in totals.errored_cases, never in totals.failed_cases.
  • Reading verdicts · Reading results from CI

A record outside your workspace is absent, not forbidden

  • Every REST GET that names a record by id in its path answers 404 when that id belongs to another workspace: the same status and the same body an id that never existed gets, so a status code can no longer be used to discover which ids are real in someone else's workspace. Ids that previously answered 500 for a record that does not exist answer 404 as well.
  • On those reads a 403 now says something about your credential — a missing scope, or a request that named an organization other than the key's — and never something about the record.
  • Not every by-id write has moved: the campaign writes and the workflow phone-pin routes answer 404, the rest still answer 403, so write your client to treat either as "you cannot act on this record".
  • The workspace's own campaign exports answer the same way, so the same inference is closed in the browser as well as in the API.
  • A resource outside your workspace is absent, not forbidden

Verification documents now reach the carrier

  • In markets that require documents, OpenPhonex submits the documents from your approved verification profile to the carrier and reports what it actually did rather than describing a review that had not started.
  • That submission shipped earlier but could never run: the worker held the storage configuration and neither storage credential, so it failed reading your documents on every sweep and no verification document reached the carrier in any proof-required market. This is the release in which it began working.
  • Nothing is required from you. An affected request is picked up by the next sweep using the documents you already uploaded.
  • Where a number request waits

9 September 2026

An ordered regulated number is now presented to the carrier

  • OpenPhonex now opens the carrier verification task that names your ordered number and its address; until this shipped a regulated number stayed at registration_draft and nothing about it was ever sent to the carrier.
  • The carrier establishes the number's end user by approving that task. There is no separate step that attaches an identity to a number — the carrier exposes no endpoint for one, and the request OpenPhonex used to send was always refused.
  • GET /v1/numbers/{number_id}/activation no longer reports attach_identity_to_number as a blocking item: an item that could never have been cleared and would otherwise have stayed on your list indefinitely.
  • How the carrier learns who the end user is

Regulated numbers in document-free markets are ordered first

  • GET /v1/numbers/requirements returns carrier_proof_requirement, one of none, required or unknown, alongside registration_required.
  • Where it is none the carrier lists no end-user document for that market, so it can never mark your identity verified before the number exists. OpenPhonex orders the number first instead of waiting for a verdict that cannot arrive.
  • Every other market keeps the previous path: the carrier's verdict is waited for exactly as before, and unknown is treated as required.
  • Markets with no documents are ordered first

A number request in a metered market now quotes a real inbound price

  • In most regulated markets the carrier prices inbound minutes against a shared capacity plan rather than against the number, and before purchase there is no number to price — so these requests previously could not reach a final quote.
  • Every managed OpenPhonex number is provisioned onto one standard metered capacity plan, so quote_summary.source_breakdown.traffic_rates now names inbound voice with a customer_price taken from that plan.
  • That price is what OpenPhonex charges you per inbound minute on that plan. It is not a carrier quotation for your number: what you are billed is derived when a call is admitted, from the activated number's own carrier record.
  • The inbound rate the quote is based on

An incoming call rejected before it connects now says why

  • An incoming call can reach OpenPhonex and be rejected before your AI agent answers. When the called number identifies your workspace, that attempt now appears in Calls with its time, direction and a customer-readable reason.
  • Missing pricing for a managed number reports carrier_rate_missing rather than looking like a caller who hung up; a rejection at admission reports inbound_admission_rejected. Repeated delivery of the same carrier call does not create another attempt.
  • Each number now carries calling_readiness on the Numbers dashboard: bounded inbound routing and pricing blockers, and destination-dependent outbound configuration. It stays indeterminate where the call-time admission checks were not evaluated — a purchased number is not proof that calls can connect.
  • Inbound attempts rejected before connection · Check incoming-call configuration

Overview call amounts and spend totals use the settled charge

  • For component-metered calls, Recent calls on Overview uses the same wallet billing verdict as Calls: once settlement is available the amount is the settled charge, not the larger amount reserved at admission.
  • Released holds show as Released and count as nothing; reservations awaiting usage stay explicitly labelled as reserved; a payment-due result separates the amount paid from the amount outstanding.
  • Overview spend totals combine settled charges with still-pending reservations and SMS charges. Released reservations and unpaid balances are not counted as settled spend.
  • Calls with no component-billing verdict keep the cost calculation they had, so nothing older is restated.
  • Call amounts on Overview

Every automatic ending now records its reason

  • A call ended by the platform records ended_reason on 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_answer and agent_completed.
  • A call that has not ended, or that failed before connecting, still reports no reason; failures keep reporting through technical_failure.failure_reason_code instead.
  • 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_reached and no_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_reason agent_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_completed is 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/calls works.
  • 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 scopes list now carries only gateways:report and calls:authorize; selfhost-bootstrap.sh and 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_reached and no_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_disconnected on the call detail and in the call.completed and call.ended webhooks, 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}/hangup asks a call that is already live to hang up; it answers 202 with hangup_requested_at and 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_reached or no_caller_speech_after_answer. It is empty on calls that completed before this shipped, and a failed call still reports technical_failure.failure_reason_code instead.
  • 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_extraction work is claimed as it is queued instead of waiting for someone to run it.
  • call.extraction.ready and call.extraction.failed webhooks 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}/transcript returns confidence: null for 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_ms and silence_hold_ms are explicit numbers and now apply in every language, overriding any sensitivity preset and the platform hold.
  • A min_speech_ms below 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_sensitivity remains 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 .xlsx workbook; both are read in your browser and post the same rows to POST /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, or mcp) 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 language is the language its calls are made in (the campaign's language is the default); a contact whose language the AI agent does not publish ends pre_dial_failed with skip_reason language_not_published, and a contact with no language on a multilingual agent ends language_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 one extraction.<field> column per field of the AI agent's extraction schema, and whether a recording and a transcript exist; GET /v1/campaigns/{campaign_id}/results is 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_allowed and the launch reason code campaigns_not_in_profile no longer exist.
  • A call sent with bulk: true, your own batch label as campaign_id and a user_authorization.authorized_by is 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}/capabilities and POST .../accept-policy replace the outbound-permit routes, get_capabilities / request_capabilities replace the permit tools, the response key is capabilities, and authorization decisions carry capabilities_snapshot and the reason code channel_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 are not_activated, pending_review, active and suspended.
  • 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_rules with calling_rules_active, and metadata.operational_profile is 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-permit and POST .../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 the get_outbound_permit / request_outbound_permit MCP 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 MCP update_campaign tool.
  • 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"} on PATCH /v1/agents/{agent_id}/voice-stack or the MCP set_agent_voice_stack tool.
  • This resolves every language your selected transcriber and voice actually support, instead of listing them one at a time; leaving scope unset 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_wait fills 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), or acknowledge (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, or precise.
  • Set voice_polish.delivery on PATCH /v1/agents/{agent_id}/voice-stack, through the MCP set_agent_voice_stack tool, or per request on POST /v1/voice-previews to 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 delivery unset 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.acknowledgements on PATCH /v1/agents/{agent_id}/voice-stack or the MCP set_agent_voice_stack tool, 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 scopes can now name a grant bundle — all, all-read, or all-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/scopes returns 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_failure object 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_answer only 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

On this page

13 September 2026GPT-Live 1 voices in the Voice LibrarySession replay is on, masked so it cannot capture what customers typed or said12 September 2026Faster number browsing and outbound pricingGPT-Live 1 conversation engineInbound pricing follows the number's capacity planInbound numbers can activate while outbound setup retriesNumber purchases check the carrier's zero-channel offerCalls disconnect before billing settlement finishes11 September 2026A call's technical details now show the carrier leg, not just the recordingDownloaded call recordings balance a quiet caller against the agent10 September 2026The Phone numbers page is a table, and Overview opens with what needs youA purchased number's activation status now reflects the current readingThe workspace gets one consistent design, and a call's telemetry moves into the call recordInbound calls are priced in every standard metered market, not just twoA wrong party and a cease contact are now two different outcomesNothing promises a 48-hour carrier review that never startedA reviewer can put a contact back in the queueVoice settings are saved by the voice-stack route, and refused elsewhereA call whose media session disappears now says soA recipient who did not answer is no longer a technical rejectionThe agent's closing line is played to the endA Simulations Lab room that delivered nothing no longer reports a passA record outside your workspace is absent, not forbiddenVerification documents now reach the carrier9 September 2026An ordered regulated number is now presented to the carrierRegulated numbers in document-free markets are ordered firstA number request in a metered market now quotes a real inbound priceAn incoming call rejected before it connects now says whyOverview call amounts and spend totals use the settled chargeEvery automatic ending now records its reasonThe maximum length and the silence window are per-agentA call the agent finishes now says soOutbound calls and Simulations Lab runs need nothing installed8 September 2026Calls that end themselvesEnd a live call, and see why a call endedCarrier verification progress reaches your number request on its ownPost-call extraction runs without being asked twiceTranscript confidence is a measurement, or nothingA longer endpointing hold, and per-agent thresholds in every language7 September 2026Simpler workspace capabilities and optional destination restrictionsImport a campaign contact list from an Excel workbookSeveral obligations per contact, a payment reminder that reads contact variables, per-contact languagesCampaign results with business outcomes, and a review inboxCampaigns open to every active workspace6 September 2026CapabilitiesDestination countries required for the outbound permitOutbound permitDelivery and acknowledgements controls in the agent editorSelf-serve outbound campaignsEdit a launched campaign, and export resultsCampaigns page loading again for every workspaceAuto multilingual: follow the caller across every supported languageTool-wait feedback: what a caller hears while a slow tool call runs5 September 2026Delivery profiles for agent voicesAcknowledgements while a slow reply is prepared4 September 2026Ten numbers and ten simultaneous calls on pay as you go3 September 2026Grant bundles and a scope catalogue for API keys2 September 2026Actionable technical evidence for failed callsMore reliable spoken endings and call evidenceMultilingual calls continue after a language switch1 September 2026Audio environments for agents and simulationsOffline adaptive-voice simulations31 August 2026Follow the caller across languagesMicrosoft Azure AI Speech voicesAgent configuration and simulation runs through MCP30 August 2026Pay as you go, with browser-testing creditA larger, provider-backed Voice LibraryPublished multilingual profiles26 August 2026Simulations Lab: repeatable agent testsCustomer-owned DIDLogic accounts25 August 2026Locally initiated calls from self-hosted gateways