Download OpenAPI specification:
Logistics operations API for the 4klyft platform.
This API provides comprehensive endpoints for managing:
All API endpoints (except /api/docs and /api/v1/iam/auth/*) require JWT Bearer token authentication.
Include the token in the Authorization header:
Authorization: Bearer <your-jwt-token>
API requests are rate-limited to ensure fair usage. Standard limits are:
The usage index for one Asset: how many owners link it, and which. Warn-only — Phase 2 exposes usage but does NOT block retire.
List catalog media assets
| kind | string Enum: "image" "video" "document" Filter by media kind |
| status | string Enum: "active" "retired" Filter by status |
| search | string Search by title |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 200 ] Default: 50 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}
]
}Registers a reusable asset for a file already stored in a drive (drive:// reference).
The new CatalogAsset resource
| kind required | string Enum: "image" "video" "document" |
| storageUri required | string^(drive://[^/]+/.+)$ |
| title required | string [ 1 .. 255 ] characters |
| defaultAltText | string or null <= 1000 characters |
| mimeType | string or null <= 128 characters |
| folderId |
{- "kind": "image",
- "storageUri": "string",
- "title": "string",
- "defaultAltText": "string",
- "mimeType": "string",
- "folderId": "5b6379a4-2a6c-4085-b184-45838a3b8e7e"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Report which owners link a catalog asset
| assetId required | string CatalogAssetUsage identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "assetId": "string",
- "usageCount": 0,
- "references": [
- {
- "ownerType": "product",
- "ownerId": "string",
- "role": "primary"
}
]
}Get a catalog media asset
| id required | string CatalogAsset identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Retitle a catalog media asset
| id required | string CatalogAsset identifier |
The updated CatalogAsset resource
| title | string [ 1 .. 255 ] characters |
{- "title": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}A null defaultAltText clears it.
| id required | string CatalogAsset identifier |
The new CatalogAsset resource
| defaultAltText | string or null <= 1000 characters |
{- "defaultAltText": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}A null folderId unfiles the asset (moves it to the library root).
| id required | string CatalogAsset identifier |
The new CatalogAsset resource
| folderId |
{- "folderId": "5b6379a4-2a6c-4085-b184-45838a3b8e7e"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Restore a retired catalog media asset
| id required | string CatalogAsset identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Retire a catalog media asset
| id required | string CatalogAsset identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "kind": "image",
- "title": "Blue Widget — hero",
- "defaultAltText": "A blue widget on a white background",
- "mimeType": "image/jpeg",
- "status": "active",
- "folderId": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog assortment — a channel-scoped subset of the catalog
(design assortment-scoping-and-channel-links.md). Curated members and a
dynamic ruleMatch + ruleClauses predicate may BOTH be present; the live
product membership is their union, resolved on demand by the AssortmentResolver
(not materialised on this resource). Kept deliberately separate from the
merchandising Collection.
List catalog assortments
| status | string Enum: "active" "archived" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 50 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}
]
}Create a catalog assortment
The new Assortment resource
| name required | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| description | string or null |
{- "name": "string",
- "code": "string",
- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Get a catalog assortment
| id required | string Assortment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Rename a catalog assortment
| id required | string Assortment identifier |
The updated Assortment resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Archive a catalog assortment
| id required | string Assortment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Update a catalog assortment description
| id required | string Assortment identifier |
The new Assortment resource
| description | string or null |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Curate a product into an assortment
| id required | string Assortment identifier |
The new Assortment resource
| productId required | string |
{- "productId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Add many products at once by their opaque ResourceUris. Idempotent — already-curated products are skipped.
| id required | string Assortment identifier |
The new Assortment resource
| productIds required | Array of strings |
{- "productIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Remove a curated product from an assortment
| id required | string Assortment identifier |
The new Assortment resource
| productId required | string |
{- "productId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Reactivate a catalog assortment
| id required | string Assortment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Store the typed predicate. Composes with curated members — membership is the union of both.
| id required | string Assortment identifier |
The new Assortment resource
| match required | string Enum: "all" "any" |
required | Array of objects |
{- "match": "all",
- "clauses": [
- {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Clear the dynamic rule of an assortment
| id required | string Assortment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Pharmaceuticals",
- "code": "pharmaceuticals",
- "description": "string",
- "status": "active",
- "membershipType": "curated",
- "curatedCount": 0,
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc"
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog attribute definition — a typed entry in the
tenant-global attribute registry (catalog.md §4.3). A select/multiselect
definition binds a first-class OptionSet (optionSetRef) as the source of
its allowed values; maxSelections caps a multiselect.
Retrieve a paginated list of attribute definitions with optional filters.
| group | string Filter by attribute group |
| type | string Enum: "text" "number" "bool" "select" "multiselect" "measurement" "rich_text" "date" "file" Filter by attribute type |
| status | string Enum: "active" "archived" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Create a catalog attribute definition
The new AttributeDefinition resource
| name required | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| type required | string Enum: "text" "number" "bool" "select" "multiselect" "measurement" "rich_text" "date" "file" |
| unit | string or null <= 32 characters |
| group | string or null <= 100 characters |
| isFilterable | boolean Default: false |
| maxLength | integer or null > 0 |
| scope | string Default: "per_product" Enum: "per_product" "per_variant" |
| comparable | boolean Default: false |
| perLocale | boolean Default: false |
| lockedToCatalog | boolean Default: false |
| helpText | string or null <= 255 characters |
{- "name": "string",
- "code": "string",
- "type": "text",
- "unit": "string",
- "group": "string",
- "isFilterable": false,
- "maxLength": 0,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Get a catalog attribute definition
| id required | string AttributeDefinition identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Update the mutable profile (name, unit, group, isFilterable, and enrichment flags). code/type are immutable.
| id required | string AttributeDefinition identifier |
The updated AttributeDefinition resource
| name | string [ 1 .. 255 ] characters |
| unit | string or null <= 32 characters |
| group | string or null <= 100 characters |
| isFilterable | boolean Default: false |
| maxLength | integer or null > 0 |
| scope | string Default: "per_product" Enum: "per_product" "per_variant" |
| comparable | boolean Default: false |
| perLocale | boolean Default: false |
| lockedToCatalog | boolean Default: false |
| helpText | string or null <= 255 characters |
{- "name": "string",
- "unit": "string",
- "group": "string",
- "isFilterable": false,
- "maxLength": 0,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Archive a catalog attribute definition
| id required | string AttributeDefinition identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Only valid for select/multiselect attribute definitions. maxSelections is a multiselect-only cap.
| id required | string AttributeDefinition identifier |
The new AttributeDefinition resource
| optionSetId required | string |
| maxSelections | integer or null > 0 |
{- "optionSetId": "string",
- "maxSelections": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Reactivate a catalog attribute definition
| id required | string AttributeDefinition identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Colour",
- "code": "colour",
- "type": "text",
- "unit": "cm",
- "group": "Physical properties",
- "isFilterable": true,
- "optionSetRef": "string",
- "maxSelections": 3,
- "maxLength": 255,
- "scope": "per_product",
- "comparable": false,
- "perLocale": false,
- "lockedToCatalog": false,
- "helpText": "Enter the primary colour name",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog attribute set — a family / product-type in the tenant-global Catalog that declares which attributes apply to a Product and which of them are required (catalog.md §4.8).
Retrieve a paginated list of attribute sets (families / product-types) with optional filters.
| status | string Enum: "active" "archived" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Create a catalog attribute set
The new AttributeSet resource
| name required | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| description | string or null <= 2000 characters |
{- "name": "string",
- "code": "string",
- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Get a catalog attribute set
| id required | string AttributeSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Update the display name. code is immutable.
| id required | string AttributeSet identifier |
The updated AttributeSet resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Archive a catalog attribute set
| id required | string AttributeSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Adds an AttributeDefinition as a member. The definition must exist.
| id required | string AttributeSet identifier |
The new AttributeSet resource
| attributeDefinitionId required | string |
| sectionId required | string |
| required | boolean Default: false |
{- "attributeDefinitionId": "string",
- "sectionId": "string",
- "required": false
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Reorder the set's members
| id required | string AttributeSet identifier |
The new AttributeSet resource
| sectionId required | string |
| orderedAttributeDefinitionIds required | Array of strings |
{- "sectionId": "string",
- "orderedAttributeDefinitionIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Toggle a member attribute's required flag
| attributeDefinitionId required | string The member attribute definition id |
| id required | string AttributeSet identifier |
The updated AttributeSet resource
| required | boolean Default: false |
{- "required": false
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Overrides the display label for THIS membership, superseding the definition's name. A blank label is rejected.
| attributeDefinitionId required | string The member attribute definition id |
| id required | string AttributeSet identifier |
The new AttributeSet resource
| label | string Default: "" The display label to use for this membership |
{- "label": "Shade"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Binds an OptionSet (and optional multiselect cap) for THIS membership, superseding the definition default. Only valid on select/multiselect attributes.
| attributeDefinitionId required | string The member attribute definition id |
| id required | string AttributeSet identifier |
The new AttributeSet resource
| optionSetRef | string Default: "" The OptionSet id to bind for this membership |
| maxSelections | integer or null Optional multiselect selection cap (>= 1); null caps nothing |
{- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Move a member to another section
| attributeDefinitionId required | string The member attribute definition id |
| id required | string AttributeSet identifier |
The new AttributeSet resource
| sectionId required | string |
{- "sectionId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}A null description clears the hint.
| id required | string AttributeSet identifier |
The new AttributeSet resource
| description | string or null <= 2000 characters |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Restore an archived catalog attribute set
| id required | string AttributeSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Add a section (named grouping) to the set
| id required | string AttributeSet identifier |
The new AttributeSet resource
| name required | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Reorder the set's sections
| id required | string AttributeSet identifier |
The new AttributeSet resource
| orderedSectionIds required | Array of strings |
{- "orderedSectionIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Rename a section
| sectionId required | string The section id |
| id required | string AttributeSet identifier |
The updated AttributeSet resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Apparel",
- "code": "apparel",
- "description": "Fields for apparel product types",
- "status": "active",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0
}
], - "members": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "sectionId": "01912345-6789-7abc-def0-123456789abc",
- "required": true,
- "sectionPosition": 0,
- "attributeName": "Colour",
- "attributeCode": "colour",
- "optionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "maxSelections": 0,
- "labelOverride": "Shade"
}
], - "memberCount": 0,
- "sectionCount": 0,
- "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog attribute value — the assignment of an AttributeDefinition's value to a subject (a Catalog Product or Variant, referenced by opaque ResourceUri) (catalog.md §4.3).
Retrieve all attribute values set on a Product or Variant, for the product editor.
| subjectRef required | string Example: subjectRef=glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc The subject's opaque ResourceUri (a Product or Variant) |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "subjectRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "attributeDefinitionId": "string",
- "value": "red",
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Create or update the value of an AttributeDefinition on a subject (idempotent upsert keyed on subjectRef + attributeDefinitionId).
Attribute value data
| subjectRef required | string |
| attributeDefinitionId required | string <uuid> |
| value required | string |
{- "subjectRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "attributeDefinitionId": "5a99bae6-70b6-4cce-a212-45b1dfb36b9c",
- "value": "red"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "subjectRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "attributeDefinitionId": "string",
- "value": "red",
- "createdAt": "string",
- "updatedAt": "string"
}Get a catalog attribute value
| id required | string AttributeValue identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "subjectRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "attributeDefinitionId": "string",
- "value": "red",
- "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog brand — the tenant-global Brand identity Products may optionally reference.
Retrieve a paginated list of catalog brands with optional filters.
| status | string Enum: "active" "discontinued" Example: status=active Filter by brand status |
| search | string Example: search=Acme Search by name or code |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Example: itemsPerPage=20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}
]
}Create a new tenant-global catalog brand identity.
Catalog brand creation data
| name required | string non-empty |
| code | string or null |
| description | string or null |
| logoRef | string or null |
{- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Retrieve a single catalog brand by its UUID.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Brand UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Update a brand's mutable profile (name, code, description, logoRef).
| id required | string Brand identifier |
The updated Brand resource
| name | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| description | string or null |
| logoRef | string or null <= 512 characters |
{- "name": "string",
- "code": "string",
- "description": "string",
- "logoRef": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Transition a brand to the discontinued status.
| id required | string Brand identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Transition a discontinued brand back to the active status.
| id required | string Brand identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Set the brand's meta title, meta description and URL slug. The slug must be unique per tenant among brands.
| id required | string Brand identifier |
The new Brand resource
| metaTitle | string or null |
| metaDescription | string or null |
| slug | string or null |
{- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Update a catalog brand's website URL
| id required | string Brand identifier |
The new Brand resource
| website | string or null |
{- "website": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme",
- "code": "ACME",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "logoRef": "glacia:///storage/files/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}A product on the Overview "needs attention" list: it is missing one or more
publish-readiness dimensions (missing), which the UI renders as reason
chips. A column-level heuristic — see the query service for why this is not
the authoritative publication-gate verdict. Served by
{@see NeedsAttentionCollectionProvider}.
Paginated list of products missing a Brand reference, description, primary image, or still in draft enrichment. Each row carries the exact set of missing dimensions.
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Example: itemsPerPage=20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "status": "active",
- "missing": [
- "brand",
- "image",
- "draft"
]
}
]
}Tenant-scoped aggregate counts (products with per-status breakdown, variants, brands, categories, collections, tags, attributes, assets) backing the catalog Overview dashboard.
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "catalog-overview",
- "products": {
- "total": 128,
- "byStatus": {
- "active": 120,
- "discontinued": 8
}
}, - "variants": {
- "total": 42
}, - "brands": {
- "total": 42
}, - "categories": {
- "total": 42
}, - "collections": {
- "total": 42
}, - "tags": {
- "total": 42
}, - "attributes": {
- "total": 42
}, - "assets": {
- "total": 42
}
}Represents a catalog category — a node in the tenant-global taxonomy tree (catalog.md §4.1). Products are assigned to categories via the ProductCategoryAssignment resource.
Retrieve categories as a flat paginated list, or the full tree ordered by path with ?tree=1.
| tree | boolean Return the whole tree ordered by path (depth-first) |
| parentId | string Filter to the direct children of a category (empty string = roots) |
| status | string Enum: "active" "archived" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 200 ] Default: 50 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}
]
}Create a catalog category
The new Category resource
| name required | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| parentId | string or null |
| position | integer >= 0 Default: 0 |
{- "name": "string",
- "code": "string",
- "parentId": "string",
- "position": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}List the categories a product is assigned to
| productId required | string The product's opaque ResourceUri |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}
]
}Get a catalog category
| id required | string Category identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Rename a catalog category
| id required | string Category identifier |
The updated Category resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Archive a catalog category
| id required | string Category identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Update a catalog category's description
| id required | string Category identifier |
The new Category resource
| description | string or null |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Move the category under a new parent (newParentId null promotes it to a root). Rejected with 400 if the move would create a cycle.
| id required | string Category identifier |
The new Category resource
| newParentId | string or null |
{- "newParentId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Assign many products at once by their bare ids. Idempotent — products already assigned are skipped.
| id required | string Category identifier |
The new Category resource
| productIds required | Array of strings |
{- "productIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Reactivate a catalog category
| id required | string Category identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Reorder a catalog category among its siblings
| id required | string Category identifier |
The new Category resource
| position | integer >= 0 Default: 0 |
{- "position": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Set the category's meta title, meta description and URL slug. The slug must be unique per tenant among categories.
| id required | string Category identifier |
The new Category resource
| metaTitle | string or null |
| metaDescription | string or null |
| slug | string or null |
{- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "parentId": "string",
- "name": "Apparel",
- "code": "apparel",
- "position": 0,
- "status": "active",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "path": "apparel/mens/shirts",
- "depth": 0,
- "createdAt": "string",
- "updatedAt": "string",
}Represents a per-channel content override layered over base Variant content at read time (catalog.md §4.7). Keyed on the (variantRef, channelRef, field) triple; setting the same triple again UPDATES the value (idempotent upsert), NOT a 409. The base Product/Variant stays the canonical truth.
Upserts the override keyed on (variantRef, channelRef, field). Setting the same triple again updates the value — no 409.
The new ChannelContentOverride resource
| variantRef required | string [ 1 .. 512 ] characters |
| channelRef required | string [ 1 .. 512 ] characters |
| field required | string Enum: "title" "description" "short_description" "meta_title" "meta_description" |
| value required | string |
{- "variantRef": "string",
- "channelRef": "string",
- "field": "title",
- "value": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "channelRef": "glacia:///sales/channels/01912345-6789-7abc-def0-123456789abc",
- "field": "title",
- "value": "Amazon-optimised product title",
- "createdAt": "string",
- "updatedAt": "string"
}List the content overrides layered over a variant
| variantRef required | string The variant's VariantId |
| channelRef | string Optional channel ResourceUri filter |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "channelRef": "glacia:///sales/channels/01912345-6789-7abc-def0-123456789abc",
- "field": "title",
- "value": "Amazon-optimised product title",
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Get a channel content override
| id required | string ChannelContentOverride identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "channelRef": "glacia:///sales/channels/01912345-6789-7abc-def0-123456789abc",
- "field": "title",
- "value": "Amazon-optimised product title",
- "createdAt": "string",
- "updatedAt": "string"
}Represents a catalog collection — a merchandising grouping of products
(catalog.md §4.2). Curated collections expose an ordered members list;
dynamic collections expose a ruleMatch + ruleClauses predicate. Kept
deliberately separate from the Category taxonomy.
List catalog collections
| kind | string Enum: "curated" "dynamic" Filter by kind |
| status | string Enum: "active" "archived" Filter by status |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 50 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}
]
}Create a catalog collection
The new Collection resource
| name required | string [ 1 .. 255 ] characters |
| code | string or null <= 64 characters |
| kind required | string Enum: "curated" "dynamic" |
| description | string or null |
| position | integer >= 0 Default: 0 |
{- "name": "string",
- "code": "string",
- "kind": "curated",
- "description": "string",
- "position": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}List the curated collections a product is a member of
| productId required | string The product's opaque ResourceUri |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}
]
}Get a catalog collection
| id required | string Collection identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Rename a catalog collection
| id required | string Collection identifier |
The updated Collection resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Archive a catalog collection
| id required | string Collection identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Update a catalog collection description
| id required | string Collection identifier |
The new Collection resource
| description | string or null |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Add a product to a curated collection
| id required | string Collection identifier |
The new Collection resource
| productId required | string |
{- "productId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Add many products at once by their opaque ResourceUris. Idempotent — already-member products are skipped.
| id required | string Collection identifier |
The new Collection resource
| productIds required | Array of strings |
{- "productIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Remove a product from a curated collection
| id required | string Collection identifier |
The new Collection resource
| productId required | string |
{- "productId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Reorder a curated collection's members
| id required | string Collection identifier |
The new Collection resource
| orderedProductIds required | Array of strings |
{- "orderedProductIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Reactivate a catalog collection
| id required | string Collection identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Reorder a catalog collection among its peers
| id required | string Collection identifier |
The new Collection resource
| position | integer >= 0 Default: 0 |
{- "position": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Store the typed predicate for a dynamic collection. Rejected with 400 on a curated collection.
| id required | string Collection identifier |
The new Collection resource
| match required | string Enum: "all" "any" |
required | Array of objects |
{- "match": "all",
- "clauses": [
- {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Set the collection's meta title, meta description and URL slug. The slug must be unique per tenant among collections.
| id required | string Collection identifier |
The new Collection resource
| metaTitle | string or null |
| metaDescription | string or null |
| slug | string or null |
{- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Summer Sale",
- "code": "summer-sale",
- "kind": "curated",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "position": 0,
- "status": "active",
- "ruleDefined": false,
- "ruleMatch": "all",
- "members": [
- {
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "sortOrder": 0
}
], - "ruleClauses": [
- {
- "field": "brand",
- "operator": "equals",
- "values": [
- "string"
]
}
], - "createdAt": "string",
- "updatedAt": "string",
}Retrieve a paginated list of catalog products with optional filters.
| status | Array of strings Items Enum: "active" "discontinued" Example: status=active Filter by product status (repeat status[] for multi-select; OR within, AND across dimensions) |
| brandId | Array of strings Example: brandId=01912345-6789-7abc-def0-123456789abc Filter by Brand aggregate id(s); repeat brandId[] for multi-select |
| attributeSetId | Array of strings Example: attributeSetId=01912345-6789-7abc-def0-123456789abc Filter by AttributeSet (family) id(s); repeat attributeSetId[] for multi-select |
| enrichmentStatus | Array of strings Items Enum: "draft" "enriching" "review" "published" Example: enrichmentStatus=draft Filter by PIM enrichment status(es); repeat enrichmentStatus[] for multi-select |
| categoryId | Array of strings Example: categoryId=01912345-6789-7abc-def0-123456789abc Filter to products assigned to the given Category id(s); repeat categoryId[] for multi-select |
| collectionId | Array of strings Example: collectionId=01912345-6789-7abc-def0-123456789abc Filter to products that are members of the given Collection id(s); repeat collectionId[] for multi-select |
| assortmentId | Array of strings Example: assortmentId=01912345-6789-7abc-def0-123456789abc Filter to products that are CURATED members of the given Assortment id(s); repeat assortmentId[] for multi-select. Dynamic-rule membership is not included. |
| channelId | Array of strings Example: channelId=01912345-6789-7abc-def0-123456789abc Filter to products with an ENABLED listing on the given sales channel id(s) or ref(s); repeat channelId[] for multi-select |
| search | string Example: search=Widget Search by name or brand |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Example: itemsPerPage=20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}
]
}Create a new tenant-global catalog product identity.
Catalog product creation data
| name required | string non-empty |
| brand | string or null |
{- "name": "Acme Widget",
- "brand": "Acme"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Retrieve a single catalog product by its UUID.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Product UUID |
| locale | string Example: locale=fr-FR Optional BCP-47 display locale. Resolves name/description/SEO for that locale (falling back to the org source locale). Absent → org source locale. |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Update a product's mutable profile (name, brand).
| id required | string Product identifier |
The updated Product resource
| name | string [ 1 .. 255 ] characters |
| brand | string or null <= 255 characters |
{- "name": "string",
- "brand": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Assign the product to an active AttributeSet. Variants inherit the product's family.
| id required | string Product identifier |
Attribute set assignment data
| attributeSetId required | string |
{- "attributeSetId": "01912345-6789-7abc-def0-123456789abc"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Derived completeness score, counts and the list of unmet requirements for a product.
| id required | string CatalogCompleteness identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "subjectType": "product",
- "score": 0,
- "requiredCount": 0,
- "filledCount": 0,
- "hasFamily": false,
- "enrichmentStatus": "draft",
- "isPublishable": false,
- "missing": [
- {
- "kind": "core",
- "field": "string",
- "name": "string",
- "attributeDefinitionId": "string"
}
]
}Update a catalog product's description
| id required | string Product identifier |
The new Product resource
| description | string or null |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Transition a product to the discontinued status.
| id required | string Product identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Move the product through its enrichment lifecycle (draft → enriching → review → published; back-transitions allowed for rework).
| id required | string Product identifier |
Enrichment status transition data
| status required | string Enum: "draft" "enriching" "review" "published" |
{- "status": "enriching"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Generate the missing Variants — the full Cartesian product of the product's variant axes' (OptionSet) values. Idempotent: combinations whose Variant already exists are skipped.
| id required | string Product identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Transition a discontinued product back to the active status.
| id required | string Product identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Set the product's meta title, meta description and URL slug. The slug must be unique per tenant among products.
| id required | string Product identifier |
The new Product resource
| metaTitle | string or null |
| metaDescription | string or null |
| slug | string or null |
{- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Set the product's Brand reference to the given Brand id, or clear it when brandId is null.
| id required | string Product identifier |
Brand assignment data
| brandId | string or null |
{- "brandId": "01912345-6789-7abc-def0-123456789abc"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Acme Widget",
- "brand": "Acme",
- "code": "ACME-WIDGET-01",
- "brandId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "description": "string",
- "seo": {
- "metaTitle": "Acme Widget — Buy Online",
- "metaDescription": "string",
- "slug": "acme-widget"
}, - "status": "active",
- "enrichmentStatus": "draft",
- "sourceLocale": "en-US",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00",
}Returns the product's attribute schema (sections → fields) resolved from its AttributeSet, with the effective member-override binding and current values.
| productId required | string The product id |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "productId": "string",
- "attributeSetId": "01912345-6789-7abc-def0-123456789abc",
- "attributeSetName": "Apparel",
- "sections": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "name": "Physical",
- "position": 0,
- "fields": [
- {
- "attributeDefinitionId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Colour",
- "code": "colour",
- "type": "select",
- "required": true,
- "filterable": true,
- "effectiveOptionSetRef": "01912345-6789-7abc-def0-123456789abc",
- "effectiveMaxSelections": 0,
- "value": "string"
}
]
}
]
}Retrieve a paginated list of catalog variants, optionally filtered by owning product.
| productId | string <uuid> Example: productId=01912345-6789-7abc-def0-123456789abc Filter by owning product UUID |
| status | string Enum: "active" "discontinued" Example: status=active Filter by variant status |
| search | string Example: search=Red Search by variant name |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Example: itemsPerPage=20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}
]
}Create a new sellable variant under an existing catalog product.
Catalog variant creation data
| productId required | string <uuid> |
| name required | string non-empty |
| uom | string non-empty Default: "H87" |
{- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Retrieve a single catalog variant by its UUID.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc Variant UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Update a variant's mutable profile (name, unit of measure).
| id required | string Variant identifier |
The updated Variant resource
| name | string [ 1 .. 255 ] characters |
| uom | string [ 1 .. 50 ] characters Default: "H87" |
| sku | string or null <= 100 characters |
| gtin | string or null <= 20 characters |
| mpn | string or null <= 100 characters |
| supplierReference | string or null <= 100 characters |
| hsCode | string or null <= 20 characters |
VariantMoneyInput (object) or null | |
VariantMoneyInput (object) or null | |
VariantMoneyInput (object) or null | |
| taxCategoryRef | string or null <= 255 characters |
| priceRounding | string Default: "none" Enum: "none" "nearest_9" "nearest_95" "nearest_99" |
{- "name": "string",
- "uom": "H87",
- "sku": "string",
- "gtin": "string",
- "mpn": "string",
- "supplierReference": "string",
- "hsCode": "string",
- "price": {
- "amountCents": 0,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 0,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 0,
- "currency": "USD"
}, - "taxCategoryRef": "string",
- "priceRounding": "none"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Set (upsert) the per-channel price override and published flag for a sales channel. A null priceOverride follows the catalog price.
| id required | string Variant identifier |
The new Variant resource
| channelRef required | string <= 255 characters |
VariantMoneyInput (object) or null | |
| published | boolean Default: false |
{- "channelRef": "string",
- "priceOverride": {
- "amountCents": 0,
- "currency": "USD"
}, - "published": false
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Remove the listing for a sales channel. No-op-safe when the channel was never listed.
| id required | string Variant identifier |
The new Variant resource
| channelRef required | string <= 255 characters |
{- "channelRef": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Set the per-channel listing published flag to true so the variant lands live on that channel. Preserves any price override; creates the listing when none exists. Idempotent.
| id required | string Variant identifier |
The new Variant resource
| channelRef required | string <= 255 characters Default: "" |
{- "channelRef": ""
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Set the per-channel listing published flag to false so the variant is hidden on that channel. Preserves any price override. No-op-safe when the variant was never listed. Idempotent.
| id required | string Variant identifier |
The new Variant resource
| channelRef required | string <= 255 characters Default: "" |
{- "channelRef": ""
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Derived completeness score, counts and the list of unmet requirements for a variant (scored against the owning product's family).
| id required | string CatalogCompleteness identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "subjectType": "product",
- "score": 0,
- "requiredCount": 0,
- "filledCount": 0,
- "hasFamily": false,
- "enrichmentStatus": "draft",
- "isPublishable": false,
- "missing": [
- {
- "kind": "core",
- "field": "string",
- "name": "string",
- "attributeDefinitionId": "string"
}
]
}Transition a variant to the discontinued status.
| id required | string Variant identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Move the variant through its enrichment lifecycle (draft → enriching → review → published; back-transitions allowed for rework).
| id required | string Variant identifier |
Enrichment status transition data
| status required | string Enum: "draft" "enriching" "review" "published" |
{- "status": "enriching"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Transition a discontinued variant back to the active status.
| id required | string Variant identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "name": "Red / Large",
- "uom": "H87",
- "status": "active",
- "enrichmentStatus": "draft",
- "axes": {
- "Size": "M",
- "Colour": "Red"
}, - "sku": "SKU-RED-XL",
- "gtin": "00012345678905",
- "mpn": "MPN-9",
- "supplierReference": "SUP-42",
- "hsCode": "6109.10",
- "price": {
- "amountCents": 1999,
- "currency": "USD"
}, - "compareAtPrice": {
- "amountCents": 1999,
- "currency": "USD"
}, - "unitCost": {
- "amountCents": 1999,
- "currency": "USD"
}, - "taxCategoryRef": "glacia:///finance/tax-categories/01ABC",
- "priceRounding": "none",
- "margin": 40.02,
- "channelListings": [
- {
- "channelRef": "glacia:///sales/channels/01CHAN",
- "priceOverrideCents": 1799,
- "priceOverrideCurrency": "USD",
- "published": true
}
], - "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Represents a node in the tenant's DAM media-library folder tree (catalog.md
§4.5). The collection endpoint returns the WHOLE flat list (not paginated);
the UI assembles the hierarchy client-side from each folder's parentId.
Archiving is a status change exposed as an explicit POST action, not a hard
DELETE, so the folder stays queryable.
List catalog media folders (whole tree, not paginated)
| status | string Enum: "active" "archived" Filter by status |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Creates a folder in the media-library tree. A null parentId creates a root folder.
The new CatalogFolder resource
| name required | string [ 1 .. 255 ] characters |
| parentId | string or null |
{- "name": "string",
- "parentId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Get a catalog media folder
| id required | string CatalogFolder identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Rename a catalog media folder
| id required | string CatalogFolder identifier |
The updated CatalogFolder resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Archive a catalog media folder
| id required | string CatalogFolder identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}A null newParentId promotes the folder to a root.
| id required | string CatalogFolder identifier |
The new CatalogFolder resource
| newParentId | string or null |
{- "newParentId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Product Shots",
- "parentId": "string",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}One media link on an owner (product, variant, brand, category or collection), linking a reusable Asset with a role + ordering + nullable locale/channel scope (catalog.md §4.5, DAM Phase 2).
ONE resource serves every owner because the representation and the board
semantics are identical — only the URI prefix differs. Each operation carries
its owner type in extraProperties, so a single provider/processor per action
serves products, variants, brands, categories and collections. The
mutating operations return the FULL
board (a list) rather than the single changed link, because linking, unlinking
and reordering all renormalise position and can move primary.
Get a single media link
| id required | string CatalogMediaLink identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}A product's linked media, in render order
| ownerId required | string CatalogMediaLink identifier |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}
]
}Link an asset to a product
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role | string Default: "gallery" Enum: "primary" "gallery" "swatch" "icon" |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "role": "primary",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Reorder a product's media
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| orderedAssetIds required | Array of strings |
{- "orderedAssetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Make a product media link the primary
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Change a product media link's role
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role required | string Enum: "primary" "gallery" "swatch" "icon" |
{- "assetId": "string",
- "role": "primary"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Set a product media link's locale/channel scope
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Unlink an asset from a product
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}One media link on an owner (product, variant, brand, category or collection), linking a reusable Asset with a role + ordering + nullable locale/channel scope (catalog.md §4.5, DAM Phase 2).
ONE resource serves every owner because the representation and the board
semantics are identical — only the URI prefix differs. Each operation carries
its owner type in extraProperties, so a single provider/processor per action
serves products, variants, brands, categories and collections. The
mutating operations return the FULL
board (a list) rather than the single changed link, because linking, unlinking
and reordering all renormalise position and can move primary.
A variant's linked media, in render order
| ownerId required | string CatalogMediaLink identifier |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}
]
}Link an asset to a variant
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role | string Default: "gallery" Enum: "primary" "gallery" "swatch" "icon" |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "role": "primary",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Reorder a variant's media
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| orderedAssetIds required | Array of strings |
{- "orderedAssetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Make a variant media link the primary
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Change a variant media link's role
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role required | string Enum: "primary" "gallery" "swatch" "icon" |
{- "assetId": "string",
- "role": "primary"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Set a variant media link's locale/channel scope
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Unlink an asset from a variant
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}One media link on an owner (product, variant, brand, category or collection), linking a reusable Asset with a role + ordering + nullable locale/channel scope (catalog.md §4.5, DAM Phase 2).
ONE resource serves every owner because the representation and the board
semantics are identical — only the URI prefix differs. Each operation carries
its owner type in extraProperties, so a single provider/processor per action
serves products, variants, brands, categories and collections. The
mutating operations return the FULL
board (a list) rather than the single changed link, because linking, unlinking
and reordering all renormalise position and can move primary.
A brand's linked media, in render order
| ownerId required | string CatalogMediaLink identifier |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}
]
}Link an asset to a brand
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role | string Default: "gallery" Enum: "primary" "gallery" "swatch" "icon" |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "role": "primary",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Reorder a brand's media
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| orderedAssetIds required | Array of strings |
{- "orderedAssetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Make a brand media link the primary
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Change a brand media link's role
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role required | string Enum: "primary" "gallery" "swatch" "icon" |
{- "assetId": "string",
- "role": "primary"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Set a brand media link's locale/channel scope
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Unlink an asset from a brand
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}One media link on an owner (product, variant, brand, category or collection), linking a reusable Asset with a role + ordering + nullable locale/channel scope (catalog.md §4.5, DAM Phase 2).
ONE resource serves every owner because the representation and the board
semantics are identical — only the URI prefix differs. Each operation carries
its owner type in extraProperties, so a single provider/processor per action
serves products, variants, brands, categories and collections. The
mutating operations return the FULL
board (a list) rather than the single changed link, because linking, unlinking
and reordering all renormalise position and can move primary.
A category's linked media, in render order
| ownerId required | string CatalogMediaLink identifier |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}
]
}Link an asset to a category
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role | string Default: "gallery" Enum: "primary" "gallery" "swatch" "icon" |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "role": "primary",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Reorder a category's media
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| orderedAssetIds required | Array of strings |
{- "orderedAssetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Make a category media link the primary
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Change a category media link's role
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role required | string Enum: "primary" "gallery" "swatch" "icon" |
{- "assetId": "string",
- "role": "primary"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Set a category media link's locale/channel scope
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Unlink an asset from a category
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}One media link on an owner (product, variant, brand, category or collection), linking a reusable Asset with a role + ordering + nullable locale/channel scope (catalog.md §4.5, DAM Phase 2).
ONE resource serves every owner because the representation and the board
semantics are identical — only the URI prefix differs. Each operation carries
its owner type in extraProperties, so a single provider/processor per action
serves products, variants, brands, categories and collections. The
mutating operations return the FULL
board (a list) rather than the single changed link, because linking, unlinking
and reordering all renormalise position and can move primary.
A collection's linked media, in render order
| ownerId required | string CatalogMediaLink identifier |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}
]
}Link an asset to a collection
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role | string Default: "gallery" Enum: "primary" "gallery" "swatch" "icon" |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "role": "primary",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Reorder a collection's media
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| orderedAssetIds required | Array of strings |
{- "orderedAssetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Make a collection media link the primary
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Change a collection media link's role
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| role required | string Enum: "primary" "gallery" "swatch" "icon" |
{- "assetId": "string",
- "role": "primary"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Set a collection media link's locale/channel scope
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
| locale | string or null <= 35 characters |
| channelId | string or null <= 255 characters |
{- "assetId": "string",
- "locale": "string",
- "channelId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Unlink an asset from a collection
| ownerId required | string CatalogMediaLink identifier |
The new CatalogMediaLink resource
| assetId required | string |
{- "assetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "assetId": "string",
- "role": "primary",
- "position": 0,
- "locale": "string",
- "channelId": "string",
- "assetTitle": "string",
- "renditions": [
- {
- "name": "thumb",
- "mimeType": "image/webp",
- "width": 0,
- "height": 0,
- "sizeBytes": 0
}
]
}Represents a reusable, governed catalog option set — a value list (e.g. "Sizes", "Colours") that select/multiselect attributes bind to. Owns an ordered collection of values, each with a stable channel code and (for swatch sets) a colour.
List catalog option sets
| status | string Enum: "active" "archived" Filter by status |
| valueType | string Enum: "text" "swatch" Filter by value type |
| search | string Search by name or code |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 200 ] Default: 50 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}
]
}Create a catalog option set
The new OptionSet resource
| name required | string [ 1 .. 255 ] characters |
| description | string or null <= 2000 characters |
| code | string or null <= 64 characters |
| valueType | string or null Enum: "text" "swatch" |
| displayOrder | string or null Enum: "manual" "alphabetical" |
{- "name": "string",
- "description": "string",
- "code": "string",
- "valueType": "text",
- "displayOrder": "manual"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Get a catalog option set
| id required | string OptionSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Rename the set. code is immutable after creation.
| id required | string OptionSet identifier |
The updated OptionSet resource
| name | string [ 1 .. 255 ] characters |
{- "name": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Archive a catalog option set
| id required | string OptionSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}A null description clears the hint.
| id required | string OptionSet identifier |
The new OptionSet resource
| description | string or null <= 2000 characters |
{- "description": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Set the option set display order (manual or alphabetical)
| id required | string OptionSet identifier |
The new OptionSet resource
| displayOrder required | string Enum: "manual" "alphabetical" |
{- "displayOrder": "manual"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Reactivate a catalog option set
| id required | string OptionSet identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Set the option set value type (text or swatch)
| id required | string OptionSet identifier |
The new OptionSet resource
| valueType required | string Enum: "text" "swatch" |
{- "valueType": "text"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Add an allowed value
| id required | string OptionSet identifier |
The new OptionSet resource
| label required | string [ 1 .. 255 ] characters |
| code required | string [ 1 .. 64 ] characters |
| swatchColor | string or null^(#[0-9A-Fa-f]{6})$ |
| optionSetValueId | string or null Caller-minted id for this value. Optional: when omitted the processor mints one. |
{- "label": "string",
- "code": "string",
- "swatchColor": "string",
- "optionSetValueId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Reorder allowed values
| id required | string OptionSet identifier |
The new OptionSet resource
| orderedValueIds required | Array of strings |
{- "orderedValueIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Update an allowed value
| valueId required | string The option set value id to update |
| id required | string OptionSet identifier |
The updated OptionSet resource
| label | string or null [ 1 .. 255 ] characters |
| code | string or null [ 1 .. 64 ] characters |
| swatchColor | string or null^(#[0-9A-Fa-f]{6})$ |
{- "label": "string",
- "code": "string",
- "swatchColor": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Sizes",
- "description": "Standard apparel sizes",
- "code": "sizes",
- "valueType": "text",
- "displayOrder": "manual",
- "status": "active",
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF8800",
- "position": 0
}
], - "createdAt": "string",
- "updatedAt": "string"
}Represents a directed, typed association between two catalog records
(referenced by opaque ResourceUri) — related / cross-sell / up-sell / bundle
(catalog.md §4.9). quantity is a bundle component count; bundle EXPLOSION
into SkuBindings is a fulfilment-side read and is out of scope here.
Creates a directed association keyed on (fromRef, toRef, type). Linking the same triple twice returns 409 (DUPLICATE).
The new ProductAssociation resource
| fromRef required | string [ 1 .. 512 ] characters |
| toRef required | string [ 1 .. 512 ] characters |
| type required | string Enum: "related" "cross_sell" "up_sell" "bundle" |
| quantity | integer or null > 0 |
{- "fromRef": "string",
- "toRef": "string",
- "type": "related",
- "quantity": 0
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "fromRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "toRef": "glacia:///catalog/variants/01912345-6789-7abc-def0-123456789abc",
- "type": "cross_sell",
- "quantity": 2,
- "createdAt": "string",
- "updatedAt": "string"
}List the associations a product points to
| productRef required | string The source product's opaque ResourceUri |
| type | string Optional AssociationType filter (related, cross_sell, up_sell, bundle) |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "fromRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "toRef": "glacia:///catalog/variants/01912345-6789-7abc-def0-123456789abc",
- "type": "cross_sell",
- "quantity": 2,
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Get a product association
| id required | string ProductAssociation identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "fromRef": "glacia:///catalog/products/01912345-6789-7abc-def0-123456789abc",
- "toRef": "glacia:///catalog/variants/01912345-6789-7abc-def0-123456789abc",
- "type": "cross_sell",
- "quantity": 2,
- "createdAt": "string",
- "updatedAt": "string"
}Represents a Product↔Category assignment — a single membership of a Product (referenced by opaque ResourceUri) in a taxonomy node (catalog.md §4.1).
Filter by categoryId (products in a category) and/or productId (a product's categories).
| categoryId | string Filter to a category |
| productId | string Filter to a product's opaque ResourceUri |
| page | integer >= 1 Default: 1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "categoryId": "string",
- "categoryName": "Apparel",
- "categoryCode": "apparel",
- "createdAt": "string",
- "updatedAt": "string"
}
]
}Idempotent upsert keyed on productId + categoryId.
The new ProductCategoryAssignment resource
| productId required | string [ 1 .. 512 ] characters |
| categoryId required | string [ 1 .. 255 ] characters |
{- "productId": "string",
- "categoryId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "categoryId": "string",
- "categoryName": "Apparel",
- "categoryCode": "apparel",
- "createdAt": "string",
- "updatedAt": "string"
}Get a product-category assignment
| id required | string ProductCategoryAssignment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "categoryId": "string",
- "categoryName": "Apparel",
- "categoryCode": "apparel",
- "createdAt": "string",
- "updatedAt": "string"
}A Product View channel-sync card: the product's sync enablement on one sales
channel, plus whether it is eligible to sync (syncable) and — when it is not
— the human-readable reasons.
syncable/reasons are channel-agnostic in v1 (sourced from the product's
publication readiness). The UI renders a card per channel with an enable/disable
switch that is disabled-with-reason when syncable is false; enabling a
non-syncable product is also rejected server-side.
One card per sales channel for the product: current sync enablement, whether the product is syncable, and — if not — why.
| productId required | string The product id |
| page | integer Default: 1 The collection page number |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "channelId": "01912345-6789-7abc-def0-123456789abc",
- "channelName": "Nimbus Store",
- "enabled": true,
- "syncable": false,
- "reasons": [
- "A brand is required",
- "At least one image is required"
]
}
]
}Toggles the product's sync enablement on the channel and returns the refreshed card. Enabling a non-syncable product is rejected with 409 INCOMPLETE_FOR_PUBLICATION.
The new ProductChannelSyncCard resource
| productId required | string |
| channelId required | string |
| enabled | boolean Default: false |
{- "productId": "string",
- "channelId": "string",
- "enabled": false
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "channelId": "01912345-6789-7abc-def0-123456789abc",
- "channelName": "Nimbus Store",
- "enabled": true,
- "syncable": false,
- "reasons": [
- "A brand is required",
- "At least one image is required"
]
}Represents a Product↔Tag assignment — a single application of a Tag to a
Product (referenced by opaque ResourceUri) (catalog.md §4.3). The read of
"which tags does a product carry" lives on the Tag resource
(GET /catalog/tags/for-product).
Idempotent upsert keyed on productId + tagId.
The new ProductTagAssignment resource
| productId required | string [ 1 .. 512 ] characters |
| tagId required | string [ 1 .. 255 ] characters |
{- "productId": "string",
- "tagId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "tagId": "string",
- "tagName": "Clearance",
- "tagCode": "clearance",
- "tagColor": "#FF8800",
- "createdAt": "string",
- "updatedAt": "string"
}Get a product-tag assignment
| id required | string ProductTagAssignment identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "productId": "01912345-6789-7abc-def0-123456789abc",
- "tagId": "string",
- "tagName": "Clearance",
- "tagCode": "clearance",
- "tagColor": "#FF8800",
- "createdAt": "string",
- "updatedAt": "string"
}A Product's variant-defining axes (Phase 3-A) — the ordered OptionSets whose
Cartesian value combination generates the Product's Variants. Keyed by the
owning Product; every operation nests under /catalog/products/{productId}.
The ordered OptionSets selected as variant axes, each resolved to its values (the variant matrix is their Cartesian product).
| productId required | string The owning Product id |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "productId": "string",
- "axes": [
- {
- "optionSetId": "01912345-6789-7abc-def0-123456789abc",
- "optionSetName": "Sizes",
- "optionSetCode": "sizes",
- "valueType": "text",
- "position": 0,
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF0000",
- "sortOrder": 0
}
]
}
]
}Select an existing OptionSet as a variant-defining axis. An OptionSet can be attached at most once; order of attachment sets the matrix column order.
| productId required | string ProductVariantAxes identifier |
The new ProductVariantAxes resource
| optionSetId required | string [ 1 .. 64 ] characters |
{- "optionSetId": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "productId": "string",
- "axes": [
- {
- "optionSetId": "01912345-6789-7abc-def0-123456789abc",
- "optionSetName": "Sizes",
- "optionSetCode": "sizes",
- "valueType": "text",
- "position": 0,
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF0000",
- "sortOrder": 0
}
]
}
]
}Reorder the axes; the payload must be a full permutation of the current axes.
| productId required | string ProductVariantAxes identifier |
The new ProductVariantAxes resource
| orderedOptionSetIds required | Array of strings |
{- "orderedOptionSetIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "productId": "string",
- "axes": [
- {
- "optionSetId": "01912345-6789-7abc-def0-123456789abc",
- "optionSetName": "Sizes",
- "optionSetCode": "sizes",
- "valueType": "text",
- "position": 0,
- "values": [
- {
- "id": "01912345-6789-7abc-def0-123456789abc",
- "label": "Medium",
- "code": "medium",
- "swatchColor": "#FF0000",
- "sortOrder": 0
}
]
}
]
}Represents a catalog SKU binding — the explicit link between a Variant and a per-principal InventoryItem (referenced by opaque ResourceUri).
Retrieve a paginated list of SKU bindings, optionally filtered by variant (items-for-variant) or item (variant-for-item).
| variantRef | string <uuid> Example: variantRef=01912345-6789-7abc-def0-123456789abc Filter by bound Variant id (items-for-variant) |
| itemId | string <uuid> Example: itemId=01912345-6789-7abc-def0-123456789abc Filter by bound InventoryItem id (variant-for-item) |
| principalRef | string Example: principalRef=glacia:///inventory/principals/01912345-6789-7abc-def0-123456789abc Filter by owning Principal ResourceUri |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination |
| itemsPerPage | integer [ 1 .. 100 ] Default: 20 Example: itemsPerPage=20 Number of items per page |
{- "totalItems": 0,
- "search": {
- "@type": "string",
- "template": "string",
- "variableRepresentation": "string",
- "mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}, - "view": {
- "@id": "string",
- "@type": "string",
- "first": "string",
- "last": "string",
- "previous": "string",
- "next": "string"
}, - "member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "itemId": "01912345-6789-7abc-def0-123456789abc",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "principalRef": "glacia:///inventory/principals/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}
]
}Bind a per-principal InventoryItem (opaque ResourceUri) to an existing Catalog Variant.
SKU binding creation data
| itemId required | string <uuid> |
| variantRef required | string <uuid> |
| principalRef required | string |
{- "itemId": "01912345-6789-7abc-def0-123456789abc",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "principalRef": "glacia:///inventory/principals/01912345-6789-7abc-def0-123456789abc"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "itemId": "01912345-6789-7abc-def0-123456789abc",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "principalRef": "glacia:///inventory/principals/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Retrieve a single SKU binding by its UUID.
| id required | string <uuid> Example: 01912345-6789-7abc-def0-123456789abc SKU binding UUID |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "01912345-6789-7abc-def0-123456789abc",
- "itemId": "01912345-6789-7abc-def0-123456789abc",
- "variantRef": "01912345-6789-7abc-def0-123456789abc",
- "principalRef": "glacia:///inventory/principals/01912345-6789-7abc-def0-123456789abc",
- "createdAt": "2024-01-15T10:00:00+00:00",
- "updatedAt": "2024-06-15T14:30:00+00:00"
}Represents a catalog tag — a free-form, tenant-scoped label applied to Products (catalog.md §4.3). Products carry tags via the ProductTagAssignment resource. Tags can be MERGED into one another.
Archive a catalog tag
| id required | string Tag identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Clearance",
- "code": "clearance",
- "color": "#FF8800",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Re-points every product assignment from the source tags to this target then archives the sources.
| id required | string Tag identifier |
The new Tag resource
| sourceTagIds required | Array of strings non-empty |
{- "sourceTagIds": [
- "string"
]
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Clearance",
- "code": "clearance",
- "color": "#FF8800",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Reactivate a catalog tag
| id required | string Tag identifier |
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Clearance",
- "code": "clearance",
- "color": "#FF8800",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}Set or clear the chip colour (null color clears it).
| id required | string Tag identifier |
The new Tag resource
| color | string or null^(#[0-9A-Fa-f]{6})$ |
{- "color": "string"
}{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "name": "Clearance",
- "code": "clearance",
- "color": "#FF8800",
- "status": "active",
- "createdAt": "string",
- "updatedAt": "string"
}