> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.jambonz.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.jambonz.org/_mcp/server.

# Changelog

## October 4, 2026

#### 11.1.6

jambonz Commercial 11.1.6

**11.1.6** adds alert notifications, so alerts reach you as they happen, and lets
customers opt out of support audio capture. It adds Speechify and KugelAudio
text-to-speech, Zoom speech-to-text, ElevenLabs `eleven_v3`/`eleven_v4` streaming
and AssemblyAI Universal-3.6 Pro. The API server now rate-limits per account and
per caller. On AWS, scale-in drains SIP, RTP and feature servers by reading the
instance metadata service instead of subscribing to SNS. The release also fixes
a set of [agent](/verbs/verbs/agent), answering machine detection and
[gather](/verbs/verbs/gather) issues.

#### New Features & Improvements

1. **Alert notifications** — every alert on an account's Alerts page can also be
   pushed, as it happens, to up to five destinations: a JSON webhook, Slack,
   PagerDuty or email. Add them in the account's Settings → Notifications, and
   send a test to any one destination. An account is notified about the same
   type of alert at most once an hour. The same destinations can be managed
   through the API (`/Accounts/{AccountSid}/AlertHooks`).
2. **Support audio capture opt-out** — jambonz support keeps SIP and RTP from
   calls for a few days to troubleshoot call quality. An account can now turn
   this off in Settings → Privacy, and an organization can allow it for all
   accounts, disable it for all accounts, or leave it to each account. Recent
   Calls SIP traces are not affected.
3. **Speechify text-to-speech** — `speechify` is available as a TTS vendor, with
   speech credentials in the portal and API.
4. **KugelAudio text-to-speech** — `kugelaudio` is available as a TTS vendor,
   including streaming TTS.
5. **Zoom Scribe speech-to-text** — Zoom is available as an STT vendor.
6. **ElevenLabs `eleven_v3` and `eleven_v4`** — streaming TTS with these models,
   including `eleven_v3_conversational` and its audio tags (such as `[laughs]`),
   uses ElevenLabs' Text to Dialogue stream. The synthesizer language is now sent
   to ElevenLabs instead of being detected on each turn, and the models are
   listed in the portal.
7. **AssemblyAI Universal-3.6 Pro** — new AssemblyAI credentials default to
   `universal-3-6-pro`, and `assemblyAiOptions` accepts `languageCodes` and
   `voiceFocus`. Newer models are now sent 16 kHz audio instead of 8 kHz.
8. **OpenAI GPT-Live** — the GPT-Live speech-to-speech integration uses OpenAI's
   GA protocol.
9. **Per-account API rate limits** — the API server counts requests per account
   for call creation (4000/min) and call status reads (600/min), per caller
   address for everything else, and per address for sign-in and sign-up. Counts
   are shared by all API server workers, and a client over a limit receives
   `429`. Every limit can be changed with an environment variable.
10. **SRTP for TLS-registered devices** — calls to a SIP client that registered
    over TLS are offered SDES-SRTP, so encrypted signaling gets encrypted media.
    Set `JAMBONES_DISABLE_SRTP_FOR_TLS` to keep plain RTP. (jambonz.cloud keeps
    plain RTP for now.)
11. **AWS scale-in without SNS** — SIP servers, RTP servers and feature servers
    drain on scale-in by polling the instance metadata service for their target
    lifecycle state. They no longer subscribe to an SNS topic or open a port for
    it. When a SIP server holding the carrier registrations scales in, it hands
    them to another SIP server before it stops. Registrations now use a Call-ID
    per SIP server, so a carrier sees a move between servers as a new
    registration.
12. **Enterprise user limits** — an organization's user limit can be raised per
    organization, and the portal's Users view follows the limit the API reports.
13. **SIPREC application in the new portal** — the account setting for the
    application that handles SIPREC calls is back in the new portal.
14. **Self-hosted updater** — the update client upgrades itself when a release
    requires it and can apply several releases in one run.
15. **Security hardening** — service-provider users can no longer write
    operator-only organization or account fields; carrier changes by non-admin
    users stay within their own organization or account; and calls from a
    registration trunk's address now match only carriers that belong to the
    called SIP realm's account.
16. **Fewer caller details in logs** — caller transcripts and DTMF digits are
    logged at `debug`, not `info`.

#### Bug Fixes

* **Agent verb** — the caller's turn ends normally when Krisp is used only to
  predict interruptions; speech that arrives while the assistant is talking is
  held for the next turn instead of being dropped; interrupt prediction only
  interrupts the assistant while it is speaking; and VAD is used only for turn
  timing when the STT vendor reports the start of speech itself.
* **Answering machine detection** — empty final transcripts no longer count as a
  human, Deepgram endpointing defaults to 150 ms during detection, and built-in
  voicemail hints are used when none are configured.
* **Gather with Deepgram** — an interim word that Deepgram later drops no longer
  delays every following `UtteranceEnd`, and a deferred `UtteranceEnd` returns
  the transcript as soon as it is satisfied.
* **Soniox** — v5 sub-word tokens are joined correctly ("I have Optum.", not
  "I  have  O pt um.").
* **Google Gemini transcription** — `SMART` mode no longer fails with
  `languageCodes` set.
* **Deepgram warm connections** — options that change between transcriptions
  (for example new Flux keyterms) are applied when a parked connection is
  reused.
* **TTS** — a [say](/verbs/verbs/say) no longer hangs when the TTS vendor rejects
  the request, and streaming TTS starts cleanly after a barge-in.
* **Conference** — `distributeDtmf` and `speakOnlyTo` work without another join
  option set.
* **Media timeout** — `JAMBONES_MEDIA_TIMEOUT_MS` now ends calls on mediajam
  feature servers.
* **Dialogflow** — a [dialogflow](/verbs/verbs/dialogflow) verb with no TTS vendor
  no longer looks up TTS credentials.
* **Debug logging** — every leg of a call follows the account's debug log
  setting.
* **SIP** — a re-INVITE rejected with `422` no longer leaks resources in
  drachtio; licensed SBCs issue a fresh session token with each provisional and
  final response, so calls that ring longer than 40 seconds keep their audio; TLS registrations record
  their transport; and calls forwarded to a `sips:` Request-URI use a `sips:`
  Contact and From.
* **Billing** — after a failed renewal the portal shows the suspended
  subscription and asks for a new card, instead of offering an upgrade that
  created a second subscription.
* **Portal** — the call logs panel tells a failed request apart from a call with
  no logs.
* **License keys** — whitespace pasted with a license key is trimmed.

#### Upgrade Notes (self-hosted)

* **Database** — 11.1.6 adds the `alert_hooks` table and three columns; run the
  database upgrade before starting the new API server.
* **AWS scale-in** — set `AWS_LIFECYCLE_DRAIN=1` on `inbound`, `sbc-sip-sidecar` and
  `feature-server`, and on `sbc-rtpengine-sidecar` on dedicated RTP servers. Allow the instance roles
  `autoscaling:DescribeAutoScalingInstances` and
  `autoscaling:DescribeLifecycleHooks` (in addition to
  `autoscaling:CompleteLifecycleAction`). `AWS_SNS_TOPIC_ARN` no longer turns on
  draining, and the SNS topics and their open ports can be removed.
* **API server behind a reverse proxy** — set `JAMBONES_TRUST_PROXY=1` and have
  the proxy send `X-Forwarded-For`. Without both, all callers share one
  rate-limit counter.
* **Recordings** — the API server's built-in recording websocket is removed;
  recordings are handled by `upload_recordings`.
* **Audio capture opt-out** — the Privacy settings appear in hosted portal
  builds with `JAMBONES_OPT_OUT_VOIPMONITOR=true`. The opt-out only takes effect
  if voipmonitor is configured with `norecord-header = yes`.

#### Component Versions

| Component            | 11.1.5             | 11.1.6             |
| -------------------- | ------------------ | ------------------ |
| jambonz              | 11.1.5             | **11.1.6**         |
| mediajam             | 0.5.8              | **0.5.10**         |
| drachtio             | 10.1.5             | **10.1.6**         |
| rtpengine            | 14.1.1.8-jambonz14 | 14.1.1.8-jambonz14 |
| jambonz OSS (sbc-\*) | 0.9.12             | **0.9.14**         |
| upload-recordings    | 1.9.1              | 1.9.1              |
| monitoring-agent     | 10.2.2             | 10.2.2             |
| pcap-server          | 1.0.4              | 1.0.4              |
| heplify-server       | 1.0.4              | 1.0.4              |

#### Availability

**jambonz.cloud** - available now

**self-hosted** - coming soon

## September 24, 2026

#### 11.1.5

jambonz Commercial 11.1.5

**11.1.5** adds new speech vendors (Modulate Velma STT, Google Gemini
transcription, Speechmatics for the agent verb, Azure Voice Live speech-to-speech),
a per-call codec preference on [dial](/verbs/verbs/dial), and a round of
security hardening in the API server. It also makes AWS autoscale scale-in
reliable on SIP and feature servers, and fixes a set of call-handling bugs in
the feature server.

#### New Features & Improvements

1. **Modulate (Velma) streaming STT** — `modulate` is available as a
   speech-to-text vendor, with speech credentials in the portal and API.
2. **Google Gemini transcription** — Gemini can be selected as a
   speech-to-text vendor, including from the portal.
3. **Speechmatics STT in the agent verb** — Speechmatics can be used as the
   recognizer for the [agent](/verbs/verbs/agent) verb.
4. **Azure Voice Live speech-to-speech** — Azure Voice Live is available as a
   speech-to-speech vendor.
5. **xAI recognizer model option** — `xaiOptions.model` pins the xAI
   transcription model instead of following xAI's default.
6. **Inworld TTS 2 Flash** — `inworld-tts-2-flash` is available alongside
   `inworld-tts-2`, a lower-latency, lower-cost variant with word timestamps.
7. **Per-call codec preference on dial** — the [dial](/verbs/verbs/dial) verb
   accepts `codecs`, a list of codec names in preference order for the outbound
   leg (for example `["G722","PCMU"]`). With no list set, the outbound offer
   leads with the codec negotiated on the A leg. An invalid or unsupported name
   drops the list, raises an `invalid-app-payload` alert, and falls back to
   default negotiation. `codecs` is also documented on the createCall REST API.
8. **Noise isolation on REST-created calls** — noise isolation can be enabled
   when creating a call through the REST API, so it can be combined with
   answering machine detection without a separate
   [config](/verbs/verbs/config) verb.
9. **Dialogflow CES session resume** — a [dialogflow](/verbs/verbs/dialogflow)
   CES session can be resumed.
10. **License details in the portal** — self-hosted installs show the key
    details of the installed license in the portal.
11. **Nested transcribe data in the portal** — transcripts from a background
    [transcribe](/verbs/verbs/transcribe) are displayed in the call view.
12. **Security hardening in the API server** — this release includes fixes for
    issues found in a security review:
    * privilege-escalation fixes in user management;
    * an account can no longer write operator-only fields or limits;
    * password-reset links are single-use;
    * sign-in and password reset no longer reveal whether an account exists, and
      failed attempts are rate-limited;
    * customer-supplied destinations and speech-vendor addresses may no longer
      point inside the platform network;
    * the call-logs route can no longer read arbitrary CloudWatch log groups.

#### Bug Fixes

* **AWS autoscale scale-in** — SIP servers now complete scale-in once every
  inbound and outbound process is idle, and reject new INVITEs while draining.
  Feature servers coordinate the lifecycle action across all pm2 workers
  instead of completing it when the first worker goes idle.
* **Call sessions after a lost app connection** — a WebSocket app connection
  that dies can no longer leak a call session, and connect failures stop
  retrying after their budget.
* **Calls transferred between feature servers** — pre-answer call statuses are
  no longer re-sent, and SIPREC recording continues across the transfer.
