catalog v2.0.md

Sales Layer Catalog REST API

The Sales Layer Catalog REST API provides programmatic access to the catalog data managed in Sales Layer.

Use this reference to retrieve, filter, create, update, or delete products, variants, categories, attribute sets, custom entities, metadata, and changelog records. These endpoints support synchronization, enrichment, publishing, reporting, and other integration workflows across ecommerce platforms, ERPs, marketplaces, DAM systems, supplier systems, and internal tools.

Start with metadata endpoints when your integration needs to discover available fields and relationships, use pagination and filtering for large reads, and rely on changelogs for incremental synchronization whenever possible.

Version: 2.0.0

Servers

Sales Layer Catalog API

https://api2.saleslayer.com/catalog

Download OpenAPI description

Sales Layer Catalog REST API

Attribute Sets

Filter Attribute Sets

Custom HTTP request header containing the API key used for authentication.

  Accept-Language

Standard HTTP request header indicates the natural language and locale that the client prefers.

It can take one of the following values:

null : The content localized in the default culture is available in the result.

culture-code : The content localized in the specified culture is available in the result.

Specifying various culture codes or q-factor weighting are currently disabled.

Examples:

Expression describing the list of Attribute Set resource properties to be included in the result.

The full list of the available Attribute Set resource properties is available in the JSON schema returned by the /AttributeSets/$metadata endpoint.

The name of the Attribute Set resource properties (both implicit and custom properties) must be specified.

Currently, the API does not support selecting the properties of an embedded resource or the properties of a resource within an embedded collection.

The expression follows the format: ATTRIBUTE_SET_PROPERTY1_NAME{, ATTRIBUTE_SET_PROPERTY2_NAME...}.

Examples:

Expression describing the list of collections embedded in the Attribute Set resource (Products) to be included in the result.

By default (if no value is supplied to this parameter), the result doesn't include the embedded collections (Products).

The expression follows the format: EMBEDDED_COLLECTION_OF_RESOURCE1_NAME{,EMBEDDED_COLLECTION_OF_RESOURCE1_NAME...}.

Currently only the embedded collections are supported, not the embedded resources.

Examples:

Expression describing the filters applied to the resources included in the result.

By default (if no value is supplied to this parameter), no filters are applied

Currently, filtering on the nested resources properties is not supported.

The expression follows the ODATA version 4.01 URI conventions (http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html).

The following filter options are currently supported:

Currently it supports only the operators and functions applied on the properties of the root resource (Category).

The logical operators/functions are applied over the data types of the corresponding properties in the filter criteria:

Expression describing the ordering applied to the properties of resources included in the result.

By default (if no value is supplied to this parameter), no sorting is applied.

Currently, ordering on multiple properties and ordering on embedded resources properties are not supported.

The expression follows the format: RESOURCE_PROPERTY_NAME (asc)|desc.

Examples:

Expression setting up result's paging according to the limit and offset paging strategy.

Using this paging strategy involves using both $skip and $top parameters.

We recommend limit and offset paging strategy for the extraction of data where $orderby clauses needs to be applied to the data to be extracted.

limit and offset paging is not as fast as the continuation token paging, but has 2 advantages over the later:

The expression follows the format: NUMBER_OF_ITEMS_TO_BE_SKIPPED_IN_THE_RESULT.

The page size for the Attribute Set resource is limited by default to 100 items.

The paging is performed through resource (Attribute Set), not through the resources in the embedded collections.

Examples:

Expression setting up the continuation token used in paging the result.

The expression follows the format: [CONTINUATION_TOKEN].

The page size for the Attribute Set resource is limited to 1 item.

The paging is performed through resource (Attribute Set), not through the resources in the embedded collections.

Examples:

Expression setting up the number of items in the result.

The expression follows the format: [PAGE_SIZE].

The page size for the Attribute Set resource is limited to 1 item.

The paging is performed through resource (Attribute Set), not through the resources in the embedded collections.

Examples:

Get Attribute Set

Custom HTTP request header containing the API key used for authentication.

  Accept-Language

