Update attribute

Updates an existing attribute including its key, name, description, and field values. Field values are validated against the template's field types (e.g., image fields must be valid images, number fields must be numeric). For image fields, you may upload a file, pass a public image URL in the field key, or reference an existing app image by UUID via form field `image_id` when the field key is `image`, otherwise `<field_key>_image_id`.

PATCH/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}
API
Management
Updated
Apr 26, 2026

management-api:PATCH:/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}

Updates an existing attribute including its key, name, description, and field values. Field values are validated against the template's field types (e.g., image fields must be valid images, number fields must be numeric). For image fields, you may upload a file, pass a public image URL in the field key, or reference an existing app image by UUID via form field image_id when the field key is image, otherwise _image_id.

API ownership

  • API family: Management API
  • Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data.
  • Do not use from: Browser-only storefront code or public clients.
  • Guide route: /apis/management/latest

The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation.

Operation

  • Method: PATCH
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/attributes/\{attribute_template_key\}/\{attribute_key\}
  • Summary: Update attribute
  • Description: Updates an existing attribute including its key, name, description, and field values. Field values are validated against the template's field types (e.g., image fields must be valid images, number fields must be numeric). For image fields, you may upload a file, pass a public image URL in the field key, or reference an existing app image by UUID via form field image_id when the field key is image, otherwise _image_id.
  • OpenAPI contract: management-api
  • Operation ID: Not documented in the OpenAPI contract.

Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID.

Parameters4 parameters
NameInRequiredTypeDescription
app_slugpathYesstringApp slug
team_slugpathYesstringTeam slug
attribute_template_keypathYesstringAttribute template key
attribute_keypathYesstringAttribute key
Request bodyNo documented body
  • Required: No
  • Description: Not documented in the OpenAPI contract.
  • Content: application/x-www-form-urlencoded (object)

Schema

PropertyTypeRequiredDetails
keystringNoUnique key for the attribute. This needs to be unique per template.
namestringNoVariantName for the attribute
descriptionstringNoDescription for the attribute

Generated example (synthetic):

{
  "key": "string",
  "name": "string",
  "description": "string"
}
Responses4 statuses
StatusDescriptionContent
200Attributesapplication/json (object)
400Invalid request (e.g. bad UUID, validation error)application/json (object)
401Unauthorized accessapplication/json (object)
500Internal server errorapplication/json (object)

200 - object

Attribute With Fields Response

PropertyTypeRequiredDetails
dataobjectNo-
detailsstring[]NoAdditional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes
successbooleanNo-
Attribute With Fields
PropertyTypeRequiredDetails
created_atstringNo-
descriptionstringNo-
fieldsobject[]No-
filterablebooleanNo-
idstringNo-
keystringNo-
linked_attributesobject[]No-
namestringNo-
template_keystringNo-
template_namestringNo-
translatablebooleanNo-
translationsobjectNo-
updated_atstringNo-
valuesobjectNo-
Attribute Template Field
PropertyTypeRequiredDetails
created_atstringNo-
idstringNo-
keystringNo-
namestringNo-
typestringNo-
updated_atstringNo-
Attribute
PropertyTypeRequiredDetails
created_atstringNo-
descriptionstringNo-
filterablebooleanNo-
idstringNo-
keystringNo-
namestringNo-
template_keystringNo-
template_namestringNo-
translatablebooleanNo-
translationsobjectNo-
updated_atstringNo-
valuesobjectNo-
Attribute Translations
PropertyTypeRequiredDetails
descriptionobject[]No-
nameobject[]No-
{
  "data": {
    "created_at": "string",
    "description": "string",
    "fields": [
      {
        "created_at": "string",
        "id": "string",
        "key": "string",
        "name": "string",
        "type": "string",
        "updated_at": "string"
      }
    ],
    "filterable": false,
    "id": "string",
    "key": "string",
    "linked_attributes": [
      {
        "created_at": "string",
        "description": "string",
        "filterable": false,
        "id": "string",
        "key": "string",
        "name": "string",
        "template_key": "string",
        "template_name": "string",
        "translatable": false,
        "translations": {
          "description": null,
          "name": null
        },
        "updated_at": "string",
        "values": {}
      }
    ],
    "name": "string",
    "template_key": "string",
    "template_name": "string",
    "translatable": false,
    "translations": {
      "description": [
        {
          "id": null,
          "locale": null,
          "value": null
        }
      ],
      "name": [
        {
          "id": null,
          "locale": null,
          "value": null
        }
      ]
    },
    "updated_at": "string",
    "values": {}
  },
  "details": [
    "string"
  ],
  "success": false
}

400 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

401 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

500 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

Contract identity

Use these fields to confirm you are implementing the intended endpoint contract.

  • API family: Management API
  • Method: PATCH
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/attributes/\{attribute_template_key\}/\{attribute_key\}
  • Operation ID: Not documented in the OpenAPI contract.
  • OpenAPI tag: Attributes
  • OpenAPI summary: Update attribute

