# Release 115

### :sparkles: Highlights

* **Faster time to market:** Launch campaigns and product updates in a fraction of the time. With the Limio MCP, your team can use natural language to bulk-create and update offers, eliminating manual data entry and cutting the time from brief to live.
* **Performance insights on demand:** Ask questions, get answers. Connect your AI assistant to Limio order data and build custom dashboards instantly — no analyst or custom reporting required. Surface the metrics that matter, exactly when you need them.

{% hint style="danger" %}

#### Breaking changes

* Pages that use the Payments Table require a rebuild and republish after adopting this release
* Any custom components importing from @limio/ui-form will now need to import from @limio/form-lite
  {% endhint %}

***

### New Features and Improvements

#### Introducing Limio MCP to work more efficiently

You can now connect AI-powered tools directly to your Limio environment through the new Limio Model Context Protocol (MCP). MCP is an open standard that allows AI assistants, such as Anthropic's Claude, to interact with external systems in a structured, secure way. When connected to the Limio MCP, your team can use natural language to query and manage your product catalogue, which removes manual work and increases speed of delivery.

For our first release of the Limio MCP, these tools are available:

* **Create new offers:** Import new offers in bulk (for example, from a spreadsheet) to prepare for an upcoming campaign or new product launch.
* **Update existing offers:** Bulk change any offer attribute, for example display text or pricing, which can be helpful while preparing for a price rise.
* **List all pages where an offer is published:** Quickly investigate problems and easily see which pages need to be republished when an offer is changed.
* **Query order data:** Use AI to build custom dashboards that report on Limio metrics, for example generate a visual breakdown of revenue by offer and region, or a ready-to-share summary of your best-performing campaigns this quarter.

Each tool is designed to return structured data that AI assistants can reason about and act on.

This is the first release of the MCP server, and additional tools and capabilities will be added in future releases.

Get started with our Limio MCP here: <https://docs.limio.com/ai/mcp-server/mcp-server>

#### Subscription ownership transfer for third-party purchases

A new SDK function, `claimSubscriptionOwnership()`, lets an authenticated subscriber take ownership of a subscription that was purchased anonymously. This scenario is common in B2B subscriptions, where an employee is purchasing a subscription on behalf of the company. This new function allows you to use an unauthenticated checkout to reduce friction, while allowing the subscription user to claim the subscription later, so they can manage the subscription online.

The function will verify the signed-in user's email against the original order, then transfers the subscription and all related records (orders, payment methods, addresses, invoices, billing history and identity) so the subscription is fully usable in self-service immediately.

Use this to build a "claim your subscription" journey in your MMA or post-login flow.&#x20;

