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

# Release notes

Welcome to Ada's release notes. Scroll down to see a list of recent releases, or subscribe to get notified about updates.

#### Subscribe via email

Receive a weekly email summary of releases every Friday at 11 a.m. Eastern, provided there has been at least one release that week.

#### Subscribe via RSS

Copy the following URL into your RSS reader to get notified about new releases:

```
https://docs.ada.cx/release-notes.rss
```

## Availability rules for web import sources

You can now set availability rules on a web import source. Every page that the import adds gets those rules automatically, so you no longer need to set rules on imported articles one by one. Set the rules when you add a website, or later from the source's **Settings**.

Rules on the source apply to pages imported after you set them. Existing articles keep their own rules.

For more information, see [Web import](/docs/knowledge/content-ingestion/web-import).

## Email API accepts attachments

The [Email API](/docs/channels/email/email-configuration/implementation-method#api) now accepts the files that end users attach to a contact form. Your AI Agent handles them the same way as attachments on an email sent to it directly.

## What's new

The `POST /v2/conversations/email/` endpoint accepts a new request format. JSON requests work as before.

* **Multipart requests**: send the request as `multipart/form-data`, with the JSON body in a `data` part and one `attachments` part per file. See [Start a conversation over Ada's email channel](/reference/conversations/create-email-conversation).
* **Attachment handling applies**: files follow the [attachment handling](/docs/channels/email/email-configuration/email-handoffs/attachment-handling) setting of the inbox the AI Agent replies from. On inboxes set to **AI Agent replies using the attachment**, the AI Agent reads up to 3 images. On the default **Hand off to a human**, the inquiry is handed off with its files.
* **Limits**: a request can include up to 10 attachments and 30 MB in total. A request with more files returns `400 Bad Request`, and a larger one returns `413 Content Too Large`.

## SEND steps can search and reference Knowledge

Contextual AI-generated `SEND` steps in Playbooks can now use Knowledge for a single reply. A reference in General Guidelines applies across the whole Playbook. A search or a reference in a `SEND` step grounds the reply of that step.

## What's new

Two options appear under **Knowledge** in the `@` menu of a Contextual AI-generated `SEND` step.

* **Search Knowledge.** Select **Search Knowledge** to add a **Search** pill. When the step runs, the AI Agent writes a search query from the instruction and the recent conversation. The Agent then searches Knowledge and writes the reply from the results. Name a topic in the instruction to narrow the search.
* **Reference an article.** Select an article to ground the step's reply in its content. The menu shows the locale of each article and marks articles that have availability rules. A step can reference up to 5 articles.

Availability rules apply to both options. Fixed message `SEND` steps do not support them.

See [Search Knowledge in `SEND` steps](/docs/automation/playbooks/step-reference#search-knowledge-in-send-steps).

## API tool response time in the Conversation View

The **Conversation View** now shows how long your API tools take to respond.

When an API tool is slow, the conversation shows it. A response that takes more than 1 second is marked with the time it took. If several API tools run in one turn, the total appears at the top of that turn. Open a tool's details to see the time for every response, fast or slow.

Only the time spent waiting for your API is counted. This helps you see when a slow API is behind a slow conversation, and gives your team a clear number to work from.

## Who this affects

Every AI Agent that uses API tools. Response times are available for conversations from September 22, 2026 onward. Code tools and MCP tools do not show a response time.

See [API tool response time](/docs/optimization/conversations#api-tool-response-time) for where each time appears.

## Data Export API: changeset_id on the Conversations endpoint

The v2 Conversations endpoint of the Data Export API now returns `changeset_id` on each conversation. The value is the unique ID of the change set the conversation ran against.

The field returns `baseline` when the conversation ran against your live AI Agent rather than a change set.

Use the field to measure a live customer test. Group your export by `changeset_id` to compare the conversations in a rollout against the rest.

See the [Conversation object reference](/data-export-conversation-object) for the full schema.

## ASK steps read every reply and can ask only once

## What's new

ASK steps in structured v2 Playbooks now evaluate the end user's reply to the last re-ask before the step moves on. The **Max re-ask attempts** field now accepts 0.

* **Every reply is evaluated.** Previously, the AI Agent applied the re-ask limit before it read the reply to the last re-ask. The step discarded a valid answer given on the last re-ask and moved on with the fallback value or an empty variable. The Agent now reads that reply first and only then decides whether to move on.
* **Max re-ask attempts counts re-asks after the first question.** A value of 3 means the Agent asks once and re-asks up to 3 times, 4 questions in total. The default is 3 re-asks, so existing steps ask the same number of times as before.
* **Ask only once.** Set **Max re-ask attempts** to 0 and the Agent asks the question once, evaluates the reply, and moves on without re-asking.

Existing ASK steps keep their current settings.

See the [ASK step reference](/docs/automation/playbooks/step-reference#map-the-answer-using-reasoning) for configuration details.

## Suppress the CSAT survey with rules

You can now suppress the CSAT survey when an end user's variables match a rule.

## What's new

**Config > AI AGENT > CSAT** has a new **Survey Suppression** section on both the **AI Agent chat** and **Human Agent** tabs.

* **Never suppress** keeps the current behavior. Every eligible end user is offered the survey.
* **Suppress when the following rules match** hides the survey when the end user's variables match the rules you define. The rule builder is the same one used for Availability rules on Knowledge and Actions.
* Each tab has its own suppression rules, so the AI Agent survey and the Human Agent survey can differ.
* Suppression rules apply to the end-of-chat survey and the survey after a Human Agent chat. They do not apply to the survey sent by SMS after a voice call, or to a survey that a Playbook step sends.

Learn more about [configuring a satisfaction survey](/docs/optimization/performance/csat-survey/csat-survey-configuration#configure-csat).

## MCP: compare a change set against baseline in one call

An AI assistant connected over the MCP server can now compare a change set's performance against baseline in one call. Baseline is the set of conversations your live AI Agent handles, not attributed to any change set.

The new [`compare_changeset_metrics`](/mcp/tools/compare-changeset-metrics) tool takes a change set ID and a date range. It returns baseline and change set side-by-side for `containment_rate`, `resolution_rate`, `csat_rate`, and each enabled custom metric pass rate. Each metric row includes the absolute difference and the difference relative to baseline. Cohort conversation volume is included.

Before, an assistant called [`get_ada_metric`](/mcp/tools/get-ada-metric) twice per metric and aligned the results itself. One call now returns every metric for both cohorts with the difference computed.

## Chat widget browser requirements

The chat widget now supports Chrome 99, Edge 99, Firefox 97, and Safari 15.4 as its minimum desktop browser versions. On iOS, the minimum supported version is iOS 15.4 for Safari and in-app WebViews. On Android, the minimum supported version is 99 for Android System WebView or Chrome.

The chat widget runs in the device's web engine. Android System WebView updates separately from the operating system through the Play Store.

See [Browser support](/docs/channels/chat/chat-onboarding#browser-support).

## URL-triggered business events removed from Embed2

Ada removed automatic URL-triggered business events from the Embed2 Web SDK. Embed2 no longer fetches business-event definitions, and it no longer records an Event when a page URL matches a trigger condition. Existing integrations continue to load without code changes.

## What changed

This release changes the following Embed2 behavior.

* Embed2 no longer requests business-event definitions at start or on page navigation.
* Embed2 no longer records an Event when the page URL matches a configured trigger condition.
* The deprecated [`trackEvent`](/chat/web/sdk-api-reference#trackevent) action is unchanged. Calling it still resolves and has no effect.

The `@ada-support/embed2` npm package publishes this change as version `1.16.0`. There are no build-time or type-level breaking changes.

## Dashboard tables remember your sort

Sortable tables in the dashboard now keep the column sort you choose. Leave the page and come back, and the table opens the way you left it. A shared link opens with the same order.

## New default order

Four tables open on the most recent edit instead of alphabetical order.

* Playbooks, Processes, Custom instructions, and Tools now open sorted by most recently edited.
* The Tools tables show a new **Last edited** column.

## Code tools: let a Playbook recover when a tool fails

A Code tool can now report how its run ended. A Playbook can branch on that outcome instead of handing the conversation to a human agent. Before this change, a failed run exited the Playbook and forced a handoff. A run fails when the code raises an error, exceeds a limit, or receives an input of the wrong type.

## What's new

The **Outputs** section of a Code tool now offers an output that reports how the run ended.

* **Add the status output.** Enable **Let playbooks branch when this tool fails** in the Code tool's **Outputs** section. Ada adds an output named `ada_run_status`. The name is fixed, and the **Path** field does not apply.
* **Branch on the status.** Save the output to a variable. Read that variable from an `IF/ELSE` step after the `RUN` step. When a condition references the variable, the automatic handoff stops and your branches own the fallback. Retry the tool, send a message, or hand off.
* **Five status values.** The status is `ok`, `timeout`, `error`, `invalid_input` or `disabled`. A `timeout` is the clearest case for a retry.
* **Only the run status has a value after a failure.** Every other output selects part of the value the code returned. A failed run returns nothing, so those outputs hold no value.

Learn more about [the run status output](/docs/automation/tools/code-tools/inputs-outputs-and-environment#let-playbooks-branch-when-the-tool-fails) and [Code tool error handling in a Playbook](/docs/automation/playbooks/step-reference#code-tool-error-handling).

## CSAT survey RUN step in Playbooks

## What's new

Structured v2 Playbooks can ask the end user to rate their experience at the point the author chooses, with the new **CSAT survey** RUN target.
The **CSAT survey** RUN target shows the survey card in web chat and messaging channels.
On Voice, it asks the caller for permission and then texts the survey link through Agent SMS.
On Email, it sends the survey link in its own email.
The Playbook continues with its next step and does not wait for the rating.

See the [CSAT survey RUN step](/docs/automation/playbooks/step-reference#csat-survey) for authoring instructions.

## Manage change sets from the dashboard

You can now manage change sets directly from the dashboard. Try changes on a sample of live conversations before promoting them to your AI Agent. Discard change sets you decide not to promote.

See [Change sets](/docs/optimization/change-sets).

## Platform API: daily rate limits removed on several endpoints, new rate limit headers

The Platform API no longer applies a daily request cap to these endpoint groups:

* End Users API (`/v2/end-users/`)
* Conversations API create, read, update, end, end-handoff, attachment, and
  messaging endpoints
* Knowledge API article endpoints (`/v2/knowledge/articles/`)

Per-minute and per-second limits stay the same for these endpoints. See the
[global rate limits](/reference/introduction/limits) and each API's own
reference page for the current values.

## New rate limit headers

The Platform API and the MCP server now return `X-RateLimit-Limit`,
`X-RateLimit-Remaining`, and `X-RateLimit-Reset` on every successful
authenticated response. A `429` response caused by rate limiting also returns
`Retry-After`. Use these headers to pace your requests and avoid hitting a
limit. See
[rate limit headers](/reference/introduction/limits#rate-limit-headers)
and
[working with rate limits](/reference/introduction/limits#working-with-rate-limits)
for details.

## MCP server limits

Since September 8, 2026, the MCP server has applied a budget per AI Agent.
An OAuth-authenticated request is budgeted per user instead of per Agent.
See the [MCP server row](/reference/introduction/limits#api-specific-rate-limits)
in the rate limits table for the current values. Today's change adds the
rate limit headers above to MCP responses. The MCP limits themselves do not
change.

## MCP: roll out a change set to a slice of live traffic

An AI assistant connected over the MCP server can now serve a testing change set to a sample of new conversations before it is promoted. The staged variants run against real traffic while the rest of the AI Agent stays on the live version.

## What's new

* **Start a rollout**: [`edit_agent_behavior`](/mcp/tools/edit-agent-behavior) accepts `set_rollout` with `changeset_id`, `percentage` (1–100), and `max_conversations`. The rollout completes the moment the cap is reached.
* **Stop a rollout**: `edit_agent_behavior` accepts `stop_rollout` with `changeset_id`. No further conversations are sampled in. Conversations already pinned to the change set keep serving its variants until they end.
* **Combined cap**: percentages across all active rollouts on the same Agent must sum to at most 100.

## AI Agent reads images sent over Email

Your AI Agent now reads images that end users attach to emails and uses them to resolve inquiries. A screenshot of an error, a photo of a damaged product, or an order confirmation becomes part of the conversation. To turn it on, set the inbox's attachment handling to **AI Agent replies using the attachment**.

## What's new

The Agent reads images only on inboxes set to **AI Agent replies using the attachment**.

* **Image descriptions**: the Agent receives a text description of each image, including any visible text such as order numbers and error messages. Up to 3 images per email are read. See [Images](/docs/other/images) for formats and limits.
* **Attachment handling controls it**: set the inbox to **AI Agent replies using the attachment** to have the Agent read images. On the default **Hand off to a human**, every email with an attachment is handed off, images included. Inboxes that discard attachments never read images. See [Attachment handling](/docs/channels/email/email-configuration/email-handoffs/attachment-handling).
* **Sensitive images are withheld**: the Agent detects images that show a payment card, a government identity document, or another credential. For those, it receives only the document type and none of the text on it. Detection is automatic and best-effort, and your redaction rules apply to every description. The Agent tells the end user it could not process the image and offers a human agent where needed.
* **Redactions apply**: your [redaction rules](/docs/setup/redactions/redaction-settings) run on image descriptions the same way they run on typed text.

## Send your Voice AI Agent's texts through your own SMS provider

Voice AI Agents can now send their in-call text messages through your own SMS provider and phone number. This needs a developer. They create a Conversations API channel with the new `sms` modality and run a relay that receives each text message as a `v1.conversation.message` webhook and sends it with your provider.

Create the channel with `POST /v2/channels`. Set `modality` to `sms`. Then turn on the **Use your own SMS channel** toggle in **Config > CHANNELS > Voice > Configuration**. Until the toggle is on, the AI Agent sends its text messages from the Twilio number configured for your AI Agent.

Ada tags each webhook event from this channel with the SMS channel's ID, so you can scope a webhook endpoint to the channel. The event carries no phone number. Read the caller's number from the end user that `data.end_user_id` names. Ada records no delivery for a text message on this channel. Report delivery in your own relay. For setup steps, payload shapes, and limits, see [Relaying voice texts through your own SMS provider](/reference/conversations/developer-guides/relaying-voice-texts-through-your-own-sms-provider).

The caller can reply to a text message during the call. Your relay posts the reply to `POST /v2/conversations/{conversation_id}/sms/` as the end user. The AI Agent answers by voice on the call. See [Accept the caller's reply](/reference/conversations/developer-guides/relaying-voice-texts-through-your-own-sms-provider#accept-the-callers-reply).

## AI Agent reads HEIC and HEIF images

Your AI Agent now reads HEIC and HEIF images, the default photo format on iPhone. An end user who emails a photo straight from their camera roll no longer needs to convert it first.

## What's new

HEIC and HEIF join PNG, JPEG, and GIF as image formats the Agent reads on Email.

* **Converted on receipt**: each HEIC or HEIF image the Agent reads is converted to JPEG when it arrives. The JPEG is what the Agent reads and what human agents receive on handoff.
* **Large photos are scaled**: images wider or taller than 4096 pixels are scaled down during conversion. Images over 50 megapixels are not read.
* **Same rules as other images**: the inbox's attachment handling setting, the 3-image limit, sensitive-image detection, and your redaction rules apply unchanged. See [Images](/docs/other/images).

## MCP: create knowledge sources and file articles into them

An AI assistant connected over the MCP server can now create a knowledge source and file the articles it writes into that source. A batch of imported documents then appears on the Knowledge page as one source instead of loose articles under **Created in Ada**.

## What's new

* **Create a source**: [`edit_agent_config`](/mcp/tools/edit-agent-config) accepts a `knowledge_source` entity with `name`, optional `external_id`, and optional `metadata`. Create only; rename and delete stay in the Knowledge API.
* **List sources**: [`list_entities`](/mcp/tools/list-entities) accepts `entity_type='knowledge_sources'` and returns each source's Ada `id`, Knowledge API `external_id`, and deletion `status`.
* **File an article into a source**: [`edit_agent_behavior`](/mcp/tools/edit-agent-behavior) accepts `knowledge_source_id` on knowledge article `created` and `modified` changes. Sources that hold imported articles, are managed by an integration, are a website import, or are being deleted are refused.
* **Dashboard keeps Edit and Delete**: articles written in Ada stay editable in the dashboard whichever source they are filed under, and saving one no longer moves it back to **Created in Ada**.

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