2026-05-13: Emporix SDK - Dynamic variants support
Overview
A new version 1.3.0 of the Emporix SDK adds support for DYNAMIC_VARIANT products and introduces a dedicated client for asynchronous dynamic variant recalculation jobs.
Dynamic variants form a flexible hierarchy (up to 4 levels). Each variant stores its own distinguishing attributes (ownVariantAttributes) and a root dynamic variant contains a denormalized variants map of all descendants. For bulk imports, the variant tree can be rebuilt asynchronously using the recalculation job endpoints.
New client
RecalculationJobClient
Declarative HTTP client for Product Service dynamic variant recalculation jobs. Automatically registered as a Spring bean.
New methods
RecalculationJobClient.triggerDynamicVariantRecalculation
Triggers asynchronous recalculation jobs for one or more dynamic variants.
RecalculationJobClient.listDynamicVariantRecalculationJobs
Lists recalculation jobs, optionally filtered by status.
RecalculationJobClient.getDynamicVariantRecalculationJob
Retrieves a single recalculation job by ID.
New types
Dynamic variant recalculation
DynamicVariantRecalculationRequest
Request body for triggering recalculation. Contains up to 1000 productIds.
DynamicVariantRecalculationResponse
Response containing jobs and skippedProductIds.
DynamicVariantRecalculationJobResponse
Represents a single recalculation job (id, root, status, timestamps, error).
DynamicVariantRecalculationJobStatus
Job status enum: PENDING, PROCESSING, FINISHED, FAILED, FAILED_PERMANENT.
Dynamic variant attributes and variant map
DynamicVariantAttribute
Attribute entry with localized name and typed value.
DynamicVariantAttributeValue
Typed value containing type, qualifier, optional unit, and localized display name.
DynamicVariantAttributeType
Attribute value type enum (e.g. STRING, BOOLEAN, NUMBER, DECIMAL).
VariantAttributeQualifier
Qualifier value with custom serializer/deserializer for stable JSON representation.
VariantMapEntry
Entry stored in a root product’s variants map with accumulated attributes for a descendant.
DynamicVariantInfo
Metadata information for dynamic variant trees (for example, missing ancestor, cycle detection).
Requests for DYNAMIC_VARIANT products
DYNAMIC_VARIANT productsDynamicVariantCreateRequest
Create request for DYNAMIC_VARIANT products, including ownVariantAttributes.
DynamicVariantUpdateRequest
Update request for DYNAMIC_VARIANT products, including ownVariantAttributes.
Product presentation - brand & labels
Brand
Brand representation embedded in ProductResponse (resolved when expanded by the API).
Label
Label representation embedded in ProductResponse (resolved when expanded by the API).
Updated types
ProductResponse
Added dynamic variant support (dynamicVariantType, parentVariantId, parentVariantPath, sellable, ownVariantAttributes, inheritedVariantAttributes, root variants map) and presentation fields (labelIds, labels, brandId, brand).
ProductMetadataResponse
Added dynamicVariantInfo for dynamic-variant tree diagnostics.
GenericProductCreateRequest
Added dynamic variant fields (productType, parentVariantId, dynamicVariantType, sellable, ownVariantAttributes).
GenericProductUpdateRequest
Added dynamic variant fields (sellable, dynamicVariantType, parentVariantId, ownVariantAttributes).
ProductPartialUpdateRequest
Added dynamic variant fields (dynamicVariantType, sellable, ownVariantAttributes) and additional partial-update fields (labelIds, brandId).
Known problems
Constructor signature changes (compile-time breaking for some usages)
The all-args constructors generated by Lombok changed due to newly added fields in:
ProductResponseGenericProductCreateRequestGenericProductUpdateRequestProductPartialUpdateRequest
If your code instantiates these classes using constructors, you may hit compilation errors after upgrading.
Recommended fix: use the Lombok builder (.builder()...build()) instead of constructors.
Class GenericProductUpdateRequest' is now using MetadataRequestclass instead ofVariantProductMetadataRequestformetadata` field.
The following classes were updated to contain productType field that is necessary for upserting and creating products:
BundledProductCreateRequestDynamicVariantCreateRequestParentVariantCreateRequestProductVariantCreateRequestBundledProductUpdateRequestParentVariantUpdateRequestProductVariantUpdateRequest
Last updated
Was this helpful?

