# Deprecations

Source: https://docs.propeller-commerce.com/reference/deprecations/

# Deprecations


Everything on this page is deprecated and still works today. On 1 March 2027 these items are removed, and requests that use them start to fail. Migrate before that date.


This page covers v2 of the GraphQL and REST APIs. Every item listed is flagged as deprecated in the API itself, so you can always verify it against the live schema or the OpenAPI specs. The list was generated from the live APIs on 22 September 2026.

| API | Deprecated items |
|---|---|
| GraphQL | 220 |
| REST | 191 |

## Check your integration

- **GraphQL:** deprecated items carry a `deprecationReason` in the schema. Most GraphQL clients and IDEs show it inline as you write a query, and the [Explorer](/reference/graphql/explorer) surfaces it. Retired queries and mutations are grouped in the Deprecated section of the [GraphQL reference](/reference/graphql).
- **REST:** deprecated endpoints, query parameters and fields carry the `deprecated` flag in the OpenAPI spec and appear as deprecated in the [REST reference](/reference/rest). The REST endpoints column below shows which endpoints send or return each deprecated field. You can also check the [spec files](/reference#machine-readable-resources) directly.
- **Scripts and AI assistants:** the same list is available as [JSON](https://docs.propeller-commerce.com/reference/deprecations.json) and as [Markdown](https://docs.propeller-commerce.com/reference/deprecations.md). Each JSON item holds the API, the item, the REST endpoints it appears in and the replacement or note. The removal date is at the top of the file.

### Check your code with an AI assistant

Give this prompt to an AI coding assistant that can read your code and fetch a URL, such as Claude Code or Cursor. It reports what to change and leaves your code as it is.

```text
Check this codebase for Propeller API deprecations.

1. Fetch https://docs.propeller-commerce.com/reference/deprecations.json. It
   lists every deprecated item in the Propeller GraphQL and REST APIs, the
   REST endpoints each one appears in and what to use instead.
2. Find every GraphQL operation this code sends (queries, mutations and
   fragments in .graphql files, gql tags and strings) and every call to the
   Propeller REST API (paths that start with /v2/).
3. Match them against the list. For GraphQL, match type, field, argument and
   enum value names. For REST, match the endpoint, the query parameters and
   the field names in the request and response bodies of the listed endpoints.
4. Report every match with the file and line, the deprecated item and its
   note. Do not change any code.
5. End with a short list of the changes to make before the removal date given
   in the JSON.
```

## Migrations at a glance

Most deprecations belong to one of the migrations below. Each one is listed in full further down.

| Migration | What to do | Items |
|---|---|---|
| [Shop replaced by Channel](#shop-replaced-by-channel) | Use the `channel` and `channels` queries instead of `shop` and `shops`. Replace `shopId` with `channelId` where the type has one. Where it has none, stop using the field. `shopInvalidateCache` has no replacement. | 32 |
| [siteId no longer used](#siteid-no-longer-used) | Remove the argument. It is already ignored. | 4 |
| [user replaced by Contact and Customer](#user-replaced-by-contact-and-customer) | Use `cartSetContact` or `cartSetCustomer`, and the `contact` and `customer` fields. On carts and tenders, use a contact plus `companyId`, or `customerId`. | 11 |
| [userId filtering on categories removed](#userid-filtering-on-categories-removed) | Remove the argument. User context filtering is no longer supported and the value is ignored. | 3 |
| [Legacy account fields on Company, Contact and Customer](#legacy-account-fields-on-company-contact-and-customer) | Most of these are accepted but never stored. Use the `sources` array for external identifiers and the Company `debtorId`. The note on each item says what applies to it. | 107 |
| [Single-language fields replaced by localized arrays](#single-language-fields-replaced-by-localized-arrays) | Use the plural localized forms: `names`, `descriptions`, `shortDescriptions`, `slugs` and `shortNames`. Default language is derived from the catalog and is no longer accepted on input. | 65 |
| [Legacy date fields replaced by createdAt and lastModifiedAt](#legacy-date-fields-replaced-by-createdat-and-lastmodifiedat) | Use `createdAt` and `lastModifiedAt`, including in search inputs and sort fields. | 25 |
| [Media queries replaced by the media namespace](#media-queries-replaced-by-the-media-namespace) | Use `media.image`, `media.images`, `media.video`, `media.videos`, `media.document` and `media.documents`. | 9 |
| [cost replaced by costPrices](#cost-replaced-by-costprices) | Use `costPrices` with quantity 1. Values sent to the deprecated field are not stored and are not used in calculations. | 9 |
| [Collections replaced by paginated equivalents](#collections-replaced-by-paginated-equivalents) | Use `companiesPaginated`, `usersPaginated`, `contactsPaginated` and `customersPaginated`. | 5 |
| [Numeric ids replaced by uuid or code](#numeric-ids-replaced-by-uuid-or-code) | Use `uuid`, `code`, `categoryId` or `parentUuid` as noted per field. | 13 |
| [Mutations replaced by variants that return the entity](#mutations-replaced-by-variants-that-return-the-entity) | Use the `AndReturn` variants, which return the updated Bundle or Carrier instead of a boolean. | 4 |
| [companySearch replaced by companies](#companysearch-replaced-by-companies) | Use the `companies` query instead of `companySearch`. The index maintenance mutations have no replacement. | 5 |
| [source and sourceId replaced by the sources array](#source-and-sourceid-replaced-by-the-sources-array) | Use the `sources` array. On orders, `externalId` is replaced by `sources`. | 9 |
| [Order status flags no longer used](#order-status-flags-no-longer-used) | `isExportable`, `isConfirmable` and `isArchivable` are unused. Remove them from reads and writes. | 21 |
| [class replaced by type](#class-replaced-by-type) | On products and clusters, read `type` instead of `class`. Keep using the `class` search filter. | 5 |
| [taxCode replaced by taxCodeValue](#taxcode-replaced-by-taxcodevalue) | Use `taxCodeValue`. | 6 |
| [shippingCost replaced by the business rule builder](#shippingcost-replaced-by-the-business-rule-builder) | Configure shipping logic with the business rule builder, which also covers more complex carrier cases. | 5 |
| [Inventory response fields no longer used](#inventory-response-fields-no-longer-used) | `messages` and `total` on inventory responses are no longer populated. | 7 |
| [Sort values and sortable field names](#sort-values-and-sortable-field-names) | Use uppercase `ASC` and `DESC`. Sortable fields become `createdAt` and `lastModifiedAt`. | 2 |
| [Order address operations renamed](#order-address-operations-renamed) | Use `orderAddresses` and `orderAddressUpdate`. | 2 |
| [Authentication and password reset](#authentication-and-password-reset) | Use `triggerPasswordSendResetEmailEvent`, and pass the `input` parameter on `passwordResetLink`. The announced replacement for `logout` is not available yet. | 4 |
| [Other individual deprecations](#other-individual-deprecations) | Replacements are listed per item. | 58 |

## Full list

Each row stands on its own: the note gives the replacement for that item or says the item can be dropped. For a REST field, the REST endpoints column names the endpoints that send or return it.

### Shop replaced by Channel

Use the `channel` and `channels` queries instead of `shop` and `shops`. Replace `shopId` with `channelId` where the type has one. Where it has none, stop using the field. `shopInvalidateCache` has no replacement.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `BusinessRule.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `BusinessRuleCreateInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `BusinessRuleSearchInput.shopId` | Use `channelId` instead. |  |
| GraphQL | Field | `Cart.shopId` | Shop is deprecated and will be removed in the future. Use channelId instead |  |
| GraphQL | Field | `Channel.shop` | No replacement. The Channel itself replaces the shop. |  |
| GraphQL | Input field | `CreateSurchargeInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `CreateWarehouseInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Field | `Order.shopId` | Use channelId instead |  |
| GraphQL | Input field | `OrderCreateInput.shopId` | Use channelId instead |  |
| GraphQL | Argument | `Query.tax(shopId:)` | No channel equivalent here. Stop using it. |  |
| GraphQL | Query | `shop` | Use the `channel` query. |  |
| GraphQL | Mutation | `shopInvalidateCache` | No replacement. |  |
| GraphQL | Query | `shops` | Use the `channels` query. |  |
| GraphQL | Field | `Surcharge.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Field | `Tax.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `TaxCreateInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `TaxSearchInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Input field | `TaxUpdateInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Field | `Tender.shopId` | Deprecated, please use channelId instead |  |
| GraphQL | Input field | `UpdateSurchargeInput.shopId` | No channel equivalent here. Stop using it. |  |
| GraphQL | Field | `Warehouse.shopId` | No channel equivalent here. Stop using it. |  |
| REST | Property | `Channel.shopId` | No replacement. The Channel itself replaces the shop. |  |
| REST | Property | `CreateSurchargeInput.shopId` | No channel equivalent here. Stop using it. | Sent to `POST /v2/surcharges` |
| REST | Parameter | `GET /v2/taxes ?shopId` | No channel equivalent here. Stop using it. |  |
| REST | Property | `Order.shopId` | [DEPRECATED] Shop is deprecated and will be removed in a future version. Use channelId instead. | Returned by `POST /v2/orders`, `GET /v2/orders/id/{id}`, `PATCH /v2/orders/id/{id}` and 1 more |
| REST | Property | `OrderCreateInput.shopId` | [DEPRECATED] Shop is deprecated and will be removed in a future version. Use channelId instead. | Sent to `POST /v2/orders` |
| REST | Property | `Surcharge.shopId` | No channel equivalent here. Stop using it. | Returned by `GET /v2/surcharges`, `POST /v2/surcharges`, `GET /v2/surcharges/{id}` and 3 more |
| REST | Property | `Tax.shopId` | No channel equivalent here. Stop using it. | Returned by `GET /v2/taxes` |
| REST | Property | `TaxCreateInput.shopId` | No channel equivalent here. Stop using it. | Sent to `POST /v2/taxes` |
| REST | Property | `TaxResponse.shopId` | No channel equivalent here. Stop using it. | Returned by `POST /v2/taxes`, `GET /v2/taxes/{id}`, `PATCH /v2/taxes/{id}` and 1 more |
| REST | Property | `TaxUpdateInputDto.shopId` | No channel equivalent here. Stop using it. | Sent to `PATCH /v2/taxes/{id}` |
| REST | Property | `UpdatePaymentDTO.shopId` | No channel equivalent here. Stop using it. | Sent to `PATCH /v2/surcharges/{id}` |

### siteId no longer used

Remove the argument. It is already ignored.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Input field | `EmailEventInput.siteId` | SiteId is no longer needed |  |
| GraphQL | Argument | `Mutation.logout(siteId:)` | siteId is no longer used |  |
| GraphQL | Argument | `Mutation.startSession(siteId:)` | siteId is no longer used |  |
| GraphQL | Field | `Tender.siteId` | Deprecated in favor of channelId |  |

### user replaced by Contact and Customer

Use `cartSetContact` or `cartSetCustomer`, and the `contact` and `customer` fields. On carts and tenders, use a contact plus `companyId`, or `customerId`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Cart.user` | Deprecated in favor of `contact` or `customer` |  |
| GraphQL | Field | `Cart.userId` | This field will be removed in a future release, use contact+companyId or customerId instead |  |
| GraphQL | Mutation | `cartSetUser` | Will be removed in the future, please use `cartSetContact` or `cartSetCustomer` mutations instead. |  |
| GraphQL | Input field | `CartSetUserInput.userId` | This field will be removed in a future release, use contact/companyId or customerId instead. |  |
| GraphQL | Input field | `CartStartInput.userId` | This field will be removed in a future release, use contact/companyId or customerId instead. |  |
| GraphQL | Field | `ICart.user` | Deprecated in favor of `contact` or `customer` |  |
| GraphQL | Field | `Tender.user` | Deprecated in favor of `contact` or `customer` |  |
| GraphQL | Field | `Tender.userId` | This field will be removed in a future release, use contact+companyId or customerId instead |  |
| GraphQL | Input field | `TenderStartInput.userId` | userId is deprecated, use contactId or customerId instead. If provided together with contactId or customerId, userId will be ignored. |  |
| REST | Property | `Cart.userId` | Legacy user identifier (deprecated). Previously used for user association. Use contactId with companyId for B2B customers or customerId for B2C customers instead. | Returned by `POST /v2/carts`, `GET /v2/carts/{id}`, `PATCH /v2/carts/{id}` and 1 more |
| REST | Property | `CartStartInput.userId` | User identifier for cart association (deprecated). Legacy field for associating carts with user accounts. Use contactId/companyId for B2B scenarios or customerId for B2C scenarios instead. | Sent to `POST /v2/carts` |

### userId filtering on categories removed

Remove the argument. User context filtering is no longer supported and the value is ignored.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Argument | `Category.categories(userId:)` | User context filtering is no longer supported. This parameter is ignored. |  |
| GraphQL | Argument | `Query.categories(userId:)` | User context filtering is no longer supported. This parameter is ignored. |  |
| GraphQL | Argument | `Query.category(userId:)` | User context filtering is no longer supported. This parameter is ignored. |  |

### Legacy account fields on Company, Contact and Customer

Most of these are accepted but never stored. Use the `sources` array for external identifiers and the Company `debtorId`. The note on each item says what applies to it.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Company.inheritProductList` | No replacement announced. |  |
| GraphQL | Field | `Company.path` | No replacement announced. |  |
| GraphQL | Field | `Company.slug` | No replacement announced. |  |
| GraphQL | Field | `CompanyContactSearch.debtorId` | Deprecated in favor of company debtorId |  |
| GraphQL | Field | `Contact.debtorId` | Deprecated in favor of company debtorId |  |
| REST | Property | `CompanyBulkItemDto.authorizeId` | Legacy authorization ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.budget` | Legacy budget setting field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.budgetInherit` | Legacy budget inherit field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.company` | Legacy company field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.defaultobjectId` | Legacy default object ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.department` | Legacy department field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.inheritOrderList` | Legacy inherit order list field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.inheritProductList` | No replacement announced. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.office` | Legacy office field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.orderListAllowAll` | Legacy order list allow all field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.orderListManagerId` | Legacy order list manager ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.parent` | No replacement announced. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.path` | No replacement announced. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.slug` | No replacement announced. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.source` | Legacy source system identifier for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.sourceId` | Legacy source system type ID for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyBulkItemDto.userManagerId` | Legacy user manager ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies/bulk/{lookupKey}` |
| REST | Property | `CompanyCreateDto.authorizeId` | Legacy authorization ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.budget` | Legacy budget setting field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.budgetInherit` | Legacy budget inherit field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.company` | Legacy company field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.defaultobjectId` | Legacy default object ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.department` | Legacy department field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.inheritOrderList` | Legacy inherit order list field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.inheritProductList` | No replacement announced. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.office` | Legacy office field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.orderListAllowAll` | Legacy order list allow all field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.orderListManagerId` | Legacy order list manager ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.parent` | No replacement announced. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.path` | No replacement announced. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.slug` | No replacement announced. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.source` | Legacy source system identifier for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.sourceId` | Legacy source system type ID for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyCreateDto.userManagerId` | Legacy user manager ID field for backward compatibility. Not stored in database. | Sent to `POST /v2/companies` |
| REST | Property | `CompanyUpdateDto.authorizeId` | Legacy authorization ID field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.budget` | Legacy budget setting field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.budgetInherit` | Legacy budget inherit field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.company` | Legacy company field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.defaultobjectId` | Legacy default object ID field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.department` | Legacy department field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.inheritOrderList` | Legacy inherit order list field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.inheritProductList` | No replacement announced. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.office` | Legacy office field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.orderListAllowAll` | Legacy order list allow all field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.orderListManagerId` | Legacy order list manager ID field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.parent` | No replacement announced. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.path` | No replacement announced. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.slug` | No replacement announced. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.source` | Legacy source system identifier for backward compatibility. Use 'sources' array instead. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.sourceId` | Legacy source system type ID for backward compatibility. Use 'sources' array instead. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `CompanyUpdateDto.userManagerId` | Legacy user manager ID field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/companies/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactBulkItemDto.abbreviation` | Legacy contact abbreviation field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.debtorId` | External debtor system identifier for financial and billing integration. Deprecated in favor of company debtorId. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.parent` | No replacement announced. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.source` | Deprecated: use `sources` instead. When `sources` is not sent, this value and `sourceId` are stored as one entry in `sources`. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.sourceId` | Deprecated: use `sources` instead. When `sources` is not sent, `source` and this value are stored as one entry in `sources`. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactBulkItemDto.title` | Legacy contact title field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts/bulk/{lookupKey}` |
| REST | Property | `ContactCreateDto.abbreviation` | Legacy contact abbreviation field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.debtorId` | External debtor system identifier for financial and billing integration. Deprecated in favor of company debtorId. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.source` | Deprecated: use `sources` instead. When `sources` is not sent, this value and `sourceId` are stored as one entry in `sources`. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.sourceId` | Deprecated: use `sources` instead. When `sources` is not sent, `source` and this value are stored as one entry in `sources`. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactCreateDto.title` | Legacy contact title field for backward compatibility. Not stored in database. | Sent to `POST /v2/contacts` |
| REST | Property | `ContactUpdateDto.abbreviation` | Legacy contact abbreviation field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.debtorId` | External debtor system identifier for financial and billing integration. Deprecated in favor of company debtorId. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.parent` | No replacement announced. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.source` | Deprecated: use `sources` instead. When `sources` is not sent, this value and `sourceId` are stored as one entry in `sources`. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.sourceId` | Deprecated: use `sources` instead. When `sources` is not sent, `source` and this value are stored as one entry in `sources`. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `ContactUpdateDto.title` | Legacy contact title field for backward compatibility. Not stored in database. | Sent to `PATCH /v2/contacts/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerBulkItemDto.abbreviation` | Legacy customer abbreviation field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.abbreviation`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.language` | Language preference for the customer. Deprecated, use primaryLanguage instead. | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.parent` | Parent customer or company reference for hierarchical relationships. Deprecated - use company relationships instead (as documented for `CustomerCreateDto.parent`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.pricelistAmount`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.pricelistPercentage`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.source` | Source name for the customer. Deprecated, use sources instead. | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.sourceId` | Source ID for the customer. Deprecated, use sources instead. | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.ssn`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerBulkItemDto.title` | Legacy customer title field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.title`). | Sent to `POST /v2/customers/bulk/{lookupKey}` |
| REST | Property | `CustomerCreateDto.abbreviation` | Legacy customer abbreviation field for backward compatibility. Not stored in database. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.parent` | Parent customer or company reference for hierarchical relationships. Deprecated - use company relationships instead. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.source` | Legacy source system identifier for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.sourceId` | Legacy source system entity ID for backward compatibility. Use 'sources' array instead. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerCreateDto.title` | Legacy customer title field for backward compatibility. Not stored in database. | Sent to `POST /v2/customers` |
| REST | Property | `CustomerUpdateDto.abbreviation` | Legacy customer abbreviation field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.abbreviation`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.parent` | Parent customer or company reference for hierarchical relationships. Deprecated - use company relationships instead (as documented for `CustomerCreateDto.parent`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.pricelistAmount` | Legacy price list amount field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.pricelistAmount`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.pricelistPercentage` | Legacy price list percentage field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.pricelistPercentage`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.source` | Source name for the customer. Deprecated, use sources instead. | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.sourceId` | Source ID for the customer. Deprecated, use sources instead. | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.ssn` | Legacy social security number field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.ssn`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |
| REST | Property | `CustomerUpdateDto.title` | Legacy customer title field for backward compatibility. Not stored in database (as documented for `CustomerCreateDto.title`). | Sent to `PATCH /v2/customers/{lookupKey}/{lookupValue}` |

### Single-language fields replaced by localized arrays

Use the plural localized forms: `names`, `descriptions`, `shortDescriptions`, `slugs` and `shortNames`. Default language is derived from the catalog and is no longer accepted on input.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Category.description` | Use `descriptions` instead of `description`. |  |
| GraphQL | Field | `Category.name` | Use `names` instead of `name`. |  |
| GraphQL | Field | `Category.shortDescription` | Use `shortDescriptions` instead of `shortDescription`. |  |
| GraphQL | Field | `Category.slug` | Use `slugs` instead of `slug`. |  |
| GraphQL | Input field | `CategorySearchInput.slug` | Use `slugs` instead of `slug`. |  |
| GraphQL | Field | `Cluster.defaultLanguage` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `Cluster.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `ClusterCategorySearchInput.slug` | Use `slugs` instead of `slug`. |  |
| GraphQL | Field | `ClusterConfigSetting.name` | Use 'attributeName' field instead. This field will be removed in a future version. |  |
| GraphQL | Input field | `ClusterCreateInput.defaultLanguage` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `ClusterOptionCreateInput.defaultLanguage` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `ClusterOptionUpdateInput.defaultLanguage` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `CreateCategoryInput.defaultLanguage` | Default language is now derived from the catalogue and no longer accepted on this input. |  |
| GraphQL | Input field | `CreateCategoryInput.description` | Use `descriptions` instead of `description`. Only one of `description` or `descriptions` is allowed. |  |
| GraphQL | Input field | `CreateCategoryInput.name` | Use `names` instead of `name`. Only one of `name` or `names` is allowed. |  |
| GraphQL | Input field | `CreateCategoryInput.shortDescription` | Use `shortDescriptions` instead of `shortDescription`. Only one of `shortDescription` or `shortDescriptions` is allowed. |  |
| GraphQL | Input field | `CreateCategoryInput.slug` | Use `slugs` instead of `slug`. Only one of `slug` or `slugs` is allowed. |  |
| GraphQL | Input field | `CreateProductInput.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `CreateProductInput.shortName` | Use shortNames instead |  |
| GraphQL | Field | `IBaseProduct.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `ICluster.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `IProduct.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `IProduct.shortName` | Use shortNames instead |  |
| GraphQL | Field | `Product.defaultLanguage` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `Product.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Field | `Product.shortName` | Use shortNames instead |  |
| GraphQL | Input field | `ProductCategorySearchInput.slug` | Use `slugs` instead of `slug`. |  |
| GraphQL | Input field | `UpdateCategoryInput.defaultLanguage` | Default language is now derived from the catalogue and no longer accepted on this input. |  |
| GraphQL | Input field | `UpdateCategoryInput.description` | Use `descriptions` instead of `description`. Only one of `description` or `descriptions` is allowed. |  |
| GraphQL | Input field | `UpdateCategoryInput.name` | Use `names` instead of `name`. Only one of `name` or `names` is allowed. |  |
| GraphQL | Input field | `UpdateCategoryInput.shortDescription` | Use `shortDescriptions` instead of `shortDescription`. Only one of `shortDescription` or `shortDescriptions` is allowed. |  |
| GraphQL | Input field | `UpdateCategoryInput.slug` | Use `slugs` instead of `slug`. Only one of `slug` or `slugs` is allowed. |  |
| GraphQL | Input field | `UpdateProductInput.language` | No longer used, defaults to 'NL' |  |
| GraphQL | Input field | `UpdateProductInput.shortName` | Use shortNames instead |  |
| REST | Property | `BulkCategoryDto.defaultLanguage` | Deprecated and ignored: the default language is derived from the catalogue, so a value sent here is not stored. | Sent to `POST /v2/categories/bulk/{lookupKey}` |
| REST | Property | `BulkCategoryDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/categories/bulk/{lookupKey}` |
| REST | Property | `BulkClusterConfigDto.defaultLanguage` | Legacy default-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clustersconfig/bulk/{lookupKey}` |
| REST | Property | `BulkClusterConfigDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clustersconfig/bulk/{lookupKey}` |
| REST | Property | `BulkClusterDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clusters/bulk/{lookupKey}` |
| REST | Property | `BulkClusterOptionDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clusters/{lookupKey}/{key}/options/bulk` and `POST /v2/clusters/bulk/{lookupKey}` |
| REST | Property | `BulkProductDto.language` | Language code (deprecated - do not use in new implementations) | Sent to `POST /v2/clusters/{lookupKey}/{key}/options/bulk`, `POST /v2/clusters/{lookupKey}/{key}/products/bulk`, `POST /v2/clusters/bulk/{lookupKey}` and 1 more |
| REST | Property | `BulkProductDto.shortName` | Single-language short label shown when the full name is too long. Superseded by the localized short names field. | Sent to `POST /v2/clusters/{lookupKey}/{key}/options/bulk`, `POST /v2/clusters/{lookupKey}/{key}/products/bulk`, `POST /v2/clusters/bulk/{lookupKey}` and 1 more |
| REST | Property | `CreateCategoryDto.defaultLanguage` | Deprecated and ignored: the default language is derived from the catalogue, so a value sent here is not stored. | Sent to `POST /v2/categories` |
| REST | Property | `CreateCategoryDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/categories` |
| REST | Property | `CreateClusterConfigDto.defaultLanguage` | Default language code (deprecated - do not use in new implementations) | Sent to `POST /v2/clustersconfig` |
| REST | Property | `CreateClusterConfigDto.language` | Language code (deprecated - do not use in new implementations) | Sent to `POST /v2/clustersconfig` |
| REST | Property | `CreateClusterDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clusters` |
| REST | Property | `CreateClusterOptionDto.defaultLanguage` | Default language code (deprecated - do not use in new implementations) | Sent to `POST /v2/clusters/{lookupKey}/{key}/options` |
| REST | Property | `CreateClusterOptionDto.language` | Language code (deprecated - do not use in new implementations) | Sent to `POST /v2/clusters/{lookupKey}/{key}/options` |
| REST | Property | `CreateProductDto.defaultLanguage` | Legacy default-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clusteroptions/{lookupKey}/{key}/products`, `POST /v2/clusters/{lookupKey}/{key}/products` and `POST /v2/products` |
| REST | Property | `CreateProductDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/clusteroptions/{lookupKey}/{key}/products`, `POST /v2/clusters/{lookupKey}/{key}/products` and `POST /v2/products` |
| REST | Property | `CreateProductDto.shortName` | Single-language short label shown when the full name is too long. Superseded by the localized short names field. | Sent to `POST /v2/clusteroptions/{lookupKey}/{key}/products`, `POST /v2/clusters/{lookupKey}/{key}/products` and `POST /v2/products` |
| REST | Property | `ParentInput.language` | Deprecated and ignored: the parent is found by `id`, or by `source` and `sourceId`. | Sent to `POST /v2/companies`, `PATCH /v2/companies/{lookupKey}/{lookupValue}`, `POST /v2/companies/bulk/{lookupKey}` and 8 more |
| REST | Property | `ParentReferenceDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `POST /v2/categories`, `PATCH /v2/categories/{lookupKey}/{key}`, `POST /v2/categories/bulk/{lookupKey}` and 14 more |
| REST | Property | `UpdateCategoryDto.defaultLanguage` | Deprecated and ignored: the default language is derived from the catalogue, so a value sent here is not stored. | Sent to `PATCH /v2/categories/{lookupKey}/{key}` |
| REST | Property | `UpdateCategoryDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `PATCH /v2/categories/{lookupKey}/{key}` |
| REST | Property | `UpdateClusterConfigDto.defaultLanguage` | Default language code (deprecated - do not use in new implementations) | Sent to `PATCH /v2/clustersconfig/{lookupKey}/{key}` |
| REST | Property | `UpdateClusterConfigDto.language` | Language code (deprecated - do not use in new implementations) | Sent to `PATCH /v2/clustersconfig/{lookupKey}/{key}` |
| REST | Property | `UpdateClusterDto.defaultLanguage` | Legacy default-language hint retained for backward compatibility; use the localized fields instead. | Sent to `PATCH /v2/clusters/{lookupKey}/{key}` |
| REST | Property | `UpdateClusterDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `PATCH /v2/clusters/{lookupKey}/{key}` |
| REST | Property | `UpdateClusterOptionDto.defaultLanguage` | Default language code (deprecated - do not use in new implementations) | Sent to `PATCH /v2/clusters/{lookupKey}/{key}/options/{optionId}` |
| REST | Property | `UpdateClusterOptionDto.language` | Language code (deprecated - do not use in new implementations) | Sent to `PATCH /v2/clusters/{lookupKey}/{key}/options/{optionId}` |
| REST | Property | `UpdateProductDto.defaultLanguage` | Legacy default-language hint retained for backward compatibility; use the localized fields instead. | Sent to `PATCH /v2/clusteroptions/{lookupKey}/{key}/products/{productId}`, `PATCH /v2/clusters/{lookupKey}/{key}/products/{productId}` and `PATCH /v2/products/{lookupKey}/{key}` |
| REST | Property | `UpdateProductDto.language` | Legacy single-language hint retained for backward compatibility; use the localized fields instead. | Sent to `PATCH /v2/clusteroptions/{lookupKey}/{key}/products/{productId}`, `PATCH /v2/clusters/{lookupKey}/{key}/products/{productId}` and `PATCH /v2/products/{lookupKey}/{key}` |
| REST | Property | `UpdateProductDto.shortName` | Single-language short label shown when the full name is too long. Superseded by the localized short names field. | Sent to `PATCH /v2/clusteroptions/{lookupKey}/{key}/products/{productId}`, `PATCH /v2/clusters/{lookupKey}/{key}/products/{productId}` and `PATCH /v2/products/{lookupKey}/{key}` |

### Legacy date fields replaced by createdAt and lastModifiedAt

Use `createdAt` and `lastModifiedAt`, including in search inputs and sort fields.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Input field | `CategorySearchInput.dateCreatedFrom` | Use `createdAtFrom` instead of `dateCreatedFrom`. |  |
| GraphQL | Input field | `CategorySearchInput.dateCreatedTo` | Use `createdAtTo` instead of `dateCreatedTo`. |  |
| GraphQL | Input field | `CategorySearchInput.dateModifiedFrom` | Use `lastModifiedAtFrom` instead of `dateModifiedFrom`. |  |
| GraphQL | Input field | `CategorySearchInput.dateModifiedTo` | Use `lastModifiedAtTo` instead of `dateModifiedTo`. |  |
| GraphQL | Enum value | `CategorySortableFields.dateChanged` | Use "lastModifiedAt" instead |  |
| GraphQL | Enum value | `CategorySortableFields.dateCreated` | Use "createdAt" instead |  |
| GraphQL | Input field | `ClusterCategorySearchInput.dateCreatedFrom` | Use `createdAtFrom` instead of `dateCreatedFrom`. |  |
| GraphQL | Input field | `ClusterCategorySearchInput.dateCreatedTo` | Use `createdAtTo` instead of `dateCreatedTo`. |  |
| GraphQL | Input field | `ClusterCategorySearchInput.dateModifiedFrom` | Use `lastModifiedAtFrom` instead of `dateModifiedFrom`. |  |
| GraphQL | Input field | `ClusterCategorySearchInput.dateModifiedTo` | Use `lastModifiedAtTo` instead of `dateModifiedTo`. |  |
| GraphQL | Field | `Inventory.dateModified` | Use lastModifiedAt instead |  |
| GraphQL | Field | `InventoryResponse.dateModified` | Use lastModifiedAt instead |  |
| GraphQL | Field | `Order.date` | Deprecated in favour of createdAt |  |
| GraphQL | Input field | `ProductCategorySearchInput.dateCreatedFrom` | Use `createdAtFrom` instead of `dateCreatedFrom`. |  |
| GraphQL | Input field | `ProductCategorySearchInput.dateCreatedTo` | Use `createdAtTo` instead of `dateCreatedTo`. |  |
| GraphQL | Input field | `ProductCategorySearchInput.dateModifiedFrom` | Use `lastModifiedAtFrom` instead of `dateModifiedFrom`. |  |
| GraphQL | Input field | `ProductCategorySearchInput.dateModifiedTo` | Use `lastModifiedAtTo` instead of `dateModifiedTo`. |  |
| REST | Property | `CategorySearchRestDto.dateCreated` | Deprecated: use `createdAt` instead. Date range for creation date filtering | Sent to `POST /v2/categories/search` |
| REST | Property | `CategorySearchRestDto.dateModified` | Deprecated: use `lastModifiedAt` instead. Date range for modification date filtering | Sent to `POST /v2/categories/search` |
| REST | Property | `ClusterSearchRestDto.dateCreated` | Deprecated: use `createdAt` instead. Date range for creation date filtering | Sent to `POST /v2/clusters/search` |
| REST | Property | `ClusterSearchRestDto.dateModified` | Deprecated: use `lastModifiedAt` instead. Date range for modification date filtering | Sent to `POST /v2/clusters/search` |
| REST | Property | `Inventory.dateModified` | [Deprecated] Last modification timestamp. Use lastModifiedAt instead. | Returned by `GET /v2/inventory/id/{id}`, `PATCH /v2/inventory/id/{id}`, `DELETE /v2/inventory/id/{id}` and 1 more |
| REST | Property | `Order.date` | Legacy order creation timestamp. Deprecated field previously used for order creation time. Use 'createdAt' field instead for accurate order timing information. | Returned by `POST /v2/orders`, `GET /v2/orders/id/{id}`, `PATCH /v2/orders/id/{id}` and 1 more |
| REST | Property | `ProductSearchRestDto.dateCreated` | Deprecated: use `createdAt` instead. Date range for creation date filtering | Sent to `POST /v2/products/search` |
| REST | Property | `ProductSearchRestDto.dateModified` | Deprecated: use `lastModifiedAt` instead. Date range for modification date filtering | Sent to `POST /v2/products/search` |

### Media queries replaced by the media namespace

Use `media.image`, `media.images`, `media.video`, `media.videos`, `media.document` and `media.documents`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Query | `mediaDocument` | Deprecated in favor of `media.document` |  |
| GraphQL | Query | `mediaDocuments` | Deprecated in favor of `media.documents` |  |
| GraphQL | Query | `mediaImage` | Deprecated in favor of `media.image` |  |
| GraphQL | Query | `mediaImages` | Deprecated in favor of `media.images` |  |
| GraphQL | Query | `mediaVideo` | Deprecated in favor of `media.video` |  |
| GraphQL | Query | `mediaVideos` | Deprecated in favor of `media.videos` |  |
| GraphQL | Field | `Product.mediaDocuments` | Deprecated in favor of `media.documents` |  |
| GraphQL | Field | `Product.mediaImages` | Deprecated in favor of `media.images` |  |
| GraphQL | Field | `Product.mediaVideos` | Deprecated in favor of `media.videos` |  |

### cost replaced by costPrices

Use `costPrices` with quantity 1. Values sent to the deprecated field are not stored and are not used in calculations.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Price.cost` | Deprecated in favor of using costPrices (quantity 1) |  |
| GraphQL | Input field | `PriceCreateInput.cost` | Deprecated in favor of costPrices, note provided value will not be stored or used in calculations |  |
| GraphQL | Input field | `PriceSearchInput.cost` | Deprecated in favor of costPrices |  |
| GraphQL | Enum value | `PriceSortField.COST_PRICE` | Deprecated in favor of price.costPrices. Price query itself can't be sorted on price.cost. Input will be ignored. |  |
| GraphQL | Input field | `PriceUpdateInput.cost` | Deprecated in favor of costPrices, note provided value will not be stored or used in calculations |  |
| REST | Property | `PriceBulkInput.cost` | Product acquisition cost for margin calculations. The cost incurred to acquire or produce the product, used for profit margin analysis, pricing decisions, and financial reporting. Essential for maintaining profitable pricing strategies. ["Deprecated in favor of costPrices"] | Sent to `POST /v2/prices/bulk` |
| REST | Property | `PriceCreateInput.cost` | Product acquisition cost for margin calculations. The cost incurred to acquire or produce the product, used for profit margin analysis, pricing decisions, and financial reporting. Essential for maintaining profitable pricing strategies. ["Deprecated in favor of costPrices"] | Sent to `POST /v2/prices` |
| REST | Property | `PriceSearchInput.cost` | Filter by cost price range. Cost price represents the acquisition cost for margin calculations and pricing decisions. [Deprecated in favor of costPrices] | Sent to `POST /v2/prices/search` |
| REST | Property | `PriceUpdateDTO.cost` | Product acquisition cost for margin calculations. The cost incurred to acquire or produce the product, used for profit margin analysis, pricing decisions, and financial reporting. Essential for maintaining profitable pricing strategies. ["Deprecated in favor of costPrices"] | Sent to `PATCH /v2/prices/{id}` |

### Collections replaced by paginated equivalents

Use `companiesPaginated`, `usersPaginated`, `contactsPaginated` and `customersPaginated`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Orderlist.companies` | Use companiesPaginated. |  |
| GraphQL | Field | `Orderlist.users` | Use usersPaginated. |  |
| GraphQL | Field | `Pricesheet.companies` | Use companiesPaginated. |  |
| GraphQL | Field | `Pricesheet.contacts` | Use contactsPaginated. |  |
| GraphQL | Field | `Pricesheet.customers` | Use customersPaginated. |  |

### Numeric ids replaced by uuid or code

Use `uuid`, `code`, `categoryId` or `parentUuid` as noted per field.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Category.id` | Use categoryId instead |  |
| GraphQL | Field | `Category.parentId` | Use parentUuid instead |  |
| GraphQL | Field | `CategoryItemOperationResult.directoryId` | Use the 'key' field instead. This field is maintained for backward compatibility with legacy API. |  |
| GraphQL | Field | `Channel.channelId` | Use id instead |  |
| GraphQL | Field | `Cluster.sku` | Use 'code' instead. Returns the same value as 'code' for clusters. |  |
| GraphQL | Field | `ClusterConfigSetting.id` | Use `uuid` instead. |  |
| GraphQL | Input field | `ClusterCreateInput.sku` | Use 'code' instead |  |
| GraphQL | Field | `ITenderBaseItem.id` | Deprecate, please use uuid instead |  |
| GraphQL | Field | `TenderBaseItem.id` | Deprecate, please use uuid instead |  |
| GraphQL | Field | `TenderMainItem.id` | Deprecated, please use uuid instead |  |
| REST | Property | `BulkClusterDto.sku` | Deprecated: use `code` instead. Clusters have no SKU of their own, so a value sent here is stored as the cluster `code`. | Sent to `POST /v2/clusters/bulk/{lookupKey}` |
| REST | Property | `CreateClusterDto.sku` | Deprecated: use `code` instead. Clusters have no SKU of their own, so a value sent here is stored as the cluster `code`. | Sent to `POST /v2/clusters` |
| REST | Property | `UpdateClusterDto.sku` | Deprecated: use `code` instead. Clusters have no SKU of their own, so a value sent here is stored as the cluster `code`. | Sent to `PATCH /v2/clusters/{lookupKey}/{key}` |

### Mutations replaced by variants that return the entity

Use the `AndReturn` variants, which return the updated Bundle or Carrier instead of a boolean.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Mutation | `bundleAddItems` | Use bundleAddItemsAndReturnBundle instead |  |
| GraphQL | Mutation | `bundleRemoveItem` | Use bundleRemoveItemAndReturnBundle instead |  |
| GraphQL | Mutation | `carrierAssignWarehouse` | Use `carrierAssignWarehouseAndReturnCarrier` instead. |  |
| GraphQL | Mutation | `carrierUnassignWarehouse` | Use `carrierUnassignWarehouseAndReturnCarrier` instead. |  |

### companySearch replaced by companies

Use the `companies` query instead of `companySearch`. The index maintenance mutations have no replacement.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Query | `companySearch` | Use the `companies` query. |  |
| GraphQL | Mutation | `companySearchCleanupOrphanedIndices` | No replacement. |  |
| GraphQL | Mutation | `companySearchFixAliasWriteIndex` | No replacement. |  |
| GraphQL | Mutation | `companySearchIndexUpdateMapping` | No replacement. |  |
| GraphQL | Mutation | `companySearchReindex` | No replacement. |  |

### source and sourceId replaced by the sources array

Use the `sources` array. On orders, `externalId` is replaced by `sources`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Input field | `BaseProductSearchInput.sourceIds_deprecated` | Use source and sourceIds combination instead |  |
| GraphQL | Input field | `CategoryBaseProductsSearchInput.sourceIds_deprecated` | Use source and sourceIds combination instead |  |
| GraphQL | Input field | `CategoryBaseProductsSearchInput.sourceNames_deprecated` | Use source and sourceIds combination instead |  |
| GraphQL | Field | `Order.externalId` | Use sources instead |  |
| GraphQL | Input field | `OrderCreateInput.externalId` | Use sources instead |  |
| GraphQL | Input field | `OrderUpdateInput.externalId` | Use sources instead |  |
| REST | Property | `Order.externalId` | Use sources instead (as documented for GraphQL `Order.externalId`). | Returned by `POST /v2/orders`, `GET /v2/orders/id/{id}`, `PATCH /v2/orders/id/{id}` and 1 more |
| REST | Property | `OrderCreateInput.externalId` | Use sources instead (as documented for GraphQL `OrderCreateInput.externalId`). | Sent to `POST /v2/orders` |
| REST | Property | `OrderUpdateDTO.externalId` | Use sources instead (as documented for GraphQL `OrderCreateInput.externalId`). | Sent to `PATCH /v2/orders/id/{id}` |

### Order status flags no longer used

`isExportable`, `isConfirmable` and `isArchivable` are unused. Remove them from reads and writes.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Input field | `CreateOrderStatusInput.isArchivable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `CreateOrderStatusInput.isConfirmable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `CreateOrderStatusInput.isExportable` | Unused. To be removed in a future version |  |
| GraphQL | Field | `OrderStatus.isArchivable` | Unused. To be removed in a future version |  |
| GraphQL | Field | `OrderStatus.isConfirmable` | Unused. To be removed in a future version |  |
| GraphQL | Field | `OrderStatus.isExportable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `OrderStatusesSearchInput.isArchivable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `OrderStatusesSearchInput.isConfirmable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `OrderStatusesSearchInput.isExportable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `UpdateOrderStatusInput.isArchivable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `UpdateOrderStatusInput.isConfirmable` | Unused. To be removed in a future version |  |
| GraphQL | Input field | `UpdateOrderStatusInput.isExportable` | Unused. To be removed in a future version |  |
| REST | Property | `CreateOrderStatusInput.isArchivable` | Marks if the order status can be archived [Unused. To be removed in a future version] | Sent to `POST /v2/order-statuses` |
| REST | Property | `CreateOrderStatusInput.isConfirmable` | Marks if the order is confirmable [Unused. To be removed in a future version] | Sent to `POST /v2/order-statuses` |
| REST | Property | `CreateOrderStatusInput.isExportable` | Marks if the order is exportable [Unused. To be removed in a future version] | Sent to `POST /v2/order-statuses` |
| REST | Property | `OrderStatus.isArchivable` | Marks if the order status can be archived [Unused. To be removed in a future version] | Returned by `GET /v2/order-statuses`, `POST /v2/order-statuses`, `PATCH /v2/order-statuses/{id}` and 6 more |
| REST | Property | `OrderStatus.isConfirmable` | Marks if the order is confirmable [Unused. To be removed in a future version] | Returned by `GET /v2/order-statuses`, `POST /v2/order-statuses`, `PATCH /v2/order-statuses/{id}` and 6 more |
| REST | Property | `OrderStatus.isExportable` | Marks if the order is exportable [Unused. To be removed in a future version] | Returned by `GET /v2/order-statuses`, `POST /v2/order-statuses`, `PATCH /v2/order-statuses/{id}` and 6 more |
| REST | Property | `UpdateOrderStatusDTO.isArchivable` | Marks if the order can be archived [Unused. To be removed in a future version] | Sent to `PATCH /v2/order-statuses/{id}` |
| REST | Property | `UpdateOrderStatusDTO.isConfirmable` | Marks if the order is confirmable [Unused. To be removed in a future version] | Sent to `PATCH /v2/order-statuses/{id}` |
| REST | Property | `UpdateOrderStatusDTO.isExportable` | Marks if the order is exportable [Unused. To be removed in a future version] | Sent to `PATCH /v2/order-statuses/{id}` |

### class replaced by type

On products and clusters, read `type` instead of `class`. Keep using the `class` search filter.

Only the `class` field you read on products and clusters is deprecated (`Product`, `Cluster`, `IBaseProduct`, `IProduct` and `ICluster`). The `class` filter in product search inputs, such as `ProductSearchInput.class` and `CategoryProductSearchInput.class`, is not deprecated and keeps working after 1 March 2027. Search inputs have no `type` field, so leave the filter as it is. `class` on order items is not deprecated either.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Cluster.class` | Use 'type' field instead. This field will be removed in a future version. |  |
| GraphQL | Field | `IBaseProduct.class` | Use 'type' field instead. This field will be removed in a future version. |  |
| GraphQL | Field | `ICluster.class` | Use 'type' field instead. This field will be removed in a future version. |  |
| GraphQL | Field | `IProduct.class` | Use 'type' field instead. This field will be removed in a future version. |  |
| GraphQL | Field | `Product.class` | Use 'type' field instead. This field will be removed in a future version. |  |

### taxCode replaced by taxCodeValue

Use `taxCodeValue`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Input field | `CreateSurchargeInput.taxCode` | Use taxCodeValue instead. |  |
| GraphQL | Input field | `SurchargeSearchInput.taxCode` | Use taxCodeValue instead. |  |
| GraphQL | Input field | `UpdateSurchargeInput.taxCode` | Use taxCodeValue instead. |  |
| REST | Property | `CreateSurchargeInput.taxCode` | Tax classification code (deprecated - use taxCodeValue instead) that determines applicable tax rates and regulations for the surcharge. | Sent to `POST /v2/surcharges` |
| REST | Parameter | `GET /v2/surcharges ?taxCode` | deprecated - use taxCodeValue instead |  |
| REST | Property | `UpdatePaymentDTO.taxCode` | Tax code (deprecated - use taxCodeValue instead) | Sent to `PATCH /v2/surcharges/{id}` |

### shippingCost replaced by the business rule builder

Configure shipping logic with the business rule builder, which also covers more complex carrier cases.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `Carrier.shippingCost` | Deprecated in favour of Propeller's business rule builder, where logic can be set up for carriers and more complex use cases |  |
| GraphQL | Input field | `CarrierCreateInput.shippingCost` | Deprecated in favor of Propeller's business rule builder, where logic can be set up for carriers and more complex use cases |  |
| REST | Property | `Carrier.shippingCost` | Base shipping cost for this carrier (deprecated in favor of business rule builder) | Returned by `GET /v2/carriers`, `POST /v2/carriers`, `GET /v2/carriers/{id}` and 1 more |
| REST | Property | `CarrierCreateInput.shippingCost` | Deprecated in favor of Propeller's business rule builder, where logic can be set up for carriers and more complex use cases | Sent to `POST /v2/carriers` |
| REST | Property | `UpdateCarrierDTO.shippingCost` | Deprecated in favor of Propeller's business rule builder, where logic can be set up for carriers and more complex use cases | Sent to `PUT /v2/carriers/{id}` |

### Inventory response fields no longer used

`messages` and `total` on inventory responses are no longer populated.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Field | `InventoryDeleteResponse.messages` | No longer used |  |
| GraphQL | Field | `InventoryResponse.messages` | No longer used |  |
| GraphQL | Field | `InventoryResponse.total` | No longer used |  |
| GraphQL | Field | `ProductInventory.messages` | No longer used |  |
| REST | Property | `InventoryRest.messages` | No longer used (as documented for GraphQL `InventoryResponse.messages`). | Returned by `GET /v2/inventory/id/{id}`, `PATCH /v2/inventory/id/{id}` and `DELETE /v2/inventory/id/{id}` |
| REST | Property | `InventoryRest.total` | No longer used (as documented for GraphQL `InventoryResponse.total`). | Returned by `GET /v2/inventory/id/{id}`, `PATCH /v2/inventory/id/{id}` and `DELETE /v2/inventory/id/{id}` |
| REST | Property | `ProductInventory.messages` | [DEPRECATED] No longer used | Returned by `GET /v2/products/{lookupkey}/{key}/inventory` |

### Sort values and sortable field names

Use uppercase `ASC` and `DESC`. Sortable fields become `createdAt` and `lastModifiedAt`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Enum value | `SortOrder.asc` | Use ASC instead |  |
| GraphQL | Enum value | `SortOrder.desc` | Use DESC instead |  |

### Order address operations renamed

Use `orderAddresses` and `orderAddressUpdate`.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Query | `addressesByOrderId` | Use orderAddresses |  |
| GraphQL | Mutation | `orderUpdateAddress` | Use orderAddressUpdate |  |

### Authentication and password reset

Use `triggerPasswordSendResetEmailEvent`, and pass the `input` parameter on `passwordResetLink`. The announced replacement for `logout` is not available yet.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Mutation | `logout` | The announced `signOut` mutation is not available yet. |  |
| GraphQL | Argument | `Mutation.passwordResetLink(email:)` | use input parameter instead |  |
| GraphQL | Argument | `Mutation.passwordResetLink(redirectUrl:)` | use input parameter instead |  |
| GraphQL | Mutation | `publishPasswordResetEmailEvent` | Deprecated in favor of using the triggerPasswordSendResetEmailEvent that utilizes the event-action-manager and template-engine |  |

### Other individual deprecations

These do not belong to a wider migration. The note on each item gives the replacement where one is announced.

| API | Type | Item | Replacement or note | REST endpoints |
|---|---|---|---|---|
| GraphQL | Mutation | `addCompanyManager` | No longer supported. Every call fails with a not-implemented error. |  |
| GraphQL | Field | `AdminUserTenant.name` | Use federated field to get name |  |
| GraphQL | Field | `AttributeDescription.defaultValue` | Will become nullable in a future major version. Until then, descriptions without a configured default value return a placeholder AttributeValue with id "0" (an empty value matching the attribute type) instead of null. |  |
| GraphQL | Field | `Category.path` | This field will be removed in a future version. Use categoryPath field resolver for breadcrumb navigation instead. |  |
| GraphQL | Input field | `CategoryProductSearchInput.containerPathSlugs` | Use containerSlugs with getDescendants: true instead |  |
| GraphQL | Input field | `CategoryProductSearchInput.path` | No longer used. |  |
| GraphQL | Input field | `CategorySearchInput.categoryId` | Use `categoryIds` instead of `categoryId`. |  |
| GraphQL | Input field | `CategorySearchInput.parentCategoryId` | Use `parentCategoryIds` instead of `parentCategoryId`. |  |
| GraphQL | Field | `Channel.defaultLetterId` | No replacement announced. |  |
| GraphQL | Field | `Cluster.drillDowns` | Use config.setting instead |  |
| GraphQL | Input field | `ClusterCategorySearchInput.parentCategoryId` | Use `parentCategoryIds` instead of `parentCategoryId`. |  |
| GraphQL | Enum value | `CompanyFieldName.BUDGET` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `CompanyFieldName.BUDGET_INHERIT` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `CompanyFieldName.INHERIT_ORDER_LIST` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `CompanyFieldName.INHERIT_PRODUCT_LIST` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `CompanyFieldName.PATH` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `CompanyFieldName.SLUG` | No longer used. The importer ignores this column. |  |
| GraphQL | Enum value | `ContactFieldName.DEBTOR_ID` | No longer used. The importer ignores this column; import the debtor ID on the company instead. |  |
| GraphQL | Input field | `CreateContactInput.debtorId` | Deprecated in favor of company debtorId |  |
| GraphQL | Enum value | `CustomerFieldName.LANGUAGE` | Use `PRIMARY_LANGUAGE` instead of `LANGUAGE`. The importer ignores this column. |  |
| GraphQL | Enum value | `OrderItemClass.payment` | Unused. To be removed in a future version |  |
| GraphQL | Enum value | `OrderItemClass.postage` | Unused. To be removed in a future version |  |
| GraphQL | Enum value | `OrderSearchFields.EXTERNAL_ORDER_ID` | Use the `sources` filter instead. |  |
| GraphQL | Mutation | `orderSendConfirmationEmail` | Use `triggerOrderSendConfirm` instead. |  |
| GraphQL | Input field | `OrderSetStatusInput.addPDFAttachment` | Not used anymore. Attachments are now handled by the template engine. |  |
| GraphQL | Input field | `OrderSetStatusInput.sendOrderConfirmationEmail` | Sends an order confirmation using the legacy template system. Use the `triggerOrderSendConfirm` mutation instead. |  |
| GraphQL | Field | `OrderTotals.orderId` | Use the parent Order.id instead |  |
| GraphQL | Argument | `Product.bulkPrices(taxZone:)` | Use the taxZone in the input instead |  |
| GraphQL | Field | `Product.offers` | Pricing and availability are managed through different fields; this field is preserved for federation compatibility and currently returns an empty list. |  |
| GraphQL | Input field | `ProductCategorySearchInput.parentCategoryId` | Use `parentCategoryIds` instead of `parentCategoryId`. |  |
| GraphQL | Enum value | `ProductFieldName.SHORT_NAME` | Use `SHORT_NAMES` instead of `SHORT_NAME`. |  |
| GraphQL | Input field | `ProductSearchInput.containerPathSlugs` | Use containerSlugs with getDescendants: true instead |  |
| GraphQL | Input field | `ProductSearchInput.path` | No longer used. |  |
| GraphQL | Argument | `Query.categories(filter:)` | Use `input` instead of `filter`. |  |
| GraphQL | Argument | `Query.category(id:)` | Use `categoryId` instead of `id`. |  |
| GraphQL | Argument | `Query.cluster(id:)` | Use `clusterId` instead of `id`. |  |
| GraphQL | Argument | `Query.product(id:)` | Use `productId` instead of `id`. |  |
| GraphQL | Input field | `RegisterContactInput.debtorId` | Deprecated in favor of company debtorId |  |
| GraphQL | Mutation | `removeCompanyManager` | No longer supported. Every call fails with a not-implemented error. |  |
| GraphQL | Input field | `SparePartsMachineProductSearchInput.containerPathSlugs` | Use containerSlugs with getDescendants: true instead |  |
| GraphQL | Input field | `SparePartsMachineProductSearchInput.path` | No longer used. |  |
| GraphQL | Enum value | `TaxSortField.SHOP_ID` | No replacement announced. |  |
| GraphQL | Input field | `TenderAddItemsInput.validateBudget` | No replacement announced. |  |
| GraphQL | Input field | `TenderAddItemsInput.validateOrderList` | No replacement announced. |  |
| GraphQL | Field | `TenderCarrier.amount` | Deprecated, please use price instead |  |
| GraphQL | Field | `TenderTotal.discountOverruled` | Not used anymore |  |
| GraphQL | Input field | `TenderUpdateItemInput.validateBudget` | No replacement announced. |  |
| GraphQL | Input field | `TenderUpdateItemInput.validateOrderList` | No replacement announced. |  |
| GraphQL | Input field | `UpdateContactInput.debtorId` | Deprecated in favor of company debtorId |  |
| REST | Property | `AttributeDescription.defaultValue` | Default value configuration for attributes based on this description. Specifies the initial value that will be assigned to new attributes created from this description. The value type must match the attribute type specified above. @deprecated Will become nullable in a future major version. Until then, descriptions without a configured default value return a placeholder AttributeValue with id "0" (an empty value matching the attribute type) instead of null, to keep the field non-null for backwards compatibility. | Returned by `GET /v2/attribute-descriptions`, `POST /v2/attribute-descriptions`, `GET /v2/attribute-descriptions/{lookupKey}/{lookupValue}` and 1 more |
| REST | Property | `BulkProductDto.oemCode` | Deprecated: use `manufacturerCode` instead. A value sent here is stored as `manufacturerCode`. | Sent to `POST /v2/clusters/{lookupKey}/{key}/options/bulk`, `POST /v2/clusters/{lookupKey}/{key}/products/bulk`, `POST /v2/clusters/bulk/{lookupKey}` and 1 more |
| REST | Property | `BulkProductDto.taxCode` | No replacement announced. | Sent to `POST /v2/clusters/{lookupKey}/{key}/options/bulk`, `POST /v2/clusters/{lookupKey}/{key}/products/bulk`, `POST /v2/clusters/bulk/{lookupKey}` and 1 more |
| REST | Property | `CreateMediaImageDto.productSource` | External system name of the product the image relates to. @deprecated use productSourceRef instead. | Sent to `POST /v2/media/images/bulk` |
| REST | Property | `CreateMediaImageDto.productSourceId` | External identifier of the product within the source system. @deprecated use productSourceRef instead. | Sent to `POST /v2/media/images/bulk` |
| REST | Property | `CreateProductDto.oemCode` | Deprecated: use `manufacturerCode` instead. A value sent here is stored as `manufacturerCode`. | Sent to `POST /v2/clusteroptions/{lookupKey}/{key}/products`, `POST /v2/clusters/{lookupKey}/{key}/products` and `POST /v2/products` |
| REST | Endpoint | `GET /v2/favoritelists` | Please use `POST /v2/favoritelists/search` instead for better filtering capabilities and consistent request/response format. |  |
| REST | Property | `OrderTotals.orderId` | The orderId of this Order. Depricated use the parent Order.id instead | Returned by `POST /v2/orders`, `GET /v2/orders/id/{id}`, `PATCH /v2/orders/id/{id}` and 1 more |
| REST | Property | `UpdateProductDto.oemCode` | Deprecated: use `manufacturerCode` instead. A value sent here is stored as `manufacturerCode`. | Sent to `PATCH /v2/clusteroptions/{lookupKey}/{key}/products/{productId}`, `PATCH /v2/clusters/{lookupKey}/{key}/products/{productId}` and `PATCH /v2/products/{lookupKey}/{key}` |

## Questions

If you are not sure whether a change affects your integration, contact your Propeller account manager with the queries or endpoints you use.