* **Dial with no actionHook** — the call ends when dial finishes with no
  actionHook, or with a failed one.
* **Max call duration** — the timer is cleared when jambonz ends the call.
* **Dialogflow CES** — the verb completes when the stream errors, and cleans
  up on `end_session`.
* **Google speech-to-speech** — toolHook replies no longer end the Gemini
  session.
* **Webhooks** — non-2xx webhook responses now write a webhook-status-failure
  alert, and late webhooks are sent after the shared client has closed.
* **Media server connection errors** — handled instead of crashing the feature
  server.
* **DTMF privacy** — DTMF digit values are no longer logged.
* **`tag` data in LLM tool calls** — the [tag](/verbs/verbs/tag) verb's
  `customerData` is included in the `llm:tool-call` hook.
* **IMDSv2** — EC2 instance metadata is read with IMDSv2 tokens in the SNS
  lifecycle notifiers.
* **SIP realm validation** — account `sip_realm` values are trimmed and
  validated, and self-hosted installs no longer call a DNS provider for them.
* **Portal** — Home's live counters refresh, and paid customers are no longer
  asked to re-enter a card to change plan.

#### Component Versions

| Component            | 11.1.4             | 11.1.5                 |
| -------------------- | ------------------ | ---------------------- |
| jambonz              | 11.1.4             | **11.1.5**             |
| mediajam             | 0.5.4              | **0.5.8**              |
| drachtio             | 10.1.4             | **10.1.5**             |
| rtpengine            | 14.1.1.8-jambonz11 | **14.1.1.8-jambonz14** |
| jambonz OSS (sbc-\*) | 0.9.9              | **0.9.12**             |
| upload-recordings    | 1.9.0              | **1.9.1**              |
| monitoring-agent     | 10.2.1             | **10.2.2**             |
| pcap-server          | 1.0.4              | 1.0.4                  |
| heplify-server       | 1.0.4              | 1.0.4                  |

#### Availability

**jambonz.cloud** - available now

**self-hosted**

* AWS - available now
* Azure - available now (amd64 and arm64)

## August 23, 2026

#### 11.1.4

jambonz Commercial 11.1.4

**11.1.4** adds call evaluation as a first-class integration. Recordings and
transcripts can now be sent to **Roark** or **Coval** for automated review of
agent behaviour, configured per account from the portal. The release also
carries a SIP diagnostics improvement and a new **upload-recordings 1.9.0**.

#### New Features & Improvements

1. **Roark and Coval as call-evaluation vendors** — a call's recording and
   transcript can be posted to an evaluation provider for automated scoring.
   Both vendors are selectable in the portal's call-evaluation vendor
   selector, with credentials stored and masked like any other vendor key.
2. **Signup links in the evaluation credential form** — when no evaluation
   API key is set, the portal shows a signup link for the selected vendor
   (Coval or Roark) and hides it once a key is entered. The verbose help text
   under the key field was removed and the Test link placement made
   consistent across the hosted console.
3. **`sip_reason_header` in the status callback** — the SIP Reason header is
   now included in status callback payloads, so the reason a call ended is
   available to applications without inspecting SIP traces.
4. **Presigned GCS URLs for recordings** — upload-recordings 1.9.0 generates
   presigned URLs for recordings stored in Google Cloud Storage, matching the
   behaviour already available for S3.
5. **Portal alerts when a recording upload fails** — a failed POST from
   upload-recordings now raises an alert in the portal instead of failing
   silently.

#### Component Versions

| Component            | 11.1.3             | 11.1.4             |
| -------------------- | ------------------ | ------------------ |
| jambonz              | 11.1.3             | **11.1.4**         |
| upload-recordings    | 1.8.6              | **1.9.0**          |
| mediajam             | 0.5.4              | 0.5.4              |
| drachtio             | 10.1.4             | 10.1.4             |
| rtpengine            | 14.1.1.8-jambonz11 | 14.1.1.8-jambonz11 |
| jambonz OSS (sbc-\*) | 0.9.9              | 0.9.9              |
| monitoring-agent     | 10.2.1             | 10.2.1             |
| pcap-server          | 1.0.4              | 1.0.4              |
| heplify-server       | 1.0.4              | 1.0.4              |

#### Availability

**AWS** — AMIs are published for all nine deployment variants (`mini`, `fs`,
`sip-rtp`, `sip`, `rtp`, `web`, `monitoring`, `web-monitoring`, `recording`)
on both **amd64 and arm64**, in all **30** supported regions. The AMIs and
their EBS snapshots are public, so `generate-cf.sh` can copy them from any
account. A mini deployment was verified end to end on this release.

**Debian packages** — `jambonz-mini` and `jambonz-common` 11.1.4 are published
in the apt repository for both amd64 and arm64, alongside upload-recordings
1.9.0. See the [Debian package instructions](/self-hosting/debian-package).

**GCP** — images are published for all nine deployment variants on both
**amd64 and arm64** in the `drachtio-cpaas` project. GCP images are global, so
there is no per-region availability to list. The terraform examples under
`terraform/gcp/provision-vm-{mini,medium,large}` now pin the 11.1.4 images —
`terraform.tfvars.example` for amd64 and `terraform.tfvars.arm64.example` for
arm64. A mini deployment was verified end to end on this release. The 11.1.2
images are deprecated rather than removed, so existing pinned deployments
continue to resolve.

**Azure** — images are published for all nine deployment variants on both
**amd64 and arm64** in the community gallery
`jambonz-8962e4f5-da0f-41ee-b094-8680ad38d302`, replicated to **30 regions**
for amd64 and **29** for arm64 (southindia has no Ampere v6 capacity). The
`jambonz_version` default and the `terraform.tfvars` examples under
`terraform/azure/provision-vm-{mini,medium,large}` are bumped to 11.1.4. A mini
deployment was verified end to end on this release. The 10.2.2 gallery versions
have been removed; 11.1.2 remains available.

**Exoscale** — not yet published at 11.1.4; it remains on its current release
and will pick this up at its next release.

## August 21, 2026

#### 11.1.3

jambonz Commercial 11.1.3

**11.1.3** is a targeted release for self-hosted deployments that use a **managed
MySQL on a non-standard port**. Application code is unchanged from 11.1.2 — the
only difference is **drachtio 10.1.4**.

If you run on AWS, GCP or Azure, **11.1.2 remains the current release for you**
and there is nothing to do. Those platforms' managed MySQL listens on the
standard port 3306, which 11.1.3 does not change. See Availability below.

#### Bug Fixes

1. **drachtio could not reach a MySQL server on a non-standard port** — license validation opens a connection to the jambonz database to check the licensed domain, and the port was not configurable: drachtio always used 3306. Where the database listens elsewhere, that connection blocked for the full TCP timeout on every attempt (roughly two minutes), the license never validated, and the server refused every call with `480 Temporarily Unavailable - Unlicensed`. Registrations still succeeded, which made the symptom look like a media or networking fault rather than a licensing one. drachtio 10.1.4 adds `JAMBONES_MYSQL_PORT` (default 3306), and the self-hosting images now pass the port through. This affected **Exoscale medium and large only**, where the managed database service allocates a per-service port.

#### Availability

**Exoscale** — qcow2 images are published for all nine deployment variants at
11.1.3. Exoscale templates cannot be shared between accounts, so deploying
starts by registering the images into your own account:

```bash
cd terraform/exoscale
./prepare-images.sh --version 11.1.3
```

then `terraform apply` in `provision-vm-mini`, `provision-vm-medium` or
`provision-vm-large`. Both the mini and medium layouts were verified end to end
on this release. The large layout carries the same fixes but has not yet been
deployment-tested.

**AWS, GCP and Azure** — remain on **11.1.2**, which is correct rather than an
oversight: the fix in 11.1.3 applies only to a database on a non-standard port,
and managed MySQL on those platforms uses 3306. They will pick up 11.1.3 or
later at their next release.

**Debian packages** — `jambonz-mini` and `jambonz-common` 11.1.3 are published in
the apt repository for both amd64 and arm64, alongside drachtio 10.1.4. The
application code in these packages is identical to 11.1.2; the version moved so
that a deployment can pin the drachtio fix. See the
[Debian package instructions](/self-hosting/debian-package).

## August 20, 2026

#### 11.1.2

jambonz Commercial 11.1.2

**11.1.2** brings **mutual TLS** to self-hosted servers, refreshes the media stack
— **drachtio 10.1.3** and **mediajam 0.5.4** — and adds **nineninesix.ai**
text-to-speech end to end.

#### New Features & Improvements

1. **Mutual TLS (mTLS) for self-hosted servers** — drachtio can present a client certificate on outbound TLS connections, so a carrier or SIP peer that requires mutual authentication can be reached from a self-hosted deployment. See [Mutual TLS](/self-hosting/overview/mtls) for how to obtain a client certificate and configure it.
2. **nineninesix.ai TTS** — Added nineninesix.ai (`gepard-1.0`) as a text-to-speech vendor for [say](/verbs/verbs/say), with speech-credential support in the API and the portal. The model emits no word timestamps, so playout tracking is unavailable on it.
3. **Sub-account cap per enterprise organization** — An enterprise organization can be limited to a maximum number of sub-accounts.

#### Bug Fixes

* **3DS authentication on capacity changes** — Changing subscription capacity failed on any card requiring SCA/3DS, because the API returned a bare failure and dropped the `client_secret`, so the browser could never present the challenge. Cards that always require authentication — every Indian-issued card, for one — could not complete a capacity change at all. The API now returns the `client_secret`, and the portal runs the challenge instead of reporting success while the capacity was unchanged.
* **India e-mandate ceiling** — Registers an e-mandate ceiling with headroom, and surfaces invoices that require additional factor authentication.
* **`stt_ms` reported 0 on the agent verb** — `stopTalking` was clobbered after the final transcript, so speech-to-text latency always came back as zero.
* **`tts_ms` missing or wrong on the agent verb** — Vendor TTS time is now reported in `tts_ms`, and a flush race that dropped the measurement entirely is fixed.
* **`noResponseTimeout` with the greeting disabled** — The [agent](/verbs/verbs/agent) verb now arms `noResponseTimeout` at the start of the call when no greeting is configured.
* **TTS connect-failure alerts were dropped** — A streaming connect failure passed an object into the InfluxDB vendor tag, and the tag escaper threw on it, losing the alert.
* **Speechmatics credential test** — Testing a Speechmatics credential crashed, and the preview sent an invalid `StartRecognition` message.
* **Enterprise cold login** — A cold login landed enterprise users on Accounts instead of Home, because beta eligibility was read before the JWT had populated access.
* **Google OAuth `rootDomain`** — Fixed the root domain used for Google OAuth.
* **`app_env` dropdown** — The dropdown now shows the initially selected option.

#### Availability

**AWS** — AMIs are published for all nine deployment variants on both amd64 and
arm64, in all 30 regions the CloudFormation templates support. See the [AWS installation instructions](/self-hosting/aws) to deploy a self-hosted cluster.

**Debian packages** — `jambonz-mini` 11.1.2 is published in the apt repository
for **both amd64 and arm64**, installable on a fresh Debian 12 (bookworm) host
with `apt-get install jambonz-mini`. See the
[Debian package instructions](/self-hosting/debian-package).

**GCP** — images are published for all nine deployment variants on both amd64
and arm64, and the terraform examples reference them. See the
[GCP installation instructions](/self-hosting/gcp) to deploy or upgrade.

**Azure** — images are published to the community gallery for all nine
deployment variants on both amd64 and arm64: amd64 in 30 regions, arm64 in the
29 regions that offer Ampere VM sizes. The terraform examples reference them,
and `architecture = "arm64"` selects the arm64 image definitions. See the
[Azure installation instructions](/self-hosting/azure) to deploy or upgrade.

## August 14, 2026

#### 11.1.1

jambonz Commercial 11.1.1

