Product Properties Service
Overview
A product property is a link between a product and a property definition (e.g. Colour, Material) — it records that a product has a given property, so its variants can inherit a value for it. It carries no value of its own; actual values live on variants via Property Values.
Related to Properties, which define the property schema.
All operations are tenant-aware.
Database tables
catalog.ProductPropertyValue(table name unchanged; the API and C# types use "Property" naming since this is a pure Product↔Property link, not a value)
Endpoints
GET
/api/v1/ProductProperties
Returns all properties assigned to a specific product.
Query parameters:
productId(long, required) - product identifier
Response:
List<ProductPropertyModel>
Authorization:
- Requires Bearer Token
- Permission:
ProductsRead
POST
/api/v1/ProductProperties
Assigns a property to a product.
Request body (ProductPropertyModel):
ProductId(long, required) - product to assign the property toPropertyId(long, required) - property definition
Response:
201 Created—ProductPropertyModel
Authorization:
- Requires Bearer Token
- Permission:
ProductsWrite
PUT
/api/v1/ProductProperties/product/{productId}
Confirms a product↔property assignment exists for the given product (no fields beyond the identifying ProductId/PropertyId pair to change — this is a pure link with no value).
Route parameters:
productId(long, required) - product identifier
Request body (ProductPropertyModel):
ProductId(long, required) - overwritten from the routePropertyId(long, required) - property definition
Response:
200 OK—ProductPropertyModel
Authorization:
- Requires Bearer Token
- Permission:
ProductsWrite
DELETE
/api/v1/ProductProperties/product/{productId}
Deletes all property assignments for a product.
Route parameters:
productId(long, required) - product identifier
Response:
204 No Content
Authorization:
- Requires Bearer Token
- Permission:
ProductsWrite
DELETE
/api/v1/ProductProperties/product/{productId}/property/{propertyId}
Deletes a specific property assignment for a product.
Route parameters:
productId(long, required) - product identifierpropertyId(long, required) - property definition identifier
Response:
204 No Content
Authorization:
- Requires Bearer Token
- Permission:
ProductsWrite
Notes
- Product properties are managed independently of the product — deleting a product does not automatically clear its property assignments
- All state-changing operations are audited
- Internal errors are logged but not exposed to clients