Update attribute

# Update attribute Updates an existing attribute including its key, name, description, and field values. Field values are validated against the template's field types (e.g., image fields must be valid images, number fields must be numeric). For image fields, you may upload a file, pass a public image URL in the field key, or reference an existing app image by UUID via form field `image_id` when the field key is `image`, otherwise `<field_key>_image_id`.
PATCH /api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}
Purpose

Updates an existing attribute including its key, name, description, and field values.

Required inputs

app_slug path team_slug path attribute_template_key path attribute_key path

Primary response

200 ยท Attributes

Operation key

management-api:PATCH:/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}

## API ownership - API family: Management API - Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data. - Do not use from: Browser-only storefront code or public clients. - Guide route: [/apis/management/latest](/apis/management/latest) The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation. ## Operation - Method: `PATCH` - Path: `/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}` - Summary: Update attribute - Description: Updates an existing attribute including its key, name, description, and field values. Field values are validated against the template's field types (e.g., image fields must be valid images, number fields must be numeric). For image fields, you may upload a file, pass a public image URL in the field key, or reference an existing app image by UUID via form field `image_id` when the field key is `image`, otherwise `<field_key>_image_id`. - OpenAPI contract: management-api - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:PATCH:/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}` Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID. ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | app_slug | path | Yes | string | App slug | | team_slug | path | Yes | string | Team slug | | attribute_template_key | path | Yes | string | Attribute template key | | attribute_key | path | Yes | string | Attribute key | ## Request body - Required: No - Description: Not documented in the OpenAPI contract. - Content: application/x-www-form-urlencoded (object) ### Schema | Property | Type | Required | Details | | --- | --- | --- | --- | | `key` | string | No | Unique key for the attribute. This needs to be unique per template. | | `name` | string | No | VariantName for the attribute | | `description` | string | No | Description for the attribute | **Generated example (synthetic):** ```json { "key": "string", "name": "string", "description": "string" } ``` ## Responses | Status | Description | Content | | --- | --- | --- | | 200 | Attributes | application/json (object) | | 400 | Invalid request (e.g. bad UUID, validation error) | application/json (object) | | 401 | Unauthorized access | application/json (object) | | 500 | Internal server error | application/json (object) | ### 200 - object #### Attribute With Fields Response | Property | Type | Required | Details | | --- | --- | --- | --- | | `data` | object | No | - | | `details` | string[] | No | Additional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes | | `success` | boolean | No | - | ##### Attribute With Fields | Property | Type | Required | Details | | --- | --- | --- | --- | | `created_at` | string | No | - | | `description` | string | No | - | | `fields` | object[] | No | - | | `filterable` | boolean | No | - | | `id` | string | No | - | | `key` | string | No | - | | `linked_attributes` | object[] | No | - | | `name` | string | No | - | | `template_key` | string | No | - | | `template_name` | string | No | - | | `translatable` | boolean | No | - | | `translations` | object | No | - | | `updated_at` | string | No | - | | `values` | object | No | - | ##### Attribute Template Field | Property | Type | Required | Details | | --- | --- | --- | --- | | `created_at` | string | No | - | | `id` | string | No | - | | `key` | string | No | - | | `name` | string | No | - | | `type` | string | No | - | | `updated_at` | string | No | - | ##### Attribute | Property | Type | Required | Details | | --- | --- | --- | --- | | `created_at` | string | No | - | | `description` | string | No | - | | `filterable` | boolean | No | - | | `id` | string | No | - | | `key` | string | No | - | | `name` | string | No | - | | `template_key` | string | No | - | | `template_name` | string | No | - | | `translatable` | boolean | No | - | | `translations` | object | No | - | | `updated_at` | string | No | - | | `values` | object | No | - | ##### Attribute Translations | Property | Type | Required | Details | | --- | --- | --- | --- | | `description` | object[] | No | - | | `name` | object[] | No | - |
Generated example (synthetic) ```json { "data": { "created_at": "string", "description": "string", "fields": [ { "created_at": "string", "id": "string", "key": "string", "name": "string", "type": "string", "updated_at": "string" } ], "filterable": false, "id": "string", "key": "string", "linked_attributes": [ { "created_at": "string", "description": "string", "filterable": false, "id": "string", "key": "string", "name": "string", "template_key": "string", "template_name": "string", "translatable": false, "translations": { "description": null, "name": null }, "updated_at": "string", "values": {} } ], "name": "string", "template_key": "string", "template_name": "string", "translatable": false, "translations": { "description": [ { "id": null, "locale": null, "value": null } ], "name": [ { "id": null, "locale": null, "value": null } ] }, "updated_at": "string", "values": {} }, "details": [ "string" ], "success": false } ```
### 400 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 401 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 500 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ## Contract identity Use these fields to confirm you are implementing the intended endpoint contract. - API family: Management API - Method: `PATCH` - Path: `/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}` - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:PATCH:/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}/{attribute_key}` - OpenAPI tag: Attributes - OpenAPI summary: Update attribute