Read more about this SDK function here: [claimSubscriptionOwnership()](https://docs.limio.com/developers/limio-sdk/user#claimsubscriptionownership)

#### Simplified hot sync setup

Setting up hot sync previously required modifying your identity provider (IdP) to include the Zuora Account ID as a custom token claim. This can now be done with simple configuration in Zuora and Limio, removing the need for more complicated IdP development work. All that is required is:

1. A custom field on your Zuora Account, such as `LimioExternalId__c`, populated with the user's IdP subject ID
2. Configuration in the Limio settings to add specific fields to the authentication provider's identity claim (see guide below)

With this enabled, Limio resolves the correct Zuora account at login time automatically. No IdP changes are needed. If no matching account is found or if the lookup fails, login continues normally and is never blocked.

#### Auto-renew status now synced from Zuora

Limio now syncs the auto-renew status from Zuora subscriptions during hydration. Previously, changes made to auto-renew directly in Zuora were not reflected in Limio, which could show outdated renewal information on self-service pages.

This is particularly useful if your cancellation workflow sets auto-renew to false in Zuora rather than cancelling the subscription outright.

### Bug Fixes

#### Promo code not applied correctly after choosing an upsell offer

When a promo code was configured to apply to selected offers or add-ons, choosing an upsell offer during checkout caused the discount to stop being reflected in the total and subtotal. The promo code appeared as applied but the prices did not update. Removing and re-adding the code would fix it. This has been resolved, and promo code discounts now persist correctly through upsell selections.

#### Payment method change failing with error

Users were unable to change their payment method in the Payments Table component. Selecting a new payment method resulted in an error. The fix restores the ability to change payment methods using the Payments Table component.

Affected releases: Release 112, 113, 114.

{% hint style="warning" %}
**Note**: Pages containing the payments table must be rebuilt and republished after upgrading to Release 115.
{% endhint %}

#### Subtotal incorrect when both tax and promo code are applied

When a whole-basket promo code was applied alongside tax calculations, the subtotal displayed the post-discount amount rather than the original price before discounts and tax. This made it difficult for customers to understand their savings. The calculation has been corrected so the subtotal now shows the pre-discount, pre-tax amount as expected.

Affected releases: Release 112, 113, 114.

#### Country selection reverting in modular checkout

In environments with Loqate address validation enabled, selecting certain countries in the modular checkout address fields would cause the selection to revert back to the default country. This affected both partner and end-customer checkout flows. The country selector now reliably holds the selected value across all countries.

#### Rich text bullet points not displaying

Bullet points added through the rich text editor were not rendering in either the page builder preview or the published shop pages. This has been fixed, and rich text content with bullet points now displays correctly.

#### Promo codes failing in Salesforce acquisition flows

Applying a promo code in a Limio for Salesforce (LFS) acquisition flow returned an error, even though the same promo code worked correctly in the Limio Shop. This has been resolved, and promo codes now apply successfully in both LFS and the shop.

#### Zuora payment forms not loading in checkout

Zuora payment forms were failing to load during checkout because the country information in the basket was undefined, preventing the system from matching the correct payment form configuration. This has been fixed so the country is correctly resolved before the payment form is generated.

#### Auto refund incorrectly triggered for future-dated cancellations

When the "Automatically refund cancelled subscriptions" setting was enabled, future-dated cancellations that extended beyond the current billing period could incorrectly trigger a refund. The logic has been corrected to only trigger refunds when the preview amount indicates an actual overpayment.

#### Gift code redemption page failing

Attempting to redeem a gift code resulted in a page error because the basket ID was not being passed in the URL. This prevented the redemption page from loading. The basket ID is now correctly included, and gift code redemption works as expected.

#### No error message shown for invalid or redeemed gift codes

When entering an invalid or already-redeemed gift code on the redeem page, no error message was displayed, leaving users with no feedback about why their code was not working. This has been fixed, and a clear error message now appears when a gift code is invalid or has already been redeemed.

#### Orders table displaying incorrect quantity

The orders table showed an incorrect quantity after items were removed from an order. This has been fixed so the displayed quantity accurately reflects the current order contents.

Affected releases: Release 114

#### Price fields showing "Currently unavailable"

Price, amount due, and payment amount fields in the SUBSCRIPTION-INFO and SWITCH-SUBSCRIPTION components were displaying "Currently unavailable" instead of the actual values. This has been resolved, and all price fields now display correctly.

#### Promo code usage count incrementing multiple times per order

Promo code usage was being incremented at multiple stages of the checkout flow (initiation, basket update, and order submission) instead of only once when the order was successfully placed. This meant promo codes with usage limits were consumed two to three times faster than intended, and abandoned checkouts also consumed uses. The usage increment now only occurs on successful order submission.

#### User permissions role displaying "undefined"

Creating a new user role in the permissions settings resulted in the role's ID and label displaying as "undefined." This has been fixed, and newly created roles now display their correct name and identifier.

Affected releases: Release 112, 113, 114.

#### Direct purchase links failing for offers with "+" in the name

Direct purchase links for offers that contained a "+" character in their name caused the checkout page to crash. The URL encoding for the "+" character is now handled correctly, and direct purchase links work when the offer name has a “+” character.

#### Abandoned basket missing email for prefilled checkouts

When a logged-in user went through checkout with their email address prefilled, the abandoned basket record did not capture their email. The basket is now updated with the user's email when it is retrieved in an authenticated context, so abandoned basket records correctly include the email address regardless of how it was entered.

Affected releases: Release 113, 114.

#### Payment method selector displayed extra radio button in Safari

The out-of-the-box Payment Method Selector subcomponent displayed an additional, unintended radio button in the top-left corner of each payment method when viewed in Safari. This was a visual regression that did not appear in Chrome. The extra radio button has been removed and the component now renders consistently across browsers.

Affected releases: Release 114.

#### New orders incorrectly linked to reseller accounts

For customers who always have one Limio customer mapped to one Zuora account (as opposed to one Limio customer mapped to multiple Zuora accounts), and active reseller subscriptions, new orders could be incorrectly associated with the reseller's Zuora account instead of the customer's Zuora account. The fix ensures Limio now uses the customer's account number, which always refers to the main customer account regardless of who the invoice owner is.

#### Non-electronic payment methods no longer synced from Zuora

When a Zuora account had non-electronic payment methods such as cash or cheque, these were being synced into Limio via hot sync. Customers could see these payment methods in their self-service portal and attempt to use them to pay invoices, which would fail. Limio now filters out non-electronic payment methods during hot sync so they are no longer visible to customers.

#### Default payment method sync between Limio and Zuora&#x20;

There was a bug where the default payment method in Limio and Zuora could become out of sync. In this scenario, if a customer tried to pay an invoice with their default payment method, it would use the old default payment method instead of the new default payment method. This issue has been resolved, so Limio and Zuora are always in sync.&#x20;

### Stability and quality improvements

* The order processing system has been refactored internally to improve maintainability and set the foundation for future improvements. Customers should see no change in behaviour, with the exception of clearer error messages when a purchase link references an offer that no longer exists.
* The internal form library powering checkout has been upgraded to a more modern, lightweight implementation. Customers should see no change in behaviour.

{% hint style="warning" %}
**Note**: Any custom components that import directly from @limio/ui-form will need to be migrated to @limio/form-lite before deploying this release.
{% endhint %}

*Please remember to perform a hard refresh in your browser after upgrading your environment.*

<br>
