# 2025-10-29: Quote Service - external prices and mixins support

## Overview

The Quote Service has been extended to support external prices and mixins on product and item levels. This enhancement allows for more flexible quote management with custom pricing and additional product metadata.

Key changes:

* A product can be added to quote more than once
* Added support for the quote creation from carts with external products and prices
* Added support for external prices with the `type` field (INTERNAL/EXTERNAL) on price objects
* Added mixins and metadata support on both product and item levels
* Added new scope requirement `cart.cart_manage_external_prices` for external prices
* Extended PATCH operations to support mixin updates on items and products
* Added the `id` field to media objects

## Modified endpoints

| Endpoint                                                                                                                                                           | Description                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Creating a quote](https://developer.emporix.io/api-references/api-guides/quotes/quote/api-reference/quote-management#post-quote-tenant-quotes)                    | <p>Added the <code>type</code> field to price and product objects.</p><p>Added the <code>cart.cart\_manage\_external\_prices</code> scope for external prices.</p><p>Added mixins and metadata support on item and product levels.</p><p>Added the <code>name</code> and <code>media</code> fields for external products.</p> |
| [Retrieving a single quote](https://developer.emporix.io/api-references/api-guides/quotes/quote/api-reference/quote-management#get-quote-tenant-quotes-quoteid)    | <p>Added the <code>type</code> field to price and product objects in response.</p><p>Added mixins and metadata to item and product objects.</p><p>Added the <code>id</code> field to media object.</p>                                                                                                                        |
| [Retrieving quotes](https://developer.emporix.io/api-references/api-guides/quotes/quote/api-reference/quote-management#get-quote-tenant-quotes)                    | Added the `id` field to media object in response.                                                                                                                                                                                                                                                                             |
| [Partially updating a quote](https://developer.emporix.io/api-references/api-guides/quotes/quote/api-reference/quote-management#patch-quote-tenant-quotes-quoteid) | Added support for mixin operations with new paths: `/items/{itemId}/mixins/{mixinsPath}`, `/items/{itemId}/metadata/mixins/{mixinsPath}`, `/items/{itemId}/product/mixins/{mixinsPath}`, `/items/{itemId}/product/metadata/mixins/{mixinsPath}`.                                                                              |

## New features

### External prices

Prices can now be defined as `INTERNAL` - from Emporix Price Service, or `EXTERNAL` - as custom prices. The `type` field on price objects indicates the price type:

* `INTERNAL`: Price is fetched from the Emporix Price Service using `priceId`, which is a required value.
* `EXTERNAL`: Custom price is provided directly in the request, where `priceId` is not required.

### External products

Products can now be defined as `INTERNAL` - from Emporix Price Service, or `EXTERNAL` - as custom products. For external products:

* The `name` field can be provided as a localized map
* The `media` object can be provided with the `id`, `contentType`, and `url` fields

### Mixins support

Mixins and metadata can now be added to:

* Quote items
* Products within quote items
* Quote level (already supported)

PATCH operations support adding, replacing, and removing mixin values at all these levels.

## Known problems

There are no known problems.