Standard HTTP request header indicates the natural language and locale that the client prefers.

It can take one of the following values:

null : The content localized in the default culture is available in the result.

culture-code : The content localized in the specified culture is available in the result.

Specifying various culture codes or q-factor weighting are currently disabled.

Examples:

Expression describing the list of Attribute Set resource properties to be included in the result.

The full list of the available Attribute Set resource properties is available in the JSON schema returned by the /AttributeSets/$metadata endpoint.

The name of the Attribute Set resource properties (both implicit and custom properties) must be specified.

Currently, the API does not support selecting the properties of an embedded resource or the properties of a resource within an embedded collection.

The expression follows the format: ATTRIBUTE_SET_PROPERTY1_NAME{, ATTRIBUTE_SET_PROPERTY2_NAME...}.

Examples:

Expression describing the list of collections embedded in the Attribute Set resource (Products) to be included in the result.

By default (if no value is supplied to this parameter), the result doesn't include the embedded collections (Products).

The expression follows the format: EMBEDDED_COLLECTION_OF_RESOURCE1_NAME{,EMBEDDED_COLLECTION_OF_RESOURCE1_NAME...}.

Currently only the embedded collections are supported, not the embedded resources.

Examples:

Filter Attribute Set Products

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Products/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=prod_description,prod_tags

$expand

Comma-separated list of embedded collections to include (e.g. Variants). By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Variants

$filter

OData v4.01 URI conventions. Filtering is restricted to properties of the root resource (Product).

Comparison operators: eq, ne, gt, ge, lt, le

Logical operators: and, or, not

Set operator: in

String functions: contains, startswith, endswith

Examples:

$orderby

Single property, ascending by default. Multi-property ordering and ordering on embedded properties are not supported.

Examples:

Pagination — $top, $skip, $skipToken

Paging applies only to the root resource (Product), never to embedded collections.

Response

200 OK — CollectionRepresentation with the matching Product resources, pagination metadata (Count, Skip, Top, HasNext, continuation token) and the cultures echoed from Accept-Language.

Error Responses

Example

Request: http GET /AttributeSets(7)/Products?$filter=contains(prod_description,'pro')&$top=20 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Attribute Set Metadata

Attribute Sets v2

Get Attribute Sets

See also: A legacy OData-style version of this endpoint is available at GET /AttributeSets.

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — GetAttributeSetsResponse containing the list of attribute sets.

Error Responses

Example

Request: http GET /v2/AttributeSets HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Create Attribute Set

The Product and Variant layouts behave differently when omitted: an omitted productLayout falls back to a standard default layout, whereas an omitted variantLayout is not created at all (no Variant layout is stored). A Variant layout can be added later with PATCH /v2/AttributeSets({id}).

Authentication

Requires a valid API key in the X-API-KEY header.

Request Body

Field Required Description
name ✅ Yes Unique name for the attribute set within the tenant.
productLayout ❌ No Form layout for Products. Defaults to the standard layout when omitted.
variantLayout ❌ No Form layout for Variants. When omitted, no Variant layout is created (it can be added later via PATCH).

Layout Structure

Each layout is a JSON document with a sections array. Each section has a title and a rows array. Each row has a fields array and an optional divider (dividerType, dividerTitle). Each field carries an attributeId and a size.

json { "sections": [ { "title": "General", "rows": [ { "fields": [ { "attributeId": "prod_title", "size": "half" }, { "attributeId": "prod_ref", "size": "half" } ] }, { "dividerType": "normal", "dividerTitle": "Details", "fields": [ { "attributeId": "prod_description", "size": "row" } ] } ] } ] }

size — width of the field in the form grid. One of: quarter, half, threeQuarters, row.

dividerType — optional visual separator above the row. One of: normal, wide, lineBreak. dividerTitle is optional and only meaningful when dividerType is set. Both properties are omitted from rows that have no divider.

Layout Validation

A layout may contain any subset of the tenant's valid attributes — you do not need to include all of them. Attributes omitted from the layout simply do not appear in the form for this attribute set; they are not removed from the tenant.