**11.1.1** rolls up everything since 11.0.0, including the 11.1.0 changes.
The speech lineup grows again — **Deepgram Flux**, **Gradium**, and **Inworld**
streaming TTS on the text-to-speech side, and **Alibaba Qwen Omni-Realtime** and
**OpenAI GPT live** for speech-to-speech, plus OpenAI live transcription.
**Dialogflow** gains client-side tool calling on both CX and CES, with CES also
getting streaming playout and turn-by-turn observability in Recent Calls.
Conference `listen` can now fork each participant separately, `dial` supports
SRTP to SIP URI targets, and **SMPP** and the last **FreeSWITCH** dependencies
have been removed.

#### New Features & Improvements

1. **Deepgram Flux TTS** — Added Deepgram's Flux model as a text-to-speech vendor across the feature-server, API server, and webapp.
2. **Gradium TTS** — Added [Gradium](/verbs/verbs/say) as a text-to-speech vendor.
3. **Inworld streaming TTS** — Inworld TTS streams with word-level alignment, and the API adds the `inworld-tts-2` generation. The older `tts-1` generation is deprecated.
4. **Qwen Omni-Realtime (speech-to-speech)** — Added Alibaba's Qwen Omni-Realtime (Qwen-Audio-3.0) as a speech-to-speech vendor for the [agent](/verbs/verbs/agent) verb.
5. **OpenAI GPT live** — Added OpenAI's GPT live models for speech-to-speech, and OpenAI live transcription is selectable for [transcribe](/verbs/verbs/transcribe).
6. **xAI and Resemble in the portal** — The webapp exposes xAI and Resemble text-to-speech options in Extra Options.
7. **Speechmatics filtering** — Speechmatics accepts filtering configuration.
8. **Dialogflow CX tool calls** — Dialogflow CX supports a client-side tool-call round trip through `toolHook`.
9. **Dialogflow CES tool calls, streaming playout, and observability** — Dialogflow CES supports the same client-side tool-call round trip, streams playout as it arrives, and reports turn-by-turn detail. Recent Calls in the portal has a turn-by-turn transcript view for Dialogflow sessions.
10. **Per-member conference recording** — [listen](/verbs/verbs/listen) accepts `scope=members` at the conference level, producing one fork per participant instead of a single mixed stream.
11. **Remote party on conference participants** — Conference participants report the remote party's number.
12. **SRTP on outbound SIP URI calls** — [dial](/verbs/verbs/dial) accepts `srtpEncryption` for SIP URI targets, and the SBC honors the `X-Jambonz-SRTP` header on forwarded SIP URI calls. `rtcp-mux` is now the default for SRTP on both inbound and outbound.
13. **transfer onholdHook** — The [transfer](/verbs/verbs/transfer) verb and handoff accept an `onholdHook`.
14. **Multi-arch Docker images** — The feature-server, API server, webapp, inbound, and outbound images are built for both amd64 and arm64.

#### Removals

1. **SMPP removed** — SMPP support has been removed from the feature-server, API server, and webapp.
2. **FreeSWITCH dependencies removed** — Integration tests run against mediajam, and the cron jobs no longer reference FreeSWITCH.

#### Bug Fixes

* **transfer/handoff caller ID** — A transfer or handoff no longer loses the caller ID.
* **Speech-to-speech teardown** — Speech-to-speech sessions are torn down cleanly.
* **DTMF** — `lcc_DTMF` prefers RFC 2833 through the media server.
* **say on the streaming path** — The [say](/verbs/verbs/say) verb executes correctly when streaming.
* **Ultravox errors** — A failed call registration reports the real underlying error rather than a generic failure.
* **Outbound SDP** — The SBC no longer emits an SDP `m=` line with no audio codec.
* **3PCC detection** — Inbound no longer misidentifies certain calls as third-party call control.
* **CLI environment** — The API server loads the ecosystem environment in the `bin/` and `upgrade-db` CLIs.
* **SSO login** — SSO login no longer returns a 500 for enterprise users, and service-provider-scoped users are no longer redirected to registration after signing in.
* **Enterprise upgrade billing** — Upgrading an enterprise account keeps the customer's existing Stripe subscription.
* **Portal** — Users land on Home after opting into the new console; the carrier KYC prompt is hidden when prepaid isn't offered; the placeholder "Est. next invoice" card is parked; and the enterprise welcome dialog no longer pushes account creation.

#### Component versions

| Component         | 11.0.0             | 11.1.1                                          |
| ----------------- | ------------------ | ----------------------------------------------- |
| mediajam          | v0.4.15            | **v0.5.3**                                      |
| drachtio          | 10.0.22            | **10.1.2**                                      |
| upload-recordings | 1.8.5              | **1.8.6**                                       |
| rtpengine         | 14.1.1.8-jambonz10 | 14.1.1.8-jambonz10 (AMI) / **-jambonz11** (deb) |
| pcap-server       | 1.0.3              | 1.0.3 (AMI) / **1.0.4** (deb)                   |
| heplify-server    | 1.0.3              | 1.0.3 (AMI) / **1.0.4** (deb)                   |

The three components that differ between the AMI and Debian package installs
differ only in packaging: `jambonz11` adds a multi-arch Docker build and an RPM
build-dependency fix, and the pcap-server and heplify-server point releases each
add a multi-arch Docker image. No functional difference, and the two converge at
the next release.

#### Availability

**jambonz.cloud** — 11.1.1 is available on our hosted platform, with nothing to
install or upgrade.

**AWS** — AMIs are published for all nine deployment variants on both amd64 and
arm64, in all 30 regions the CloudFormation templates support. The AMIs and
their EBS snapshots are public, so `generate-cf.sh` copies them into your own
account. See the [AWS installation instructions](/self-hosting/aws) to deploy or
upgrade a self-hosted cluster.

**Debian packages** — `jambonz-mini` 11.1.1 is published in the apt repository
for **both amd64 and arm64**, installable on a fresh Debian 12 (bookworm) host
with `apt-get install jambonz-mini`. See the
[Debian package instructions](/self-hosting/debian-package).

As of this release the package pins every jambonz component to an exact version,
so an install resolves to a known-good set rather than to whatever is newest in
the repository.

## July 8, 2026

#### 11.0.0

jambonz Commercial 11.0.0 — Major Release

