Skip to content

Update Attribute Set

Request

Partially updates an existing attribute set identified by id. Accepted values:

  • default (case-insensitive) — updates the tenant's default attribute set.
  • Positive integer — updates the attribute set with that numeric ID.

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.

FieldDescription
nameNew unique name for the attribute set.
productLayoutReplacement form layout for Products.
variantLayoutForm 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.

{
  "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:

  • The layout must be well-formed: the sections, rows and fields arrays must all be present (non-null). Omitting a sections, rows or fields array (or sending it as null) is rejected.
  • Every attributeId included must exist for the entity type (Products or Variants) in the tenant's storage definition.
  • No attributeId may appear more than once across the entire layout.
  • Each field size must be one of: quarter, half, threeQuarters, row.
  • The sum of field sizes within any single row must not exceed a full row.
  • Every row must contain at least one field.
  • Section title values must be unique (case-insensitive).
  • When a row sets dividerType it must be one of: normal, wide, lineBreak.

Required attributes

These attributes must always be present in their respective layout:

LayoutRequired attribute IDs
productLayouttyp_id, prod_ref, prod_title, cat_ref, prod_stat, prod_description, prod_image, prod_tags
variantLayoutfrmt_stat, prod_ref, frmt_ref, frmt_tags

Response

200 OK — The updated attribute set (UpdateAttributeSet2Response).

Error Responses

  • 400 Bad Request — Invalid id, missing body, or layout validation failure.
  • 401 Unauthorized — Missing or invalid API key. Returned by the API gateway as { "message": "Unauthorized", "request_id": "d8aafa5b8f3e400b60bea0123dd33317" }.
  • 403 Forbidden — The API key does not have write permissions for this operation.
  • 404 Not Found — No attribute set with the given identifier exists for this tenant.
  • 500 Internal Server Error — Unexpected technical error.

Example

Request:

PATCH /v2/AttributeSets(1) HTTP/1.1
X-API-KEY: your-api-key-here
Content-Type: application/json
            
{ "name": "Electronics v2" }

Response:

HTTP/1.1 200 OK
Content-Type: application/json
Path
idstringrequired

Attribute set identifier: default or a positive integer.

Body

Attribute set update payload. All fields are optional.

namestring or null
productLayoutobject(FormLayoutDto)
Example:
{ "sections": [ { … }, { … } ] }
variantLayoutobject(FormLayoutDto)
Example:
{ "sections": [ { … }, { … } ] }
PATCH
/v2/AttributeSets({id})
curl -i -X PATCH \
  'https://api2.saleslayer.com/catalog/v2/AttributeSets({id})' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "string",
    "productLayout": {
      "sections": [
        {
          "title": "General",
          "rows": [
            {
              "fields": [
                {
                  "attributeId": "code",
                  "size": "half"
                },
                {
                  "attributeId": "name",
                  "size": "half"
                }
              ]
            },
            {
              "fields": [
                {
                  "attributeId": "parent_ref",
                  "size": "row"
                }
              ],
              "dividerType": "normal",
              "dividerTitle": "Hierarchy"
            }
          ]
        },
        {
          "title": "Content",
          "rows": [
            {
              "fields": [
                {
                  "attributeId": "status",
                  "size": "quarter"
                },
                {
                  "attributeId": "description",
                  "size": "threeQuarters"
                }
              ]
            },
            {
              "fields": [
                {
                  "attributeId": "image",
                  "size": "half"
                },
                {
                  "attributeId": "tags",
                  "size": "half"
                }
              ]
            }
          ]
        }
      ]
    },
    "variantLayout": {
      "sections": [
        {
          "title": "General",
          "rows": [
            {
              "fields": [
                {
                  "attributeId": "code",
                  "size": "half"
                },
                {
                  "attributeId": "name",
                  "size": "half"
                }
              ]
            },
            {
              "fields": [
                {
                  "attributeId": "parent_ref",
                  "size": "row"
                }
              ],
              "dividerType": "normal",
              "dividerTitle": "Hierarchy"
            }
          ]
        },
        {
          "title": "Content",
          "rows": [
            {
              "fields": [
                {
                  "attributeId": "status",
                  "size": "quarter"
                },
                {
                  "attributeId": "description",
                  "size": "threeQuarters"
                }
              ]
            },
            {
              "fields": [
                {
                  "attributeId": "image",
                  "size": "half"
                },
                {
                  "attributeId": "tags",
                  "size": "half"
                }
              ]
            }
          ]
        }
      ]
    }
  }'

Responses

OK

Bodyapplication/json
@etagstring or null
@contextstring or null
valueany or null
Response
{ "@readLink": "string", "@editLink": "string", "@etag": "string", "@navigationLinks": [ { … } ], "@associationLinks": [ { … } ], "@context": "string", "value": null }