If a layout is supplied it must satisfy all of the following rules; otherwise the request returns 400 Bad Request describing each failure:

Required attributes

These attributes must always be present in their respective layout:

Layout Required attribute IDs
productLayout typ_id, prod_ref, prod_title, cat_ref, prod_stat, prod_description, prod_image, prod_tags
variantLayout frmt_stat, prod_ref, frmt_ref, frmt_tags

Response

201 Created — The Location header points to the new resource: /v2/AttributeSets({id}). The response body contains the created attribute set (CreateAttributeSet2Response).

Error Responses

Example

Request: http POST /v2/AttributeSets HTTP/1.1 X-API-KEY: your-api-key-here Content-Type: application/json

{ "name": "Electronics" }

Response: http HTTP/1.1 201 Created Location: /v2/AttributeSets(7)

Get Attribute Set

Any other value is rejected with 400 Bad Request.

The response includes the attribute set name and its form layout configuration for Products and Variants (ProductLayout, VariantLayout). When the set has no Variant layout configured, VariantLayout and VariantAttributeIds are omitted from the response.

See also: A legacy OData-style version of this endpoint is available at GET /AttributeSets({attributeSetIdentifier}).

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — The requested attribute set with its layout configuration.

Error Responses

Example

Request: http GET /v2/AttributeSets(1) HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Update Attribute Set

Any other value is rejected with 400 Bad Request.

Authentication

Requires a valid API key in the X-API-KEY header.

Request Body

All fields are optional. Omitted (null) fields are left unchanged (PATCH semantics). When a layout is supplied it fully replaces the currently stored layout — it is not merged.

Field Description
name New unique name for the attribute set.
productLayout Replacement form layout for Products.
variantLayout Form layout for Variants. Sets the Variant layout when the set does not yet have one (e.g. created without it), or replaces it when it does.

Layout Structure

Each layout is a JSON document with a sections array. Each section has a title and a rows array. Each row has a fields array and an optional divider (dividerType, dividerTitle). Each field carries an attributeId and a size.

json { "sections": [ { "title": "General", "rows": [ { "fields": [ { "attributeId": "prod_title", "size": "half" }, { "attributeId": "prod_ref", "size": "half" } ] }, { "dividerType": "normal", "dividerTitle": "Details", "fields": [ { "attributeId": "prod_description", "size": "row" } ] } ] } ] }

size — width of the field in the form grid. One of: quarter, half, threeQuarters, row.

dividerType — optional visual separator above the row. One of: normal, wide, lineBreak. dividerTitle is optional and only meaningful when dividerType is set. Both properties are omitted from rows that have no divider.

Layout Validation

A layout may contain any subset of the tenant's valid attributes — you do not need to include all of them. Attributes omitted from the layout simply do not appear in the form for this attribute set; they are not removed from the tenant.

This is different from PUT /Categories/layout and PUT /CustomEntities('{id}')/layout, where the payload must contain every attribute currently in the stored layout — no more, no less.

If a layout is supplied it must satisfy all of the following rules; otherwise the request returns 400 Bad Request describing each failure:

Required attributes

These attributes must always be present in their respective layout:

Layout Required attribute IDs
productLayout typ_id, prod_ref, prod_title, cat_ref, prod_stat, prod_description, prod_image, prod_tags
variantLayout frmt_stat, prod_ref, frmt_ref, frmt_tags

Response

200 OK — The updated attribute set (UpdateAttributeSet2Response).

Error Responses

Example

Request: http PATCH /v2/AttributeSets(1) HTTP/1.1 X-API-KEY: your-api-key-here Content-Type: application/json

{ "name": "Electronics v2" }

Response: http HTTP/1.1 200 OK Content-Type: application/json

Delete Attribute Set

Authentication

Requires a valid API key in the X-API-KEY header.

Query Parameters

Parameter Required Description
deleteAssociatedProductsAndVariants ❌ No When true, products and variants associated to the attribute set are deleted along with it. When false or omitted, those products and variants are reassigned to the tenant's default attribute set.

Response

Error Responses

