> For the complete documentation index, see [llms.txt](https://docs.umbcheckout.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.umbcheckout.net/v17/getting-started/whats-new-in-17.md).

# What's new in 17

What changed in UmbCheckout 17 for Umbraco 17

UmbCheckout 17 brings UmbCheckout to Umbraco 17. The screens, the settings and the way you build a shop are the same as in UmbCheckout 1.x for Umbraco 13. What changed is the technology underneath, the license, and many fixes to how money and baskets are handled.

To move a site from Umbraco 13, see [Upgrading from v13](/v17/getting-started/upgrading-from-v13.md).

### Umbraco 17 and .NET 10

* Requires Umbraco 17.6 or later and .NET 10.
* The backoffice screens are rebuilt for Umbraco 17's backoffice, with the same layout, fields and messages as in v13. They are under **Settings → UmbCheckout**; the payments, invoices and refunds screens are in the **UmbCheckout** section.
* Data is stored with Entity Framework Core, on SQL Server or SQLite. An existing database is adopted on first start: no data is copied or lost.
* You no longer need `app.UseSession()` in `Program.cs`.

### Licensing

* Licenses are an annual subscription for each production domain.
* Every running instance of a production site needs a license. Replica add-ons license the extra instances of a load-balanced site.
* Licensed features work on `localhost` and `*.local` in Debug builds without a license (development mode), and a free development license covers staging sites.
* A licensed site only enables the licensed features for the domains on its license, and shows a banner on the shop when a request isn't licensed.
* The license is checked in the background. A short outage of the license server doesn't switch your features off.

See [Licensing](/v17/getting-started/licensing.md).

### Money and baskets

* Prices and currencies are decided on the server, from the product, at add-to-basket and again at checkout. A changed price is shown to the shopper before they pay.
* Every currency is charged in its own minor unit, including zero-decimal (JPY) and three-decimal (KWD) currencies.
* One Basket per site root culture and currency.
* Quantities and Basket size follow Stripe's limits.
* Shipping rates are offered only in the Basket's currency.

See [Prices, Currencies and Baskets](/v17/configuration/prices-currencies-and-baskets.md).

### Checkout and the Stripe webhook

* A paid Basket is cleared even when the shopper never returns to the success page: the webhook records the payment, and the shopper's next visit clears it. A new notification, `OnPaidBasketClearedNotification`, tells your code.
* The success page clears only the Basket that the returning checkout session paid for.
* The webhook handles each Stripe event once, answers with an error so Stripe retries when a handler fails, and logs a missing webhook secret.
* The webhook works on front-end-only servers of a load-balanced site.

See [Payment Flow / Lifecycle](/v17/payment-providers/payment-providers/stripe/payment-flow-lifecycle.md) and [Stripe Webhook Api](/v17/payment-providers/payment-providers/stripe/services/stripe-webhook-api.md).

### Extending UmbCheckout

* New cancellable **Saving** and **Deleting** notifications, and **Loaded** notifications, let your code change or refuse data going in and change data coming out. See [Extending UmbCheckout](/v17/core-services/extending-umbcheckout.md).
* Every service is a public interface, and the async methods take a `CancellationToken`. See [Cancellation Tokens](/v17/core-services/cancellation-tokens.md).
* You can replace the Stripe webhook controller by subclassing it.

### Other changes

* uSync exports and imports every Stripe setting, and saving the Stripe settings writes the uSync file.
* The Umbraco Forms workflow charges the stored Basket and no longer blocks a thread.
* Configuration and Stripe settings are cached, and cleared on every server of a load-balanced site when they are saved.
* Missing Stripe API keys show a clear message instead of an error page.
* Telemetry is sent in the background and can't slow the site down.

### Breaking changes

See [Upgrading from v13](/v17/getting-started/upgrading-from-v13.md#breaking-changes) for the API changes that affect custom code.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.umbcheckout.net/v17/getting-started/whats-new-in-17.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