**11.0.0** is headlined by a foundational change to the media path: jambonz no longer runs on **FreeSWITCH**.
In its place is **mediajam**, a purpose-built media server written in Go that the feature-server drives directly.
mediajam is designed to scale to far more concurrent sessions per server than FreeSWITCH, to scale linearly on
large multi-core machines, and to run with a much smaller footprint — it's available on both amd and arm64
and as a minimal Docker image, with no SIP stack and no per-channel sockets.
It handles audio (PCMU/PCMA/Opus/G.722 + telephone-event) over RTP with symmetric latching, RFC 2833 DTMF,
file/HTTP/tone/silence playback, bridging, conferencing, and hosts the Krisp noise-isolation and turn-taking engines
(separate license required from [Krisp](https://krisp.ai/developers) when self hosting). This is the biggest architectural change in the
platform's history and is the reason 11.0.0 is a major-version bump.  For further details on the media server, including
benchmarks please check out our blog [here](https://jambonz.org/blog/jambonz-v11-release).

On top of the new media server, 11.0.0 adds a **transfer verb** that packages the common transfer
choreographies (blind, and warm parked / three-way) into a single declarative verb with
built-in briefing, confirmation, and failure handling — and exposes the same capability
to the **agent** and **llm** verbs through a declarative `handoff` block that transfers the caller to a
human when the model asks for it. Both AI verbs also gain a **built-in hangup tool** that lets
the model end the call on its own. Conferences become observable and controllable from the API,
the speech-vendor lineup is refreshed (with several legacy vendors removed), and the SBCs
get accuracy fixes around live call counts plus a round of cross-account authorization hardening in the API server.

#### Media server

1. **mediajam replaces FreeSWITCH** — The feature-server media path now runs on the new Go-based mediajam media server instead of FreeSWITCH. Higher session density, linear multi-core scaling, and a small footprint that builds on any Linux distro and as a minimal Docker image. Audio-only (PCMU/PCMA + telephone-event), RTP via Pion, RFC 2833 DTMF, resampling via libspeexdsp, with Krisp and RNNoise available for noise isolation and turn-taking.

#### New Features & Improvements

1. **Transfer verb** — New [transfer](/verbs/verbs/transfer) verb that hands a call off to another destination as a **blind** transfer (SIP REFER or bridged dial) or a **warm** transfer (caller parked on hold, or joined into a three-way conference), with spoken briefs, confirmation gates, hold music, and a configurable disposition (return to the app, go to voicemail, or hang up) when the transfer does not complete.
2. **Transfer-to-human handoff for AI verbs** — The [agent](/verbs/verbs/agent) and [llm](/verbs/verbs/llm) verbs accept a declarative `handoff` block. When present, the runtime injects a `transfer_to_human` tool into the model's toolset and runs the packaged transfer choreography when the model calls it — no `toolHook` required.
3. **Built-in hangup tool for AI verbs** — The [agent](/verbs/verbs/agent) and [llm](/verbs/verbs/llm) verbs accept a `hangup` block that injects a `hangup` tool the model can call to end the call on its own, with an optional `reason` placed in the `X-Reason` header on the outbound BYE.
4. **Conference observability & control (API)** — `GET /Accounts/{sid}/Conferences?expand=participants` returns live conference rooms with their participants and durations; new `POST`/`DELETE /Accounts/{sid}/Conferences/{name}/listen` endpoints start and stop a conference-scoped listen fork, addressed by conference name with no participant leg.
5. **Bidirectional conference listen stream** — The conference listen fork is **bidirectional**: the room's mixed audio streams to your WebSocket endpoint, and audio the WebSocket server streams back is mixed into the room and heard by every participant (unless disabled with `disableBidirectionalAudio`).
6. **Play or speak to a whole room** — The media server can play an audio file (or tone) and speak TTS to an entire conference/room, mixed into the room mix so all participants hear it, with the ability to stop an in-flight playout.
7. **Live Call Control — transfer** — `updateCall` now accepts `transfer` as a live call control operation.
8. **New speech vendors and models** — Added support for **xAI** (STT), **Murf** (STT and TTS), **Rime `coda`**, **Cartesia Sonic 3.5** (with word timestamps), **Soniox v5** real-time model (`stt-rt-v5`), and **NVIDIA Riva cloud (NVCF)** credentials with refreshed Magpie voices. The webapp exposes the new vendors in the speech-services UI.
9. **Speech vendors removed** — Verbio, Cobalt, Nuance, Voxist, and PlayHT have been deprecated and removed across the feature-server, API server, and webapp.
10. **gather interim events** — Interim `gather` events now include a `verb_id`.
11. **API security hardening** — Added cross-account authorization checks (CWE-639) across API server resources (tenants, LCR carrier-set entries, SIP/SMPP gateways, custom voices, and more) to prevent access to records outside the caller's scope.
12. **SBC gateway safety** — Carrier configuration now rejects `0.0.0.0` and `/0` gateways, and `sbc_addresses` enforces a unique `host:port` index.

#### Bug Fixes

* **Call counts on transfer/abandon** — A call transferred off a feature-server now correctly decrements the SBC call count (inbound and outbound), and abandoned outbound calls decrement the count as well. Long-running calls are no longer reaped by the cleanup cron (the `debug:incalls` keys for active calls are refreshed).
* **Krisp/noise alerts** — Alerts raised when Krisp noise isolation or turn detection fails now report the real vendor and underlying error instead of a hardcoded message.
* **Conference timeLimit** — `timeLimit` is now preserved on a transferred feature-server when joining a conference.
* **Speech-to-speech teardown** — The call now ends cleanly when an s2s session ends with no follow-on verbs; ElevenLabs s2s coerces non-string `client_tool_result.result` values to strings; and s2s disconnect logging no longer mislabels `_onDisconnect` as `_onConnectFailure`.
* **listen verb** — Fixed the listen verb being torn down (with the wrong handler) when a background listen task failed.
* **dial verb** — An unanswered `actionHook` is no longer logged as a dial error.
* **Scale-in** — Resource teardown in `_clearResources` is now bounded so scale-in can't hang.
* **Security/logging** — The carrier `register_password` is no longer written to the log.

## June 1, 2026

#### 10.2.0

jambonz Commercial 10.2.0 — Major Release

**10.2.0** is a major release headlined by the maturation of the [agent](/verbs/verbs/agent) verb. Introduced as an experimental capability in 10.1.0, the agent verb is now a fully deployable foundation for building **cascaded voice pipelines** — STT, LLM, and TTS composed à la carte, with the platform handling turn-taking, barge-in, and tool calls. A substantial body of supporting work landed in this release to get it there: a **tool-filler** capability that covers slow LLM tool calls with either LLM-generated backchannel phrases (pre-warmed at agent startup using the agent's own LLM) or a background audio loop, **Deepgram Flux multilingual** with automatic STT/TTS language locking, mid-call `agent:update`, and richer turn-end telemetry that surfaces vendor metadata (provider, region, request id, processing times, cache token counts, rate-limit headers) end-to-end into `turn_end` events, `session.json`, and the transcript and bundle viewers.

Powering those pipelines, the LLM platform has been substantially broadened. A new manifest-driven LLM credential architecture (built on `@jambonz/llm`) means adding an LLM vendor no longer requires api-server or webapp code changes — and on top of that contract this release adds six new LLM providers: **DeepSeek**, **Google Vertex** (with `vertex-gemini` and `vertex-openai` as distinct endpoints), **Azure OpenAI**, **Groq**, **HuggingFace Inference Providers**, and **Baseten**. On the realtime speech side, 10.2.0 adds **OpenAI Realtime GA** support (with Whisper VAD), a new **AssemblyAI speech-to-speech** engine, **Vertex AI** as a Google S2S backend, and `generation_config` for Cartesia Sonic-3 voices.

10.2.0 also makes jambonz substantially easier to run yourself. A new bare-metal / VPS installer brings up a complete single-host **jambonz-mini** stack from [Debian packages](/self-hosting/bare-metal-vps/debian-package) with a single command — no Docker, Kubernetes, or cloud templates required — and ongoing upgrades are a simple `apt upgrade`. For mini deployments installed via AWS CloudFormation or Terraform on other clouds, a new **System Updates** admin panel in the jambonz portal detects available upgrades, lets you schedule, reschedule, or cancel them, and runs the upgrade with live progress streamed into the UI — so keeping a cloud-deployed mini current no longer requires SSH and shell scripts.

Finally, 10.2.0 lands a notable batch of platform reliability and scale work. The drachtio-server includes several critical stability fixes that meaningfully harden long-running deployments. Across feature-server and both SBCs, optional multi-process worker forking provides pm2-style scaling under systemd without the pm2 dependency. And a long-standing curl + boost::asio race condition shared by every FreeSWITCH streaming-TTS module has been fixed.

#### New Features & Improvements

1. **Agent verb — production ready** — The [agent](/verbs/verbs/agent) verb graduates from experimental in 10.1.0 to a fully deployable building block for cascaded voice AI pipelines. Compose any supported STT, LLM, and TTS together and let the platform handle turn-taking, barge-in, and tool execution on your behalf.
2. **Agent tool-filler** — Cover the silence during slow LLM tool calls with either LLM-generated backchannel phrases or a background audio loop. In `backchannel` mode the agent's own LLM is used to generate a fresh set of natural filler phrases in the configured TTS language (with an optional `style` hint), pre-warmed at agent startup so they're ready the moment a tool call fires. In `audio` mode the agent loops a URL of your choice. Both modes are tuned with `startDelaySecs` and `escalationSecs`.
3. **Deepgram Flux multilingual with auto-locking** — Detect the caller's language on the first utterance, then automatically lock STT to that language and switch the TTS voice to match. New `autoLockLanguage` (`true` / `false` / `'always'`) and `languageConfig` (per-language voice mapping) properties on the agent verb, plus a WebSocket `stt:reconfigure` command for mid-call control.
4. **Manifest-driven LLM credentials** — The API server and webapp now render LLM credential forms and handle encryption from a shared `@jambonz/llm` manifest, so adding a new LLM vendor no longer requires changes in api-server or webapp. Fully backward compatible with all existing encrypted credentials.
5. **DeepSeek LLM support** — Add DeepSeek as an LLM provider for the agent verb and any HTTP `llm.toolHook` flow.
6. **Google Vertex AI LLM support** — Add Google Vertex AI as an LLM provider, with `vertex-gemini` and `vertex-openai` exposed as distinct credential types rather than being inferred from the model name.
7. **Azure OpenAI LLM support** — Add Azure OpenAI as an LLM provider with full credential management in the API server and webapp.
8. **Groq LLM support** — Add Groq as an LLM provider, exposing Groq's low-latency inference of open-weight models (Llama, Mixtral, and others) to the agent verb and `llm.toolHook` flows.
9. **HuggingFace Inference Providers** — Add HuggingFace Inference Providers as an LLM provider, opening up the broad catalog of models served through the HuggingFace inference network.
10. **Baseten LLM support** — Add Baseten as an LLM provider, letting you wire Baseten-hosted open-weight model deployments directly into the agent verb.
11. **Vendor metadata end-to-end** — Surface provider-specific telemetry — region, request id, processing time, cache hit/miss token counts, rate-limit headers, HuggingFace inference provider, Bedrock latency, Groq processing-ms — through `turn_end` event hooks, `session.json`, the webapp transcript view, and the offline bundle viewer. A generic renderer means new vendors light up the diagnostics view without UI changes.
12. **LLM connect-time diagnostics** — Optional client-side timing breakdown (request → headers, headers → first token, plus TCP/TLS connect timing via undici diagnostics\_channel). Enable with `JAMBONES_DEBUG_LLM_TIMING=1` on the feature-server.
13. **HTTP `llm.toolHook` for OpenAI** — The HTTP `llm.toolHook` integration now supports OpenAI in addition to the existing providers.
14. **OpenAI Realtime GA** — Full support for OpenAI's general-availability Realtime API. The platform detects the session format on the wire and converts legacy formats transparently while stripping GA-invalid fields from older `response_create` payloads.
15. **OpenAI Realtime Whisper VAD** — Use OpenAI's Whisper-based voice activity detection in the OpenAI Realtime STT pipeline.
16. **AssemblyAI speech-to-speech** — New `mod_assemblyai_s2s` FreeSWITCH module provides real-time speech-to-speech via AssemblyAI's streaming API.
17. **Vertex AI for Google S2S** — Use `vertex-gemini` and `vertex-openai` as Google speech-to-speech backends, expanding model availability beyond the standard Google Cloud Speech endpoints.
18. **Cartesia `generation_config`** — Support `generation_config` for Cartesia Sonic-3 and higher voices, enabling more advanced TTS control.
19. **Google STT `parentPath`** — New `recognizer.googleOptions.parentPath` lets you point Google STT at a custom GCP resource hierarchy.
20. **jambonz-mini Debian install** — A new one-command bare-metal / VPS installer brings up a complete single-host jambonz stack from the public Debian package repository. No Docker, Kubernetes, or cloud templates required — ideal for small deployments, lab environments, and edge installs. See the [Debian package install guide](/self-hosting/bare-metal-vps/debian-package) for details.
21. **System Updates admin panel** — Jambonz-mini deployments installed via AWS CloudFormation or Terraform (on other clouds) can now detect available upgrades, install immediately, schedule (or reschedule, or cancel) future upgrades, and watch live progress streamed back into the portal via Server-Sent Events. A site-wide banner flags any pending upgrade. Visibility is gated by `VITE_ENABLE_SYSTEM_UPDATES` and a valid license. (Bare-metal Debian installs upgrade via `apt upgrade` instead.)
22. **Multi-process clustering** — Optional `cluster.js` worker forking is now available in feature-server, sbc-inbound, sbc-outbound, and api-server. Enable via `JAMBONES_FORK_INSTANCE=<n>` (or `JAMBONES_FORK_INSTANCE=max` for one worker per core) to get pm2-style scaling under systemd without the pm2 dependency.
23. **Krisp failure alerts** — Generate alerts on Krisp noise-isolation or turn-taking failure so operators can spot degraded sessions in time-series dashboards.
24. **Slow End-of-Turn metric alerts** — The webapp now badge-flags slow-turn detection in the EOT metric alerts view, making it easier to triage latency outliers.
25. **Inline action events in transcript** — Agent transcript action events (TTS language switches, configuration changes, etc.) are now interleaved inline with conversation turns sorted by timestamp, rather than grouped at the bottom.
26. **`dial` re-anchor `X-Reason` header** — Pass an `X-Reason` header when re-anchoring media endpoints to FreeSWITCH, allowing the re-anchor to skip license validation.
27. **FreeSWITCH module updates** — A new `uuid_deepgramflux_configure` API command for runtime Deepgram Flux configuration, AVMD `fast_math` optimization for audio pattern detection, improved 11Labs alignment-tracking logging, and `mod_deepgram_transcribe` added to the default `modules.conf.xml` autoload list.

#### Bug Fixes

* Fixed AMD tone detection stopping prematurely on `machine-stopped-speaking`; tone detection now continues as expected.
* Fixed a TTS streaming race condition with fast LLMs that trigger tool calls — the streaming connection is now pre-warmed and channel variables are set before `startTtsStream` is invoked.
* Fixed agent preflight-hit transitions (direct jump to Thinking) not calling `autoLockLanguage` when they should.
* Fixed Deepgram Flux STT metadata capture by reading the `languages` array directly from `EndOfTurn` events.
* Fixed LLM tool history being dropped across internal `toolCallResponse` reprompts, which could cause the LLM to hallucinate a refusal mid-conversation. Tools from the last `prompt()` are now cached and reused.
* Fixed Rimelab voice-model handling so each model uses its own voice rather than being forced to a single hardcoded default.
* Fixed a quick-CANCEL race condition in sbc-inbound where rapid CANCEL requests on inbound calls could cause missed state transitions and stale call-count entries.
* Fixed a UTC date-handling bug in the webapp's `/Updates/sessions/{path}` route that produced inconsistent session and bundle paths across timezones.
* **drachtio-server (critical):** Fixed a delayed crash that could occur when in-dialog requests (INFO, NOTIFY, OPTIONS, MESSAGE, PUBLISH, SUBSCRIBE) arrived during an active INVITE transaction.
* **drachtio-server (critical):** Fixed a memory leak on WebSocket BYE when the transport closed before the application responded.
* **drachtio-server (critical):** Fixed a crash on shutdown caused by improper cleanup ordering during SIGTERM.
* **drachtio-server:** Corrected session-expires refresher timing, and fixed an edge case where a late ACK after dialog teardown could destabilize the transaction layer.
* **FreeSWITCH:** Fixed a long-standing curl + boost::asio race condition across all 11 streaming-TTS modules by replacing double-map lookups with an iterator pattern in HTTP completion callbacks.
* **FreeSWITCH:** Fixed a missing semicolon in `mod_rimelabs_tts_streaming` and removed obsolete libwebsockets logging symbols to support current `libwebsockets` versions.

#### SQL Changes

No database schema changes are required for this release. The LLM vendor expansion is handled entirely via the new `@jambonz/llm` manifest layer and the `@jambonz/schema` package — existing `llm_credentials` storage is reused.

#### Availability

* Available now on jambonz.cloud.
* Available now for AWS self-hosting via CloudFormation scripts.
* Available now as a Debian package for jambonz-mini bare-metal / VPS deployments.
* Coming shortly to all other self-hosting platforms.

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## April 21, 2026

#### 10.1.1

jambonz Commercial 10.1.1

#### New Features & Improvements

1. **Session observability** — Major new feature providing detailed per-session data for debugging and analysis. At call end, the feature-server assembles a `session.json` containing turn-by-turn detail (transcripts, latencies, agent responses) and sends it to the recorder alongside the audio. The API server exposes a new session retrieval endpoint and bundle viewer (HTML page with embedded waveform player) so you can replay audio and inspect turn data together. A new `observability_level` column on the application controls how much detail is captured. The webapp adds an observability level selector and a transcript tab in the Recent Calls view for browsing session data.
2. **Krisp turn detection with native-turn-taking STT vendors** — You can now use Krisp for acoustic turn detection even when your STT vendor (AssemblyAI, Deepgram Flux, Speechmatics) provides its own native turn-taking. Previously these vendors always used their built-in detection; now you can opt into Krisp for more consistent behavior across vendors.
3. **Agent verb inherits STT/TTS from application** — The [agent](/verbs/verbs/agent) verb now falls back to the STT and TTS settings configured on the application when `stt` or `tts` are not specified in the verb. Previously these were effectively required on the verb itself.
4. **drachtio-srf 5.0.21** — Updated the SIP stack to pick up upstream fixes.

#### Bug Fixes

* Fixed webapp clearing the "alerts last viewed" timestamp on logout, which caused the alert notification badge to re-trigger for already-seen alerts after logging back in.
* Fixed an issue in the Recent Calls view where session date was being parsed from `attempted_at` instead of the recording URL, producing incorrect timestamps in some cases.

#### SQL Changes

```sql
ALTER TABLE accounts ADD COLUMN observability_level
  ENUM('disabled','recording','full') NOT NULL DEFAULT 'disabled' AFTER record_all_calls;

ALTER TABLE applications ADD COLUMN observability_level
  ENUM('disabled','recording','full') DEFAULT NULL AFTER record_all_calls;

UPDATE accounts SET observability_level = 'recording' WHERE record_all_calls = true;

UPDATE applications SET observability_level = 'recording' WHERE record_all_calls = true;
```

#### Availability

* Available now on jambonz.cloud; coming soon with devops scripts for subscription customers

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## April 11, 2026

#### 10.1.0

jambonz Commercial 10.1.0

#### New Features & Improvements

1. **Agent verb** — Major new feature enabling low-latency voice AI agents with support for Amazon Bedrock and Google Gemini as LLM backends, Deepgram and Krisp for STT/turn-taking, and ElevenLabs TTS with spoken-word tracking. Includes mid-conversation async updates via `agent:update`, noise cancellation powered by Krisp, and comprehensive metrics and measurement. See the [agent verb reference](/verbs/verbs/agent) and [voice agents guide](/guides/features/voice-agents) for details.
2. **Node.js SDK** — New unified SDK for building jambonz voice applications in TypeScript/JavaScript, supporting webhook and WebSocket transports, REST API client, TTS streaming, and chainable verb methods. Replaces the older `@jambonz/node-client` and `@jambonz/node-client-ws` packages. See the [Node.js SDK documentation](/sdks/node-sdk).
3. **Python SDK** (experimental) — New Python SDK with the same capabilities as the Node.js SDK: webhook and WebSocket transports, REST client, TTS streaming, inject commands, and spec-driven verb generation with full type hints. See the [Python SDK documentation](/sdks/python-sdk).
4. **Speech vendor updates** — Expanded speech vendor support across the platform:
   * **Speechmatics Preview STT** — New speech-to-text vendor with turn-taking event forwarding and analytics.
   * **Houndify WebSocket STT** — Speech recognition over WebSocket with `audioQueryAbsoluteTimeout` for controlling recognition timeouts.
   * **AssemblyAI Universal-3 Pro** — Support for the universal-3 pro streaming model, defaulting to `u3-rt-pro` when a prompt is provided.
   * **Deepgram Flux language hint** — Pass `language_hint` to Deepgram Flux STT for improved recognition accuracy.
   * **Google S2S transcription events** — Google Speech-to-Speech now emits `llm_event` with transcription data to the application layer.
   * **ElevenLabs TTS tracking** — Track spoken words and TTS timing for ElevenLabs, enabling detailed usage analytics and billing insights.
   * **TTS time-to-first-byte metrics** — Latency metrics across all streaming TTS vendors to measure time to first audio byte.
   * **Inworld AI models** — Support for Inworld AI models.
5. **Krisp noise isolation** — Add support for Krisp-powered noise isolation and cancellation with usage tracking and event generation.
6. **Google Gemini LLM** — Add support for Google Gemini as an LLM provider with credential management in the API server and webapp.
7. **MCP client hardening** — Improved MCP client reliability with configurable timeouts, authentication support, URL hints, automatic reconnection, and graceful connection close.
8. **Listen verb in conference** — Support for nesting a `listen` verb inside a `conference`, enabling real-time audio streaming from conference sessions.
9. **LLM services** — New LLM services management in the API server and webapp.
10. **License expiry alert** — The webapp now displays an alert when the system license key is expired or approaching expiration.
11. **Schema migration** — Migrated to the consolidated `@jambonz/schema` package, deprecating the standalone verb-specs module.
12. **Updated API swagger** — API server swagger documentation updated to reflect new endpoints and properties.

#### Bug Fixes

* Fixed a race condition for outbound calls in the feature-server that could cause call setup failures.
* Fixed `gladiaOptions` being hardcoded instead of using user-provided configuration.
* Fixed Google Speech-to-Speech not sending transcription events to the application layer.
* Fixed DTMF digits being sent as multiple underscore characters instead of correct tones.
* Fixed TTS engine flush signaling and guarded against Cartesia empty events without proper completion state.
* Fixed ElevenLabs models endpoint failure causing the entire language/model dropdown to break; now gracefully falls back to static data.
* Fixed Deepgram STT language dropdown appearing empty due to model name parsing issue.
* Fixed missing language names for Cartesia Sonic 3 languages in the language map.
* Fixed ElevenLabs STT not properly loading available languages and models.
* Fixed potential crash in webapp TTS voice sorting when voice name is undefined.
* Fixed exception when user provides an invalid value for a play file URL.
* Added exception handling in the `mod_dub` FreeSWITCH module to prevent crashes from unhandled errors.
* Fixed agent verb integration with Deepgram STT and Krisp/LLM-based turn taking.
* Fixed internal task validation that was incorrectly rejecting valid internal tasks.
* Removed unused IBM speech integration from the webapp.

#### SQL Changes

```
-- Krisp usage tracking
CREATE TABLE krisp_usage_rollup (...)
```

> **Info**
>
> Contact your account manager or email [support@jambonz.org](mailto:support@jambonz.org) for the complete SQL migration script for this release.

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## April 9, 2026

#### 0.9.6

Major release

#### New Features & Improvements

1. Add ability to override certain TTS streaming options via the [config verb](https://github.com/jambonz/jambonz-feature-server/pull/1429), allowing runtime control of streaming behavior.
2. Add ability to enable/disable [Azure audio logging](https://github.com/jambonz/jambonz-feature-server/pull/1432) via `azureOptions` in speech credentials.
3. Compare SDP to determine if [transcoding is being used](https://github.com/jambonz/jambonz-feature-server/pull/1444), with refactored codec checking.
4. SoundHound now supports [audio endpoint configuration](https://github.com/jambonz/jambonz-feature-server/pull/1446) from speech credentials with `requestInfo` and `sampleRate` options.
5. Add [configurable say chunk size](https://github.com/jambonz/jambonz-feature-server/pull/1461) for TTS streaming.
6. Enhanced [TTS sentence boundary detection](https://github.com/jambonz/jambonz-feature-server/pull/1464) for Arabic and Japanese with improved regex handling.
7. Add support for [sending DTMF to Ultravox](https://github.com/jambonz/jambonz-feature-server/pull/1471).
8. Add [label to STT/TTS alerts](https://github.com/jambonz/jambonz-feature-server/pull/1468) with time-series updates.
9. Use [timeout on HTTP requests](https://github.com/jambonz/jambonz-feature-server/pull/1453) to prevent hanging connections.
10. Allow UAS leg to send [re-invite with outbound gateway credentials](https://github.com/jambonz/sbc-inbound/pull/221).
11. Add [hasRecording flag](https://github.com/jambonz/sbc-inbound/pull/229) for setting recording URLs in call detail records.
12. Add [configurable backup for outbound registration failure](https://github.com/jambonz/sbc-sip-sidecar/pull/128).
13. Use [persistent call-id for regbot](https://github.com/jambonz/sbc-sip-sidecar/pull/130) using gateway SID.
14. Only disable registration after [multiple consecutive failures](https://github.com/jambonz/sbc-sip-sidecar/pull/131) rather than a single failure.
15. Add support for [Google Gemini TTS](https://github.com/jambonz/jambonz-api-server/pull/534).
16. Add support for [OpenAI transcribe auto language detection](https://github.com/jambonz/jambonz-api-server/pull/537).
17. Allow [boostAudioSignal from updateCall](https://github.com/jambonz/jambonz-api-server/pull/523) API.
18. Allow [media\_path updates from REST API](https://github.com/jambonz/jambonz-api-server/pull/533) with validation for media\_path values.
19. Allow [startRecording without SIPREC URL](https://github.com/jambonz/jambonz-api-server/pull/530) for cloud deployments.
20. Add new fields for [ICE and DTLS configuration](https://github.com/jambonz/jambonz-api-server/pull/538).
21. Add [admin carrier and number management control](https://github.com/jambonz/jambonz-api-server/pull/532) via `JAMBONES_ADMIN_CARRIER`.
22. Add [database migrations for predefined carriers](https://github.com/jambonz/jambonz-api-server/pull/540) tables.
23. Add [alert notification badge](https://github.com/jambonz/jambonz-webapp/pull/593) to the webapp with configurable polling.
24. Add [SoundHound audio endpoint](https://github.com/jambonz/jambonz-webapp/pull/582) configuration in the webapp.

#### Bug fixes

* Fixed say verb does not [close streaming when finishing say](https://github.com/jambonz/jambonz-feature-server/pull/1412).
* Fixed [playbackIds not in correct order](https://github.com/jambonz/jambonz-feature-server/pull/1439) compared with `say.text` array.
* Allow say verb to fail as NonFatalTaskError for [File Not Found](https://github.com/jambonz/jambonz-feature-server/pull/1443) instead of crashing the call.
* Fixed [race condition in gather](https://github.com/jambonz/jambonz-feature-server/pull/1449) where timeout timer gets set after resolve when speech transcript arrives.
* Fixed [transcribe 2 legs cannot fallback](https://github.com/jambonz/jambonz-feature-server/pull/1451).
* Fixed [SDP checking for Opus](https://github.com/jambonz/jambonz-feature-server/pull/1455) on A leg during B leg dialing.
* Fixed [undefined issue](https://github.com/jambonz/jambonz-feature-server/pull/1456) when setting TTS streaming channel vars.
* Fixed [dial verb cannot bridge](https://github.com/jambonz/jambonz-feature-server/pull/1457) 2 leg endpoints due to transcoding.
* Do not send [TTS streaming events](https://github.com/jambonz/jambonz-feature-server/pull/1467) when not doing TTS streaming.
* Fixed [gather should ignore transcription](https://github.com/jambonz/jambonz-feature-server/pull/1465) if task is killed or resolved.
* Fixed [callsession cannot close TTS streaming](https://github.com/jambonz/jambonz-feature-server/pull/1472).
* Optimized [slow SQL queries](https://github.com/jambonz/sbc-inbound/pull/232) and added support for readonly database endpoints.
* Optimized [CIDR gateway queries](https://github.com/jambonz/sbc-inbound/pull/233) using STRAIGHT\_JOIN to prevent inefficient table scans.
* [Parallelized independent gateway queries](https://github.com/jambonz/sbc-inbound/pull/234) for exact IP and CIDR range lookups to reduce inbound call routing latency.
* When far end answers with only PCMA, [passthrough instead of transcoding](https://github.com/jambonz/sbc-outbound/pull/208) to PCMU.
* Include [codec-accept on answer to rtpengine](https://github.com/jambonz/sbc-outbound/pull/209) during reinvites.
* Remove [ICE and DTLS settings](https://github.com/jambonz/sbc-outbound/pull/214) if set in database configuration.
* Fixed [reg trunk proxy port handling](https://github.com/jambonz/sbc-sip-sidecar/pull/118) to only use port if proxy is IPv4 address; use SIP gateway host for DNS lookup of ephemeral gateways.
* Fixed [Array.prototype.push.apply stack overflow](https://github.com/jambonz/sbc-sip-sidecar/pull/119) causing maximum call stack size exceeded errors.
* If no SRV record found when no port specified, [fall back to A record lookup](https://github.com/jambonz/sbc-sip-sidecar/pull/125).
* Fixed support for [writer/reader database nodes](https://github.com/jambonz/sbc-sip-sidecar/pull/126).
* Removed [send\_options\_bots array](https://github.com/jambonz/sbc-sip-sidecar/pull/129) to fix ticket #1983.
* Fixed [timing issue with ephemeral gateway](https://github.com/jambonz/sbc-sip-sidecar/pull/132) update/deletion and potential regbot zombie processes.
* Set `JAMBONES_NETWORK_CIDR` as private IP address space when running under K8S.
* Removed [activation code from API response](https://github.com/jambonz/jambonz-api-server/pull/513).
* Force [account sip\_realm to lowercase](https://github.com/jambonz/jambonz-api-server/pull/519).
* Fixed [obscured key detection](https://github.com/jambonz/jambonz-api-server/pull/524).
* Fixed unable to [fetch voice\_call\_session](https://github.com/jambonz/jambonz-api-server/pull/525).
* Fixed [webhook URL validation on update](https://github.com/jambonz/jambonz-api-server/pull/528) to not remove URLs if unchanged.
* Fixed [Soniox STT speech credential validation](https://github.com/jambonz/jambonz-api-server/pull/535).
* Subscription [update-quantities validation](https://github.com/jambonz/jambonz-api-server/pull/521) for minimum voice call sessions.
* Added [database indexes and SQL optimizations](https://github.com/jambonz/jambonz-api-server/pull/536) including index on sip\_gateways and trunk\_type for predefined carriers.
* Fixed [duplicate inbound and outbound SIP gateways](https://github.com/jambonz/jambonz-webapp/pull/576) could be created.
* Require IP auth trunk to have [either inbound or outbound carrier](https://github.com/jambonz/jambonz-webapp/pull/579); consistent wording to "IP Trunk".
* Fixed [outbound call routing race condition](https://github.com/jambonz/jambonz-webapp/pull/577) showing default LCR route set that user cannot delete.
* Removed [filter for active carriers](https://github.com/jambonz/jambonz-webapp/pull/589) from phone number configuration.

#### SQL changes

```
ALTER TABLE sip_gateways ADD COLUMN remove_ice BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE sip_gateways ADD COLUMN dtls_off BOOLEAN NOT NULL DEFAULT 0
CREATE INDEX idx_sip_gateways_inbound_lookup ON sip_gateways (inbound,netmask,ipv4)
CREATE INDEX idx_sip_gateways_inbound_netmask ON sip_gateways (inbound,netmask)
ALTER TABLE predefined_carriers ADD COLUMN trunk_type ENUM('static_ip','auth','reg') NOT NULL DEFAULT 'static_ip'
ALTER TABLE predefined_sip_gateways ADD COLUMN send_options_ping BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE predefined_sip_gateways ADD COLUMN use_sips_scheme BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE predefined_sip_gateways ADD COLUMN pad_crypto BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE predefined_sip_gateways ADD COLUMN remove_ice BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE predefined_sip_gateways ADD COLUMN dtls_off BOOLEAN NOT NULL DEFAULT 0
ALTER TABLE predefined_sip_gateways ADD COLUMN protocol ENUM('udp','tcp','tls', 'tls/srtp') NOT NULL DEFAULT 'udp'
```

#### Availability

* Available now with devops scripts for subscription customers

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## November 3, 2025

#### 0.9.5-2

Major release

#### New Features

1. Redesigned and simplifed the Carrier page in the portal, adding support for additional carrier authentication features.
2. Add support for [STT Latency metrics](https://github.com/jambonz/jambonz-feature-server/issues/1204)
3. Add support for Deepgram Flux STT.
4. Add support for Gladia STT.
5. Add support for Soundhound STT.
6. Add support for AssemblyAI v3 STT.
7. Add support for Deepgram EU hosted endpoint.
8. Add support for additinonal ElevenLabs hosted endpoints.
9. Add support for Cartesia Sonic-3 streaming TTS model.
10. Add support for Resemble TTS.
11. Add [additional languages and phrases](https://github.com/jambonz/jambonz-feature-server/pull/1367) to voicemail greeting file.
12. Config verb can now be used to disable tts caching for the entire call.
13. New `distributeDtmf` property added to conference verb to enable DTMF distribution to all conference members.
14. Add support for tel scheme in referTo property of dial verb.
15. Add new Alert verb
16. Added [CLI commands](https://github.com/jambonz/sbc-sip-sidecar/pull/116) for managing feature server drainage, allowing administrators to manually take feature servers out of the rotation gracefully. Commands include fs active, fs drain, fs drained, fs undrain, and fs list.

#### Bug fixes

* A significant number of stability and performance improvements have been made in this release to improve overall system reliability.
* [PR 1421](https://github.com/jambonz/jambonz-feature-server/pull/1421) Fixed a timing issue in the gather verb where the timeout timer would not properly start after a bargein event occurred. This could cause calls to hang indefinitely waiting for user input instead of timing out as expected. The fix also removed an unnecessary "playDone" event emission that was no longer being used.
* [PR 1415](https://github.com/jambonz/jambonz-feature-server/pull/1415) Fixed an issue where whitespace-only tokens were being sent to the media server during TTS streaming. When whitespace was trimmed, incomplete commands lacking the required parameters would result in errors. The fix validates tokens before transmission and holds whitespace-only content for the next processing cycle.
* [PR 1391](https://github.com/jambonz/jambonz-feature-server/pull/1391) Fixed an issue where customerData was being lost when calls were transferred between feature servers. The fix ensures that customer context and metadata are preserved throughout the transfer process, allowing important customer information to remain intact during call routing.
* [PR 1395](https://github.com/jambonz/jambonz-feature-server/pull/1395) Resolved an issue where query string parameters were being inappropriately URL-encoded when they appeared as part of a filename in HTTP requests for audio file retrieval. This was causing URLs to become malformed and preventing audio files from being retrieved correctly.
* [PR 1393](https://github.com/jambonz/jambonz-feature-server/pull/1393) Fixed a race condition where the system would fail to send the final status callback or close the WebSocket application connection when a caller canceled during app JSON fetching. The fix ensures that CallSession properly cleans up resources when a call is canceled during the app-fetching phase.
* [PR 1386](https://github.com/jambonz/jambonz-feature-server/pull/1386) Fixed a timing issue where the continuous ASR (automatic speech recognition) timer was being initiated immediately upon starting to listen during background gather operations. The fix prevents the timer from starting prematurely in background gather scenarios, avoiding unintended behavior.
* [PR 1383](https://github.com/jambonz/jambonz-feature-server/pull/1383) Resolved a bug where transferring outbound conference participants between feature servers would fail. The system was checking the original call direction from Redis to determine whether to answer transfer requests, which caused failures for outbound calls. The fix ensures that transferred calls are always answered regardless of their original call direction.
* [PR 1369](https://github.com/jambonz/jambonz-feature-server/pull/1369) Improved error handling for TTS synthesis failures by ensuring that errors occurring during the initial TTS request are properly propagated as "SpeechCredentialError" events. Previously, TTS errors would fail silently without proper logging or call handling. The fix enables proper error reporting and allows applications to handle TTS failures appropriately.
* [PR 1372](https://github.com/jambonz/jambonz-feature-server/pull/1372) Added an event handler to properly respond when the Deepgram speech recognition service terminates its connection unexpectedly with an error condition. This ensures the system can gracefully handle remote closure events from Deepgram.
* [PR 1366](https://github.com/jambonz/jambonz-feature-server/pull/1366) Fixed an issue where the synthesized-audio verb was not properly sending status events when using text-to-speech streaming functionality. The fix ensures that status events are correctly generated and transmitted when TTS streaming is enabled, allowing clients to properly track the completion or status of audio synthesis operations.
* [PR 1351](https://github.com/jambonz/jambonz-feature-server/pull/1351) Fixed a timeout handling issue in the gather verb where the main timeout and ASR timeout were not being properly cleared when an interdigit timeout was triggered or when DTMF input took priority. This prevents conflicting timer behaviors during gather operations.
* [PR 1359](https://github.com/jambonz/jambonz-feature-server/pull/1359) Added exception handling around req.cancel() calls to prevent unhandled errors during request cancellation. This was particularly important for REST-based outdial operations where timing issues could cause exceptions to be thrown without proper catching, potentially causing crashes.
* [PR 1358](https://github.com/jambonz/jambonz-feature-server/pull/1358) Updated the speech\_util dependency to version 0.2.23, bringing improvements to the speech processing pipeline.
* [PR 1357](https://github.com/jambonz/jambonz-feature-server/pull/1357) Fixed a bug where the singleDialer component was not properly initializing ConfirmCallSession with the necessary temporary file references. This was preventing proper cleanup and file management later in the call lifecycle, potentially causing issues with confirmation hook processing.
* [PR 1356](https://github.com/jambonz/jambonz-feature-server/pull/1356) Resolved an issue where ConfirmCallSession within placeCall lacked access to the tmpFiles variable, preventing proper cleanup of temporary files after operations completed. This fix prevents temporary file accumulation and resource leaks in the call session confirmation workflow.
* [PR 1354](https://github.com/jambonz/jambonz-feature-server/pull/1354) Corrected a misleading error log message that displayed "invalid command since id is missing" when a request actually lacked the tokens field. The log message now accurately reflects when the tokens field is missing, improving debugging clarity for developers.
* [PR 1353](https://github.com/jambonz/jambonz-feature-server/pull/1353) Added exception handling to prevent crashes when a SIP REFER message is received after a dial task has already concluded. This fix allows the system to gracefully manage this timing-related edge case rather than terminating unexpectedly.
* [PR 1352](https://github.com/jambonz/jambonz-feature-server/pull/1352) Fixed a security issue where the TTS streaming functionality was inadvertently exposing sensitive speech service credentials in logs or output. The fix ensures that authentication information remains protected and isn't accidentally exposed through logs or debug output.
* [PR 1349](https://github.com/jambonz/jambonz-feature-server/pull/1349) Fixed an issue where Least Cost Routing (LCR) was being ignored in certain scenarios. The change prevents the dial and createCall functions from attempting to automatically select a carrier trunk when LCR is configured but no specific trunk is specified. This fix only affects accounts with active LCR configurations.
* [PR 1344](https://github.com/jambonz/jambonz-feature-server/pull/1344) Fixed an issue where the punctuation setting in the gather recognizer object was not functioning correctly when using Microsoft as the speech recognition vendor. When developers set "punctuation: false" in the recognizer configuration, the system was not removing punctuation marks from the recognized speech output as expected.
* [PR 1331](https://github.com/jambonz/jambonz-feature-server/pull/1331) Resolved a race condition in playback handling where the say task could receive stop events from previous cached file playbacks, causing improper playback state management. The fix shifts responsibility for generating playback IDs to the feature server and tracks the current playback ID to ensure only events corresponding to the current playback operation are processed.
* [PR 1312](https://github.com/jambonz/jambonz-feature-server/pull/1312) Fixed an issue where the timeout timer wasn't being initiated when users bargeIn to a speech prompt by pressing DTMF digits. The fix ensures the timer starts automatically when DTMF input occurs during playback, while preserving existing behavior for normal scenarios where the timer starts at the end of say/play operations.
* [PR 1320](https://github.com/jambonz/jambonz-feature-server/pull/1320) Extended notification functionality for text-to-speech audio handling to send synthesized-audio notifications regardless of whether content originates from cache or vendor generation. Previously, the system only sent notifications when audio was freshly generated. The fix also returns an identifier that allows correlation between "say" verbs and their corresponding synthesized-audio events, enabling better traceability.
* [PR 1315](https://github.com/jambonz/jambonz-feature-server/pull/1315) Fixed a bug where the task.kill parameter was not being properly passed to the call state component, ensuring proper task termination handling.
* [PR 1308](https://github.com/jambonz/jambonz-feature-server/pull/1308) Enabled passing through options from the recogniser object in an AMD (Automated Message Detection) verb to the speech-to-text service. This allows users to leverage service-specific features such as custom models (e.g., custom Deepgram models) without modifying the core implementation.
* [PR 1301](https://github.com/jambonz/jambonz-feature-server/pull/1301) Fixed an issue where temporary audio files in a ConfirmCallSession were not being cleaned up when calls ended, causing resource leaks. The fix ensures that ConfirmCallSession uses the tmpFiles set of the parent CallSession to store references to created files, allowing the parent CallSession's cleanup function to properly remove temporary files when the call terminates.
* [PR 1300](https://github.com/jambonz/jambonz-feature-server/pull/1300) Enabled the ability to pause and resume background listening functionality using silence or blank audio, enhancing the system's ability to handle audio input states more flexibly during background processing operations.
* [PR 1293](https://github.com/jambonz/jambonz-feature-server/pull/1293) Fixed an issue with audio file caching where URLs containing query string parameters with periods (valid characters) were incorrectly parsed. The fix URL-encodes periods within query string parameters to %2E, allowing the system to correctly identify the file extension and enabling proper caching and playback of media files.
* [PR 1290](https://github.com/jambonz/jambonz-feature-server/pull/1290) Fixed failures when using Whisper with Play functionality by allowing a whisper to accept a single object verb (specifically "play") without triggering unnecessary fetching operations. The fix also disables URL-based verb fetching during whisper operations to prevent failures.
* [PR 1278](https://github.com/jambonz/jambonz-feature-server/pull/1278) Implemented control mechanisms for forwarding the P-Asserted-Identity (PAI) header, enabling more granular control over how PAI information is propagated through the system.
* [PR 1283](https://github.com/jambonz/jambonz-feature-server/pull/1283) Fixed an issue where the stopTranscription method was incorrectly delaying transcription stops during gather verb operations when the JAMBONES\_TRANSCRIBE\_EP\_DESTROY\_DELAY\_MS environment variable was enabled. The delayed shutdown prevented proper input capture in subsequent gather operations when transitioning between recognizers. The fix adds a gracefulShutdown: false parameter to stop transcription immediately without applying the configured delay.
* [PR 1276](https://github.com/jambonz/jambonz-feature-server/pull/1276) Fixed an issue where the gather task's nested sayTask would not emit a playDone event when operating in streaming mode, preventing the transcribe task from starting and blocking the timeout timer. This fix ensures proper event emission during streaming playback, allowing the gather operation to proceed normally through its lifecycle stages and enabling timeout mechanisms to function when listenDuringPrompt is enabled.
* [PR 1286](https://github.com/jambonz/jambonz-feature-server/pull/1286) Fixed TTS cache issues including error handling gaps when TTS fails (where playback-start event doesn't occur but playback-stop still fires), and concurrency race conditions with playback IDs. The fix implements atomic operations for ID generation and properly handles scenarios where playback-start lacks an ID.
* [PR 1282](https://github.com/jambonz/jambonz-feature-server/pull/1282) Fixed issues with LCC (Low Cost Calling) dial functionality when relative URLs are provided as action hooks. The PR also updated speech-utils to version 0.2.15 with configurable tmp folder location.
* [PR 1279](https://github.com/jambonz/jambonz-feature-server/pull/1279) Fixed a race condition related to cached audio playback where playback stop events from previous audio commands could incorrectly interfere with current playback operations. The solution validates that the playback ID in the "playback-stopped" event matches the ID from the corresponding "playback-start" event. Also improved TTS caching to respect the disableTtsCache setting.
* [PR 1259](https://github.com/jambonz/jambonz-feature-server/pull/1259) Fixed an issue where transcriptions were not being received when calls were terminated. The feature server was sending stopTranscription commands too quickly and destroying endpoints prematurely before transcription could be processed. The fix implements graceful shutdown for endpoints when JAMBONES\_TRANSCRIBE\_EP\_DESTROY\_DELAY\_MS is enabled, delaying stopTranscription and endpoint destruction until transcription is received or timeout occurs. Excludes ASR fallback operations, paused transcription states, and AMD stop operations from the delay.
* [PR 1271](https://github.com/jambonz/jambonz-feature-server/pull/1271) Fixed an issue where the system would attempt to process missing or undefined data when a referHook function in a dial operation fails to return any payload. The fix now skips subsequent operations when no response is received, preventing errors from trying to work with empty or null values.
* [PR 1269](https://github.com/jambonz/jambonz-feature-server/pull/1269) Fixed TTS response code handling to ensure that a response code of 0 triggers task failure. The fix addresses compatibility with different TTS vendors (like Azure and Deepgram) that return different error codes, and improves error alerting when TTS errors occur by sending appropriate jambonz:error messages to webhooks rather than dropping calls.
* [PR 1264](https://github.com/jambonz/jambonz-feature-server/pull/1264) Fixed REFER (call transfer) handling in the dial functionality to ensure proper cleanup and termination of the dial task in the parent session when a REFER request is received on a parent call leg after the child call has been transferred. The fix includes a reversion of a problematic prior change to dial.js.
* [PR 492](https://github.com/jambonz/jambonz-api-server/pull/492) Fixed API authorization for account-level API keys to access SIP gateways and VoIP carriers. Previously, account-level API keys were unable to read or create these resources through the API endpoints. The fix grants proper permissions and automatically populates the service provider SID when accounts create carriers.
* [PR 494](https://github.com/jambonz/jambonz-api-server/pull/494) Fixed excessive CPU utilization during call recording caused by inefficient buffer handling in S3 multipart uploads. The previous implementation used Buffer.concat on every chunk, creating O(n²) complexity. The fix optimizes memory operations by accumulating chunks in an array and performing a single concatenation per 5 MB part, reducing complexity to O(n) and stabilizing request latency under concurrent load.
* [PR 500](https://github.com/jambonz/jambonz-api-server/pull/500) Fixed an issue where the system was unable to retrieve the list of available voices for Deepgram models.
* [PR 505](https://github.com/jambonz/jambonz-api-server/pull/505) Added the ability to completely disable rate limiting by setting the DISABLE\_RATE\_LIMITS environment variable to 'true' or '1'. This optimization is useful for deployments that handle rate limiting at a higher infrastructure level, eliminating unnecessary processing overhead from API-level rate limit calculations.
* [PR 208](https://github.com/jambonz/sbc-inbound/pull/208) Increased DTMF signal volume levels in the session border controller to improve DTMF tone detection and reliability.
* [PR 183](https://github.com/jambonz/sbc-outbound/pull/183) Fixed SIP reinvite handling to properly remove video SDP (Session Description Protocol) information during call renegotiation. This ensures that video codec and capability data is correctly filtered when calls are reinvited.
* [PR 189](https://github.com/jambonz/sbc-outbound/pull/189) Fixed the isPrivateVoipNetwork function to correctly identify private network addresses in SIP URIs regardless of whether a trailing semicolon is present. Previously, URIs without a semicolon would incorrectly return false even when representing valid private network addresses.
* [PR 113](https://github.com/jambonz/sbc-sip-sidecar/pull/113) Fixed an issue where the system was redirecting client calls to other SBCs using public IP addresses instead of private ones. The fix stores the private SIP address in Redis during client registration, enabling subsequent operations to route calls through private network paths.
* [PR 110](https://github.com/jambonz/sbc-sip-sidecar/pull/110) Enhanced the database status API response to include expires value and timestamp fields for carrier information. The changes provide additional metadata about credential expiration and when status was recorded, along with improved logging for better visibility into the registration flow.

#### SQL changes

```
UPDATE applications SET speech_synthesis_voice = 'en-US-Standard-C' WHERE speech_synthesis_voice IS NULL AND speech_synthesis_vendor = 'google' AND speech_synthesis_language = 'en-US';
ALTER TABLE applications MODIFY COLUMN speech_synthesis_voice VARCHAR(255) DEFAULT 'en-US-Standard-C';
ALTER TABLE voip_carriers ADD COLUMN trunk_type ENUM('static_ip','auth','reg') NOT NULL DEFAULT 'static_ip';
```

#### Availability

* Available now on jambonz.cloud
* Available now with devops scripts for support subscription customers

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## June 24, 2025

#### 0.9.4-4

Point release

#### New Features

1. Adds support for Cartesia Speech to text [Ink-Whisper model](https://cartesia.ai/ink).  You can now use Cartesia for both TTS and STT.
2. Adds support for creating an [Agent Call](https://docs.ultravox.ai/api-reference/agents/agents-calls-post) on Ultravox.  To enable this
   feature, you must set the `agent_id` property  in the ultravox llm verb as described here.  This is an optional property, and
   if not set the [Create Call](https://docs.ultravox.ai/api-reference/calls/calls-post) API will be used instead (i.e. legacy behavior).
3. The `say` verb now supports a TTS streaming mode where you can supply the full prompt at once in the `text` property.
4. Adds additional support for Italian voicemail detection based on common operator messages.
5. When registering with an outbound SIP trunk, use the account-level sip realm in the Contact header if provided.

#### Bug fixes

* error if app does not specify a speech synthesis voice [issue](https://github.com/jambonz/jambonz-feature-server/issues/1230).
* unhandled exception [issue](https://github.com/jambonz/jambonz-feature-server/issues/1229)
* remove unnecessary logging [PR](https://github.com/jambonz/jambonz-feature-server/pull/1238)
* embedded urls in `createCall` REST call createCall verb caused parsing issue [PR](https://github.com/jambonz/jambonz-feature-server/pull/1235)
* unhandled exception in `dial` verb [PR](https://github.com/jambonz/jambonz-feature-server/pull/1239)
* in certain dial scenarios, the A leg could be left connected after a successful REFER on the B leg [PR](https://github.com/jambonz/jambonz-feature-server/pull/1243)
* remove video SDP when making outbound call [PR](https://github.com/jambonz/jambonz-feature-server/pull/1242)
* fix issue with `dub` verb where `loop: false` caused the audio to incorrectly loop [PR](https://github.com/jambonz/jambonz-feature-server/pull/1247)
* fix potential looping behavior in background sticky bargeIn task [PR](https://github.com/jambonz/jambonz-feature-server/pull/1253)
* fix snyk warning in drachtio-fsmrf [PR](https://github.com/jambonz/jambonz-feature-server/pull/1255)
* route logs for jambonz-api-server to the correct log file [PR](https://github.com/jambonz/jambonz-api-server/pull/465)
* creating new application in the webapp does not save a TTS voice by default [PR](https://github.com/jambonz/jambonz-webapp/pull/535)
* fix issue when wild cards or regex is used in phone number for multiple carriers [PR](https://github.com/jambonz/sbc-inbound/pull/202)

#### SQL changes

None.

#### Availability

* Available now on jambonz.cloud
* Available now with devops scripts for subscription customers

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## May 23, 2025

#### 0.9.4

Major release

#### New Features

1. Adds support for Google Gemini speech-to-speech LLM.  See example application [here](https://github.com/jambonz/gemini-s2s-example).
   Speech-to-speech LLMs now supported include: Gemini, Ultravox, OpenAI, Deepgram, and elevenlabs.
2. Added MCP client support to the `llm` verb.  You can now specify an array of one or more MCP servers in
   the `mcpServers` property of the llm verb and jambonz will query those MCP servers and automatically create tools for the LLM to call
   based on the tools exposed by each of the MCP servers.  For an example, see the [google gemini sample app](https://github.com/jambonz/gemini-s2s-example?tab=readme-ov-file#testing-with-mcp-server-tools).
3. Added support for application environment variables, which are special configuration variables that can be set in the jambonz portal for
   an application to customize the application behavior.  This enables hosting of a single application that can then be customized for different
   customers without having to modify source code.
4. Added support for Deepgram Aura-2 TTS model and voices
5. Added support for Rime Arcana model
6. Added support for PlayHT on-prem deployments.
7. Added support for using outbound sip proxy when registering
8. Added support for providing instructions to Whisper TTS
9. Added new voice for nvidia TTS

#### Bug fixes

* Various stability fixes including for issues which caused intermittent Freeswitch crashes.
* Fixed deepgram gather cannot be timeout on empty transcription with continueAsr. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1171)
* Fixed say verb cannot failover if tts\_response-code != 2xx. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1174)
* Fixed microsoft stt max client buffer size error for transcribe verb. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1173)
* sip\_decline release callSession if ws requestor is used. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1182)
* Send stop-playback event. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1186)
* Fixed tts streaming buffer cannot reset timeout when lastUpdateTime is short. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1184)
* Fixed issue with Deepgram STT not returning transcript when last\_word\_end is -1. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1196)
* Fixed issue muting member in conference. [PR](https://github.com/jambonz/jambonz-feature-server/pull/1048)
* Fixed API server crash when admin query voip-carrier. [PR](https://github.com/jambonz/jambonz-api-server/pull/442)
* Fixed issue where we incorrectly saved an obscured API credential for recording, leading to failures authenticating. [PR](https://github.com/jambonz/jambonz-api-server/pull/443)
* Fixed an issue where updateCall responding with 202 caused an error. [PR](https://github.com/jambonz/jambonz-api-server/pull/451)
* Fixed an issue in the portal where the wrong recording bucket region was displayed. [PR](https://github.com/jambonz/jambonz-webapp/pull/522)

#### SQL changes

```
ALTER TABLE applications ADD COLUMN env_vars TEXT
```

#### Availability

* Available now on jambonz.cloud
* Available now with devops scripts for subscription customers

**Questions?** Contact us at [[support@jambonz.org](mailto:support@jambonz.org)](mailto:support@jambonz.org)

## April 12, 2025

#### 0.9.3-12

Point release

## Elevenlab conversational AI bug fixes, readonly portal users and stability improvements

1. Fixes an issue where the initial [client configuration message](https://elevenlabs.io/docs/conversational-ai/api-reference/conversational-ai/websocket#send.Conversation%20Initiation%20Client%20Data) for Elevenlabs Conversational AI was improperly formatted.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1144)

2. Adds support for [speed](https://elevenlabs.io/docs/api-reference/text-to-speech/v-1-text-to-speech-voice-id-stream-input#send.Initialize%20Connection.voice_settings.speed)
   and [pronunciation\_dictionary\_locators](https://elevenlabs.io/docs/api-reference/text-to-speech/v-1-text-to-speech-voice-id-stream-input#send.Initialize%20Connection.pronunciation_dictionary_locators) for Elevenlabs TTS.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1144)

3. Addresses memory allocation issue in freeswitch modules that could lead to intermittent crashes.
   (Fixed in freeswitch-modules\@2.2.26).

4. Add support for throttling outbound registrations and disabling. Also added support for disabling outbound
   REGISTERs or NOTIFYs based on specific failure codes returned from the far end trunk.
   \
   \
   [PR](https://github.com/jambonz/sbc-sip-sidecar/pull/95), [PR](https://github.com/jambonz/sbc-sip-sidecar/pull/96)

5. Fixes issue where confirm hook on a dial verb was not working over a websocket connection.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1143)

6. Adds support for creating portal users with readonly access.
   \
   \
   [PR](https://github.com/jambonz/jambonz-api-server/pull/381)

7. Disable password managers (e.g. LastPass, etc) on some forms where they were incorrectly auto-filling data,
   leading to confusion over why the form was not submitting.
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/503)

8. Fixes issue with failing re-INVITE due to unsupported codec.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1131)

9. Allows hangup verb to be used in a siprec call.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1136)

10. Fixes scenario where we have two config verbs, first config having hints, but second one not having hints,
    then the transcribe verb generating a rutime error.
    \
    \
    [PR](https://github.com/jambonz/jambonz-feature-server/pull/1139)

11. Reject portal logins with better error message if a user that signed up using ouath tries to sign in using email and password.
    \
    \
    [PR](https://github.com/jambonz/jambonz-api-server/pull/408)

12. Allow a readonly portal user to change their password.
    \
    \
    [PR](https://github.com/jambonz/jambonz-api-server/pull/407)

## March 30, 2025

#### 0.9.3-10

Point release

## Add support for OpenAI Streaming STT and other improvements

1. Adds support for [OpenAI Speech-to-text](https://platform.openai.com/docs/guides/realtime-transcription).
   Please see related options [here](/verbs/verbs/recognizer#openaioptions) and
   review [this article](/guides/features/using-open-ai-stt) a discussion of how to use the OpenAI STT prompt feature.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1127), [PR](https://github.com/jambonz/jambonz-api-server/pull/402), and [PR](https://github.com/jambonz/jambonz-webapp/pull/496).

2. Support Cartesia sonic-2 and sonic-turbo models.
   \
   \
   [PR](https://github.com/jambonz/jambonz-api-server/pull/403)

3. Fixes issue with use of streaming say in gather verb.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1128)

4. Better support for passing webrtc video calls.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1124)

5. Fixes issue when using language detection feature with Deepgram.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1116)

6. Fixes an issue showing incorrect speech synthesizer in applications view in the portal.
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/493)

7. Write options ping failure alert once instead of repeatedly.
   \
   \
   [PR](https://github.com/jambonz/sbc-sip-sidecar/pull/88)

8. Fixes issue where lengthy LLM prompts for ultravox, elevenlabs, and deepgram were being truncated.

## March 12, 2025

#### 0.9.3-9

Point release

## Additional log visibility, improvements to AMD, and more

1. Adds log viewer to jambonz portal (AWS only) to enable easier troubleshooting of calls.
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/490), [Issue](https://github.com/jambonz/jambonz-webapp/issues/486)

2. Improves answering machine detection by listening for strings of digits in addition to other heuristics.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1111)

3. Add support for username and password authentication to redis.
   \
   \
   [PR](https://github.com/jambonz/realtimedb-helpers/pull/64)

4. Fixes crashing error with some media timeout scenarios
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1108)

5. Adds support for pausing transcriptions on Listen and Transcribe verbs.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1107)

6. When a session uses live call control and a session:adulting message is sent to the application, customer data is now included.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1110)

7. Fixes an issue when a call is ended via the API live call control the call\_terminated\_by field is now 'jambonz'.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1104)

8. Filters the carrier list by account when creating a new phone number.
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/492)

9. Usability improvements when configure a websocket-based application URL in the jambonz portal.
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/489)

10. Allows the Recent Calls API to return more than 25 calls at a time.
    \
    \
    [PR](https://github.com/jambonz/jambonz-api-server/pull/396)

11. Smooth outbound SIP registrations to avoid spikes.
    \
    \
    [PR](https://github.com/jambonz/sbc-sip-sidecar/pull/80)

## March 1, 2025

#### 0.9.3-8

Point release

## Audio Improvements with Bidirectional Streams, Ultravox Enhancements, AWS Autoscaling fixes and more

1. Allows the `url` property in a [listen](/verbs/verbs/listen) verb to be a relative URL when used in a websocket application.  This allows developers
   to create a single websocket app that handles both jambonz commands and bidirectional audio streams.\
   \
   See [this realtime translation example that uses openAI](https://github.com/jambonz/realtime-translator-using-llms)
   and bidirectional audio streams, where the `url` property is a [relative URL](https://github.com/jambonz/realtime-translator-using-llms/blob/5d438b35989ceb8ed62fcb934a56441d12fdc81b/lib/routes/openai-translator.js#L30)
   and the
   [app handles both jambonz commands and the audio stream](https://github.com/jambonz/realtime-translator-using-llms/blob/5d438b35989ceb8ed62fcb934a56441d12fdc81b/app.js#L10).
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/issues/1101), [Issue](https://github.com/jambonz/jambonz-feature-server/issues/1101)

2. Fixes an intermittent issue with audio issue with crackling noise on bidirectional audio streams.

3. When an application [redirects](/verbs/verbs/redirect) to a new absolute URL, update the base requestor so that future relative URLs
   are resolved relative to the new URL.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1096), [Issue](https://github.com/jambonz/jambonz-feature-server/issues/1079)

4. Fixes an issue where the final transcript in a conversation initiated with the [dial]() verb was sometimes not collected
   if the caller hung up quickly after their final utterance.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1073), [Issue](https://github.com/jambonz/jambonz-feature-server/issues/997)

5. Adds support for sending an [input\_text\_message](https://docs.ultravox.ai/datamessages#inputtextmessage) to Ultravox.ai
   during a speech-to-speech session.  This enables the application to dynamically direct the conversation through means
   other than the caller's voice.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1100)

6. Fixes an issue with intermittent failure to clean up media server resources after a call completes.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1090) [Issue](https://github.com/jambonz/jambonz-feature-server/issues/1072)

7. Webapp no longer shows Messaging webhook as SMPP is a deprecated feature for the time being (lack of customer demand).
   \
   \
   [PR](https://github.com/jambonz/jambonz-webapp/pull/488), [Issue](https://github.com/jambonz/jambonz-webapp/issues/482)

8. Fixes database upgrade script which had previously misnamed a column.
   \
   \
   [PR](https://github.com/jambonz/jambonz-api-server/pull/391) [Issue](https://github.com/jambonz/jambonz-api-server/issues/390)

9. Fixes an issue with AWS autoscaling where incorrect SNS topic name was used, leading to unnecessarily long scale-in durations.
   \
   \
   [PR](https://github.com/jambonz/sbc-inbound/pull/193)

10. When sending a REFER over sips the Contact header should also use sips scheme.
    \
    \
    [PR](https://github.com/jambonz/sbc-inbound/pull/192)

## February 24, 2025

#### 0.9.3-7

Point release

## Conferencing Enhancements and Minor Fixes

1. Adds support for receiving sip requests during a conference call.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1050), [Issue](https://github.com/jambonz/jambonz-feature-server/issues/1051)

2. Sends new error message over websocket to application when an incoming request from the application is not valid.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1095) [Issue](https://github.com/jambonz/jambonz-feature-server/issues/1094)

3. Fixes a typo with the variable name used to store the AWS SNS topic arn (only relevant for AWS deployments).
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1093)

## February 20, 2025

#### 0.9.3-6

Point release

## Improve Ultravox Integration

1. Adds support for sending the Ultravox call identifier to the jambonz app so that it can be used for tracking and
   troubleshooting purposes.
   \
   \
   [PR](https://github.com/jambonz/jambonz-feature-server/pull/1091)

2. Update to drachtio-srf 5.0.2

_Showing the 20 most recent of 28 entries. Append `/llms.txt` to the changelog URL for the complete index._