Example

Request: http DELETE /v2/AttributeSets(7)?deleteAssociatedProductsAndVariants=false HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Categories

Filter Categories

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. The available property names are published in /Categories/$metadata. Selecting properties of embedded resources is not supported.

Example: $select=cat_title,cat_description

$expand

Comma-separated list of embedded collections to include. By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Products

$filter

OData v4.01 URI conventions. Filtering is restricted to properties of the root resource (Category).

Comparison operators: eq, ne, gt, ge, lt, le

Logical operators: and, or, not

Set operator: in

String functions: contains, startswith, endswith

Examples:

$orderby

Single property, ascending by default. Multi-property ordering and ordering on embedded properties are not supported.

Examples:

Pagination — $top, $skip, $skipToken

Paging applies only to the root resource (Category), never to embedded collections.

Response

200 OK — CollectionRepresentation with the matching Category resources, pagination metadata (Count, Skip, Top, HasNext, continuation token) and the cultures echoed from Accept-Language.

Error Responses

Example

Request: http GET /Categories?$filter=contains(cat_title,'pro')&$orderby=cat_title asc&$top=20 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Create Category

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object whose properties match the writable fields published by /Categories/$metadata. The body is normalized before reaching the application layer:

Response

201 Created — The Location header points to the new resource: /Categories({id}). No response body.

Error Responses

Example

Request: http POST /Categories HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "cat_title": "Outdoor", "cat_ref": "OUT-001", "cat_description": "Outdoor products category" }

Response: http HTTP/1.1 201 Created Location: /Categories(123)

Get Category

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Categories/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=cat_title,cat_description

$expand

Comma-separated list of embedded collections to include. By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Products

$filter, $orderby, $top, $skip and $skipToken are not applicable to this endpoint.

Response

200 OK — EntityRepresentation with the requested Category resource.

Error Responses

Example

Request: http GET /Categories(123)?$select=cat_title,cat_description&$expand=Products HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Update Category

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object with the subset of writable fields to update (PATCH semantics — only the supplied fields are modified). Field names must match those published by /Categories/$metadata. Normalization rules:

Response

200 OK — Update applied.

Error Responses

Example

Request: http PATCH /Categories(123) HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "cat_title": "Outdoor & Camping" }

Response: http HTTP/1.1 200 OK

Delete Category

Authentication

Requires a valid API key in the X-API-KEY header.

Response

204 No Content — Category deleted.

Error Responses

Example

Request: http DELETE /Categories(123) HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 204 No Content

Filter Category Products

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Products/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=prod_description,prod_tags

$expand

Comma-separated list of embedded collections to include (e.g. Variants). By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Variants

$filter

OData v4.01 URI conventions. Filtering is restricted to properties of the root resource (Product).

Comparison operators: eq, ne, gt, ge, lt, le

Logical operators: and, or, not

Set operator: in

String functions: contains, startswith, endswith

Examples:

$orderby

Single property, ascending by default. Multi-property ordering and ordering on embedded properties are not supported.

Examples:

Pagination — $top, $skip, $skipToken

Paging applies only to the root resource (Product), never to embedded collections.

Response

200 OK — CollectionRepresentation with the matching Product resources, pagination metadata (Count, Skip, Top, HasNext, continuation token) and the cultures echoed from Accept-Language.

Error Responses

Example

Request: http GET /Categories(123)/Products?$filter=contains(prod_description,'pro')&$top=20 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Category Product

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Products/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=prod_description,prod_tags

$expand

Comma-separated list of embedded collections to include (e.g. Variants). By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Variants

Response

200 OK — EntityRepresentation with the Product resource scoped to the given Category.

Error Responses

Example

Request: http GET /Categories(123)/Products(456)?$expand=Variants HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Categories Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries (CollectionRepresentation).

Error Responses

Example

Request: http GET /Categories/Changelog?$orderby=changedAt desc&$top=50 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Category Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries for the specified Category.

Error Responses

Example

Request: http GET /Categories(123)/Changelog?$top=20 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Category Layout

