# 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.


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.emporix.io/changelog/archive/changelog-2025/2025-10-29-quote.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
