Create attribute
Creates a new attribute using the specified template. Field values are validated against the template's field definitions (e.g., image fields require valid images, number fields must be numeric). For each template image field, send a file part using the field key, or a public image URL in the same form key, or reference an existing app image by UUID: use form field `image_id` when the field key is `image`, otherwise `<field_key>_image_id` (e.g. `hero_image_id`).
/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}- API
- Management
- OpenAPI
- management-api
- Updated
- Apr 26, 2026
management-api:POST:/api/v1/{team_slug}/{app_slug}/attributes/{attribute_template_key}
Creates a new attribute using the specified template. Field values are validated against the template's field definitions (e.g., image fields require valid images, number fields must be numeric). For each template image field, send a file part using the field key, or a public image URL in the same form key, or reference an existing app image by UUID: use form field image_id when the field key is image, otherwise _image_id (e.g. hero_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:
POST - Path:
/api/v1/\{team_slug\}/\{app_slug\}/attributes/\{attribute_template_key\} - Summary: Create attribute
- Description: Creates a new attribute using the specified template. Field values are validated against the template's field definitions (e.g., image fields require valid images, number fields must be numeric). For each template image field, send a file part using the field key, or a public image URL in the same form key, or reference an existing app image by UUID: use form field
image_idwhen the field key isimage, otherwise_image_id(e.g.hero_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.
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 |
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 | Used to update the key for the attribute. Leave blank if you don't want to update the key |
name | string | No | VariantName for the attribute |
description | string | No | Description for the attribute |
Generated example (synthetic):
{
"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 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
| 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):
{
"data": {
"created_at": "string",
"description": "string",
"filterable": false,
"id": "string",
"key": "string",
"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):
{
"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):
{
"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):
{
"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:
POST - Path:
/api/v1/\{team_slug\}/\{app_slug\}/attributes/\{attribute_template_key\} - Operation ID: Not documented in the OpenAPI contract.
- OpenAPI tag: Attributes
- OpenAPI summary: Create attribute