The Category model has a single layout shared by all categories. A layout must already be configured for the tenant; if none exists the request fails.

Update Category Layout

A layout must already exist for the tenant; this operation replaces it and does not create one. If none exists the request returns 404 Not Found.

⚠️ All attributes are required

The payload must contain every attribute currently in the stored layout — no more, no less. Omitting an attribute removes it from the form. Adding an attribute that is not already in the layout is also rejected. Use GET /Categories/layout first to obtain the current set of attributes.

This is different from PATCH /v2/AttributeSets({id}), where layouts may contain any subset of the tenant's attributes.

Layout Structure

The payload has the same shape as the GET /Categories/layout response:

json { "sections": [ { "title": "General", "rows": [ { "fields": [ { "attributeId": "cat_title", "size": "half" }, { "attributeId": "cat_ref", "size": "half" } ] }, { "dividerType": "normal", "dividerTitle": "Details", "fields": [ { "attributeId": "cat_description", "size": "row" } ] } ] } ] }

size — one of: quarter, half, threeQuarters, row.

dividerType — optional; one of: normal, wide, lineBreak. dividerTitle is optional and only meaningful when dividerType is set. Both are omitted from rows that have no divider.

Validation Rules

If any rule is violated the request returns 400 Bad Request describing each failure:

Get Category Metadata

The schema should be consulted to build requests against the other Category endpoints (which fields can be used in $select, $filter, $orderby, request bodies, etc.).

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — Returns the JSON Schema as a ServiceDocumentRepresentation.

Error Responses

Example

Request: http GET /Categories/$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Products

Filter Products

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Products/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=prod_description,prod_tags

$expand

Comma-separated list of embedded collections to include (e.g. Variants). By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Variants

$filter

OData v4.01 URI conventions. Filtering is restricted to properties of the root resource (Product).

Comparison operators: eq, ne, gt, ge, lt, le

Logical operators: and, or, not

Set operator: in

String functions: contains, startswith, endswith

Examples:

$orderby

Single property, ascending by default. Multi-property ordering and ordering on embedded properties are not supported.

Examples:

Pagination — $top, $skip, $skipToken

Paging applies only to the root resource (Product), never to embedded collections.

Response

200 OK — CollectionRepresentation with the matching Product resources, pagination metadata (Count, Skip, Top, HasNext, continuation token) and the cultures echoed from Accept-Language.

Error Responses

Example

Request: http GET /Products?$filter=contains(prod_description,'pro')&$orderby=prod_description asc&$top=20 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Create Product

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object whose properties match the writable fields published by /Products/$metadata. The body is normalized before reaching the application layer:

Response

201 Created — The Location header points to the new resource: /Products({id}). No response body.

Error Responses

Example

Request: http POST /Products HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "prod_ref": "SKU-001", "prod_description": "New product", "cat_id": 123 }

Response: http HTTP/1.1 201 Created Location: /Products(456)

Get Product

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for localized content.

OData Query Support

$select

Comma-separated list of root-resource property names to include in the response. See /Products/$metadata for the available properties. Selecting properties of embedded resources is not supported.

Example: $select=prod_description,prod_tags

$expand

Comma-separated list of embedded collections to include (e.g. Variants). By default, embedded collections are not included. Only embedded collections (not embedded resources) are supported.

Example: $expand=Variants

Response

200 OK — EntityRepresentation with the Product resource.

Error Responses

Example

Request: http GET /Products(456)?$select=prod_description,prod_tags&$expand=Variants HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US

Response: http HTTP/1.1 200 OK Content-Type: application/json

Update Product

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object with the subset of writable fields to update (PATCH semantics — only the supplied fields are modified). Field names must match those published by /Products/$metadata. Normalization rules:

Response

200 OK — Update applied.

Error Responses

Example

Request: http PATCH /Products(456) HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "prod_description": "Updated description", "cat_id": [123, 124] }

Response: http HTTP/1.1 200 OK

Delete Product

Authentication

Requires a valid API key in the X-API-KEY header.

Response

204 No Content — Product deleted.

Error Responses

Example

Request: http DELETE /Products(456) HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 204 No Content

Filter Product Variants

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for the localized content:

Multiple culture codes or q-factor weighting are not supported.

OData Query Support

The endpoint supports a subset of OData v4.01 URI conventions. The full list of available properties can be obtained from GET /Variants/$metadata.

$select

Comma-separated list of Variant properties (implicit or custom) to include in the result. Selection of properties inside embedded resources/collections is not supported.

$expand

Comma-separated list of embedded collections to include in the result. By default, embedded collections are not included. Only embedded collections are supported (not embedded resources).

$filter

Boolean expression applied on root resource properties. Filtering on nested resource properties is not supported.

$orderby

Sorting expression on a single root resource property. Multiple properties and embedded properties are not supported. Format: PROPERTY (asc|desc). Default direction is asc.

$top

Page size. Maximum and default is 100 items.

$skip

Offset for the limit-and-offset paging strategy (used together with $top). Recommended when $orderby is required.

$skipToken

Continuation token for the continuation-token paging strategy. Faster than limit-and-offset but does not support $orderby.

Response

200 OK — Returns a CollectionRepresentation with the matching Variant resources associated to the Product.

Error Responses

Example

Request: http GET /Products(987)/Variants?$select=frmt_ref&$top=10 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: es

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Product Variant

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for the localized content:

Multiple culture codes or q-factor weighting are not supported.

OData Query Support

The endpoint supports a subset of OData v4.01 URI conventions. The full list of available properties can be obtained from GET /Variants/$metadata.

$select

Comma-separated list of Variant properties (implicit or custom) to include in the result. Selection of properties inside embedded resources/collections is not supported.

$expand

Comma-separated list of embedded collections to include in the result. By default, embedded collections are not included. Only embedded collections are supported (not embedded resources).

Response

200 OK — Returns an EntityRepresentation with the requested Variant.

Error Responses

Example

Request: http GET /Products(987)/Variants(12345)?$select=frmt_ref HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: es

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Products Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries (CollectionRepresentation).

Error Responses

Example

Request: http GET /Products/Changelog?$orderby=changedAt desc&$top=50 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Product Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries for the specified Product.

Error Responses

Example

Request: http GET /Products(123)/Changelog?$top=20 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Product Metadata

The schema should be consulted to build requests against the other Product endpoints (which fields can be used in $select, $filter, $orderby, request bodies, etc.).

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — Returns the JSON Schema as a ServiceDocumentRepresentation.

Error Responses

Example

Request: http GET /Products/$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Variants

Filter Variants

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for the localized content:

Multiple culture codes or q-factor weighting are not supported.

OData Query Support

The endpoint supports a subset of OData v4.01 URI conventions. The full list of available properties can be obtained from GET /Variants/$metadata.

$select

Comma-separated list of Variant properties (implicit or custom) to include in the result. Selection of properties inside embedded resources/collections is not supported.

$expand

Comma-separated list of embedded collections to include in the result. By default, embedded collections are not included. Only embedded collections are supported (not embedded resources).

$filter

Boolean expression applied on root resource properties. Filtering on nested resource properties is not supported.

$orderby

Sorting expression on a single root resource property. Multiple properties and embedded properties are not supported. Format: PROPERTY (asc|desc). Default direction is asc.

$top

Page size. Maximum and default is 100 items.

$skip

Offset for the limit-and-offset paging strategy (used together with $top). Recommended when $orderby is required.

$skipToken

Continuation token for the continuation-token paging strategy. Faster than limit-and-offset but does not support $orderby.

Response

200 OK — Returns a CollectionRepresentation with the matching Variant resources.

Error Responses

Example

Request: http GET /Variants?$select=frmt_ref&$top=10 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: es

Response: http HTTP/1.1 200 OK Content-Type: application/json

Create Variant

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object whose properties match the writable fields published by /Variants/$metadata. The body is normalized before reaching the application layer:

Response

201 Created — The Location header points to the new resource: /Variants({id}). No response body.

Error Responses

Example

Request: http POST /Variants HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "frmt_ref": "SKU-001-RED-M", "prod_id": 456 }

Response: http HTTP/1.1 201 Created Location: /Variants(789)

Get Variant

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for the localized content:

Multiple culture codes or q-factor weighting are not supported.

OData Query Support

The endpoint supports a subset of OData v4.01 URI conventions. The full list of available properties can be obtained from GET /Variants/$metadata.

$select

Comma-separated list of Variant properties (implicit or custom) to include in the result. Selection of properties inside embedded resources/collections is not supported.

$expand

Comma-separated list of embedded collections to include in the result. By default, embedded collections are not included. Only embedded collections are supported (not embedded resources).

Response

200 OK — Returns an EntityRepresentation with the requested Variant.

Error Responses

Example

Request: http GET /Variants(12345)?$select=frmt_ref HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: es

Response: http HTTP/1.1 200 OK Content-Type: application/json

Update Variant

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object with the subset of writable fields to update (PATCH semantics — only the supplied fields are modified). Field names must match those published by /Variants/$metadata. Normalization rules:

Response

200 OK — Update applied.

Error Responses

Example

Request: http PATCH /Variants(789) HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "frmt_ref": "SKU-001-RED-L" }

Response: http HTTP/1.1 200 OK

Delete Variant

Authentication

Requires a valid API key in the X-API-KEY header.

Response

204 No Content — Variant deleted.

Error Responses

Example

Request: http DELETE /Variants(789) HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 204 No Content

Get Variants Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries (CollectionRepresentation).

Error Responses

Example

Request: http GET /Variants/Changelog?$orderby=changedAt desc&$top=50 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Variant Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries for the specified Variant.

Error Responses

Example

Request: http GET /Variants(123)/Changelog?$top=20 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Variant Metadata

The schema should be consulted to build requests against the other Variant endpoints (which fields can be used in $select, $filter, $orderby, request bodies, etc.).

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — Returns the JSON Schema as a ServiceDocumentRepresentation.

Error Responses

Example

Request: http GET /Variants/$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Custom Entities

Filter Custom Entities

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Indicates the preferred natural language and locale for the localized content:

Multiple culture codes or q-factor weighting are not supported.

OData Query Support

The endpoint supports a subset of OData v4.01 URI conventions. The full list of available properties can be obtained from GET /CustomEntities('{denominator}')/$metadata.

$select

Comma-separated list of Custom Entity properties (implicit or custom) to include in the result. Selection of properties inside embedded resources/collections is not supported.

$expand

Comma-separated list of embedded collections to include in the result (when applicable). By default, embedded collections are not included. Only embedded collections are supported (not embedded resources).

$filter

Boolean expression applied on root resource properties. Filtering on nested resource properties is not supported.

$orderby

Sorting expression on a single root resource property. Multiple properties and embedded properties are not supported. Format: PROPERTY (asc|desc). Default direction is asc.

$top

Page size. Maximum and default is 100 items.

$skip

Offset for the limit-and-offset paging strategy (used together with $top). Recommended when $orderby is required.

$skipToken

Continuation token for the continuation-token paging strategy. Faster than limit-and-offset but does not support $orderby.

Response

200 OK — Returns a CollectionRepresentation with the matching Custom Entity resources.

Error Responses

Example

Request: http GET /CustomEntities('Brand')?$select=abcd_description&$top=10 HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: es

Response: http HTTP/1.1 200 OK Content-Type: application/json

Create Custom Entity

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object whose properties match the writable fields published by /CustomEntities('{denominator}')/$metadata. The body is normalized before reaching the application layer:

Response

201 Created — The Location header points to the new resource: /CustomEntities('{denominator}')/Item({id}). No response body.

Error Responses

Example

Request: http POST /CustomEntities('Brand') HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "abcd_title": "Acme", "abcd_description": "Acme brand" }

Response: http HTTP/1.1 201 Created Location: /CustomEntities('Brand')/Item(42)

Update Custom Entity

Authentication

Requires a valid API key in the X-API-KEY header.

Headers

Accept-Language

Culture used to interpret the localized field values supplied in the request body.

Request Body

A single JSON object with the subset of writable fields to update (PATCH semantics — only the supplied fields are modified). Field names must match those published by /CustomEntities('{denominator}')/$metadata. Normalization rules:

Response

200 OK — Update applied.

Error Responses

Example

Request: http PATCH /CustomEntities('Brand')/item(42) HTTP/1.1 X-API-KEY: your-api-key-here Accept-Language: en-US Content-Type: application/json

{ "abcd_description": "Updated description" }

Response: http HTTP/1.1 200 OK

Delete Custom Entity

Authentication

Requires a valid API key in the X-API-KEY header.

Response

204 No Content — Custom Entity item deleted.

Error Responses

Example

Request: http DELETE /CustomEntities('Brand')/item(42) HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 204 No Content

Get Custom Entities Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries for the specified Custom Entity type.

Error Responses

Example

Request: http GET /CustomEntities('Brand')/Changelog?$top=20 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Custom Entity Changelog

Authentication

Requires a valid API key in the X-API-KEY header.

OData Query Support

Supports $filter, $orderby, $top, $skip over the changelog fields. $select, $expand and $skipToken are not supported by this endpoint.

Response

200 OK — Collection of changelog entries for the specified Custom Entity item.

Error Responses

Example

Request: http GET /CustomEntities('Brand')/Changelog(123)?$top=20 HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Custom Entity Layout

The layout describes how the Custom Entity edit form is rendered. It is a JSON document with a sections array; each section has a title and a rows array; each row has a fields array and, optionally, a divider (dividerType and dividerTitle). Each field carries an attributeId and a grid size — one of quarter, half, threeQuarters or row. When a row has a divider its dividerType is one of normal, wide or lineBreak. dividerType and dividerTitle are omitted from a row when they have no value, so a row without a divider contains only its fields.

A layout must be configured for the requested Custom Entity; if none exists the request returns 404 Not Found.

Update Custom Entity Layout

A layout must already exist for the requested Custom Entity — this operation replaces it and does not create one. If none exists the request returns 404 Not Found.

⚠️ All attributes are required

The payload must contain every attribute currently in the stored layout — no more, no less. Omitting an attribute removes it from the form. Adding an attribute that is not already in the layout is also rejected. Use GET /CustomEntities('{customEntityDenominator}')/layout first to obtain the current set of attributes.

This is different from PATCH /v2/AttributeSets({id}), where layouts may contain any subset of the tenant's attributes.

Layout Structure

The payload has the same shape as the GET /CustomEntities('{customEntityDenominator}')/layout response:

json { "sections": [ { "title": "General", "rows": [ { "fields": [ { "attributeId": "ce_title", "size": "half" }, { "attributeId": "ce_ref", "size": "half" } ] }, { "dividerType": "normal", "dividerTitle": "Details", "fields": [ { "attributeId": "ce_description", "size": "row" } ] } ] } ] }

size — one of: quarter, half, threeQuarters, row.

dividerType — optional; one of: normal, wide, lineBreak. dividerTitle is optional and only meaningful when dividerType is set. Both are omitted from rows that have no divider.

Validation Rules

If any rule is violated the request returns 400 Bad Request describing each failure:

Get Custom Entities Metadata

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — Returns the JSON Schema as a ServiceDocumentRepresentation.

Error Responses

Example

Request: http GET /CustomEntities/$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Get Custom Entity Metadata

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — Returns the JSON Schema as a ServiceDocumentRepresentation.

Error Responses

Example

Request: http GET /CustomEntities('Brand')/$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json

Metadata

Get Catalog Metadata

Authentication

Requires a valid API key in the X-API-KEY header.

Response

200 OK — A JSON schema document describing every resource in the Catalog (Category, Attribute Set, Product, Variant, Point of Sale) and the relationships between them. Use this document to build requests against the rest of the API.

Error Responses

Example

Request: http GET /$metadata HTTP/1.1 X-API-KEY: your-api-key-here

Response: http HTTP/1.1 200 OK Content-Type: application/json