Brands identify the name shoppers see; vendors identify a product's supplier or source. A product can have zero or one brand. Reads require read_products; writes require write_products. Translation reads also require read_translations, and translation writes require write_translations.
Create with name; omit slug to generate it. Updates change only supplied fields. Empty optional description and SEO values clear those fields after their translations are removed. Changing slug creates a redirect unless create_redirect is false. Setting a non-empty image_id requires read_files and an uploaded image in this store. template_handle defaults to default_brand on create; omit it on update to keep the current template.
Product assignments#
Use POST /products/bulk-brand with product_ids and a brand_id to assign one brand to each product. Send brand_id: null to clear those assignments.
Both brand field changes and product assignment changes emit brands/update. Inspect change_type: source includes previous and changed_fields; assignments reports the changed product_count. Translation changes use separate events.
Metafield access#
Metafield reads require read_products; writes require write_products. App tokens (tpat_ and tast_) can read merchant-owned definitions, their own definitions, and other apps' shared definitions. They can write only definitions owned by their app. App Bridge sessions can have narrower effective access.
Store Admin tokens (tsat_) can read merchant-owned and non-hidden app definitions. They can write merchant-owned definitions and app definitions with merchant_access: read_write. Lists include only visible values, and total counts only those values. Address values by namespace and key.
Endpoints#
Brand limits
Fetch Brand limits and per-field constraints.
Returns the per-field maximum lengths and request caps that apply to Brand endpoints. Useful for clients to validate inputs before sending them and to size UIs.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List brands
List brands for the store.
Returns brands and their product counts. Each page holds at most 100 brands, and every row carries the full Brand fields, description included. Search matches names and slugs; matches are ordered by relevance (exact name, name prefix, exact slug, slug prefix, then other matches), then by the sort field. Use the returned cursors unchanged, and start without a cursor when search or sorting changes. Fetch /brands/limits for page-size and search limits; supported sort fields are listed below. storefront_url uses the store's primary domain; storefront_path is the base path without a domain. Shopper-facing URLs may use translated slugs and locale/country prefixes.
Query parameters
| Name | Type | Description |
|---|---|---|
cursor
|
string |
Opaque cursor returned by the preceding Brand list response. |
limit
|
integer |
Page size, 1-100 (default 50). Larger values return VALIDATION_LIST_INVALID_LIMIT. |
search
|
string |
Search query. |
sort_by
|
string |
Sort field from the Brand list contract.
Allowed values
nameproduct_countcreated_atupdated_at |
sort_direction
|
string |
Sort direction from the Brand list contract.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400INVALID_INPUTCursor is malformed or does not match the current Brand list state.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the Brand contract range.
-
400VALIDATION_LIST_INVALID_SORT_BYSort_by is not a sortable Brand column.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort_direction is not supported.
-
400VALIDATION_SEARCH_TOO_LONGSearch exceeds the Brand contract maximum length.
-
400LIST_RESPONSE_TOO_LARGEThe page would be larger than the 512 KiB reply budget (long descriptions or many options). Request it again with a lower
limit;error.params.fitestimates how many rows fit.
Search brands
Search brands for picker-style suggestions.
Returns lightweight brand suggestions by query. This endpoint is intended for pickers and simple selection UIs.
Query parameters
| Name | Type | Description |
|---|---|---|
q
|
string |
Search query. |
limit
|
integer |
Suggestion count, 1-50 (default 10). |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the Brand search range.
-
400VALIDATION_SEARCH_TOO_LONGQ exceeds the Brand contract maximum length.
Get a brand
Fetch one brand by id.
Returns the brand if it belongs to the token's store. storefront_url uses the store's primary domain; storefront_path is the base path without a domain. Shopper-facing URLs may use translated slugs and locale/country prefixes.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Brand id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is invalid.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
List brand metafields
List brand metafield values visible to the token.
Returns paginated metafield values the token can read. total counts only visible values. Identify each value by namespace and key.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Brand id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number (default 1). |
limit
|
integer |
Page size; capped by the metafield list limit. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is not a positive integer.
-
400VALIDATION_LIST_INVALID_PAGEPage must be at least 1.
-
400VALIDATION_LIST_INVALID_LIMITLimit is outside the supported range.
-
404NOT_FOUNDBrand does not exist in this store.
Set brand metafields
Create, update, or delete brand metafield values.
Send namespace-and-key entries. A string value creates or replaces a value; null or an empty string deletes it. Only definitions writable by this token can be changed.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Brand id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
metafields
required
|
array<object> |
Entries shaped as |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is not a positive integer.
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400METAFIELD_NO_WRITESAt least one metafield entry is required.
-
400METAFIELD_DUPLICATE_WRITEThe request contains the same namespace and key more than once.
-
400PRODUCT_METAFIELD_DEF_NOT_FOUNDThe namespace and key do not identify a definition visible to the token. For an app token only its own definitions count: merchant-owned and other apps' definitions return this code.
-
403METAFIELD_WRITE_MERCHANT_READ_ONLYThis app-owned definition is not writable by the token.
-
404NOT_FOUNDBrand does not exist in this store. A file reference names a file that does not exist in this store.
-
400METAFIELD_VALUE_TOO_LONGThe value exceeds its size limit: the definition's max_value_length, or the platform value size limit for the type.
-
400METAFIELD_VALUE_STRING_TOO_LONGA string value exceeds the definition's max_value_length or the platform string limit.
-
400METAFIELD_VALUE_TOO_SHORTA string value is shorter than the definition's min_length rule.
-
400METAFIELD_VALUE_PATTERN_MISMATCHA string value does not match the definition's pattern rule.
-
400METAFIELD_VALUE_INTEGER_INVALIDAn integer value is not a whole number in the 64-bit range.
-
400METAFIELD_VALUE_INTEGER_TOO_LONGAn integer value has more digits than the definition or the platform integer limit allows.
-
400METAFIELD_VALUE_DECIMAL_INVALIDA decimal value is not a finite decimal number.
-
400METAFIELD_VALUE_DECIMAL_TOO_LONGA decimal value, written out in full, is longer than the definition or the platform decimal limit allows.
-
400METAFIELD_VALUE_BELOW_MINAn integer or decimal value is below the definition's min rule.
-
400METAFIELD_VALUE_ABOVE_MAXAn integer or decimal value is above the definition's max rule.
-
400METAFIELD_VALUE_BOOLEAN_INVALIDA boolean value is not true or false.
-
400METAFIELD_VALUE_DATE_INVALIDA date value is not a calendar date in YYYY-MM-DD form.
-
400METAFIELD_VALUE_DATETIME_INVALIDA datetime value is not YYYY-MM-DDTHH:mm, YYYY-MM-DDTHH:mm:ss or an RFC 3339 timestamp.
-
400METAFIELD_VALUE_JSON_INVALIDA json value is not valid JSON.
-
400METAFIELD_VALUE_JSON_UNSAFE_LINKA json value contains a link whose scheme is not http, https, mailto or tel.
-
400METAFIELD_VALUE_URL_INVALIDA url value, or an item of a list.url value, is not an absolute URL with a host.
-
400METAFIELD_VALUE_URL_SCHEMEA url value, or an item of a list.url value, does not use http or https.
-
400METAFIELD_VALUE_URL_TOO_LONGA url value, or an item of a list.url value, exceeds the definition's max_value_length or the platform URL limit.
-
400METAFIELD_VALUE_NOT_IN_CHOICESA single_select value is not one of the definition's choice keys.
-
400METAFIELD_LIST_CHOICE_INVALIDAn item of a list.single_select value is not one of the definition's choice keys; the message names the item.
-
400METAFIELD_LIST_STRINGS_INVALIDA list.string or list.single_select value is not a JSON array of strings.
-
400METAFIELD_LIST_URLS_INVALIDA list.url value is not a JSON array of strings.
-
400METAFIELD_LIST_FILES_INVALIDA list.file_reference value is not a JSON array of strings.
-
400METAFIELD_LIST_IDS_INVALIDA list.product_reference or list.variant_reference value is not a JSON array of integers.
-
400METAFIELD_LIST_EMPTYA list value other than list.string is an empty array. Send null or an empty string to remove the value instead.
-
400METAFIELD_LIST_TOO_MANYA list value has more items than the definition's max_list_items or the platform list limit for the type.
-
400METAFIELD_LIST_ITEM_EMPTYAn item of a list.string value is empty or only whitespace; the message names the item.
-
400METAFIELD_LIST_ITEM_TOO_LONGAn item of a list.string value exceeds the definition's max_value_length or the platform string limit; the message names the item.
-
400METAFIELD_VALUE_FILE_UUID_INVALIDA file_reference value, or an item of a list.file_reference value, is not a file UUID.
-
400METAFIELD_VALUE_ID_INVALIDA product_reference or variant_reference value is not an integer ID.
-
400METAFIELD_VALUE_ID_POSITIVEA product_reference or variant_reference value is not a positive integer.
-
400METAFIELD_VALUE_ID_TOO_LONGA product_reference or variant_reference value exceeds the platform reference ID limit.
-
400METAFIELD_LIST_ITEMS_POSITIVEAn item of a list.product_reference or list.variant_reference value is not a positive integer.
-
400METAFIELD_REFERENCE_PRODUCT_MISSINGA product reference names a product that does not exist in this store.
-
400METAFIELD_REFERENCE_VARIANT_MISSINGA variant reference names a variant that does not exist in this store.
-
400INVALID_INPUTA file reference names a file that is not an uploaded file.
Create a brand
Create a brand.
Create with name; omit slug to generate it. Omitted or empty template_handle uses default_brand. A non-empty image_id must reference an uploaded image in this store and also requires read_files; video, documents, 3D models, and site assets are rejected. storefront_url uses the store's primary domain; storefront_path is the base path without a domain. Shopper-facing URLs may use translated slugs and locale/country prefixes.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional key, up to 255 characters, that makes this create safe to retry. Repeating the request with the same key and body within 24 hours returns the original response instead of creating again; the same key with a different body returns |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Brand name. |
slug
|
string |
Optional slug. Omit to generate from name. |
description
|
string |
Optional plain-text description. Omit or send an empty string for no description. |
seo_title
|
string |
Optional SEO title. Omit or send an empty string to let the storefront fall back to the Brand name. |
seo_description
|
string |
Optional SEO description. Omit or send an empty string to let the storefront fall back to the Brand description. |
image_id
|
string |
Optional Media-library upload image UUID. Video, document, 3D-model, and site-asset ids are invalid. Non-empty values require |
template_handle
|
string |
Brand template assignment. Omit this field, send an empty string, or send |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400STORE_API_CREATE_REDIRECT_UNSUPPORTEDCreate_redirect is only supported when updating a brand.
-
400BRAND_NAME_REQUIREDName is required.
-
400BRAND_NAME_INVALID_CHARSName contains unsupported control characters.
-
400BRAND_NAME_TOO_LONGName exceeds the maximum length.
-
400BRAND_DESCRIPTION_INVALID_CHARSDescription contains unsupported control characters.
-
400BRAND_DESCRIPTION_TOO_LONGDescription exceeds the maximum length.
-
400BRAND_SEO_TITLE_INVALID_CHARSSEO title contains unsupported control characters.
-
400BRAND_SEO_TITLE_TOO_LONGSEO title exceeds the maximum length.
-
400BRAND_SEO_DESCRIPTION_INVALID_CHARSSEO description contains unsupported control characters.
-
400BRAND_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the maximum length.
-
400BRAND_SLUG_INVALID_FORMATSlug is not valid for Brand URLs.
-
400BRAND_SLUG_TOO_LONGSlug exceeds the maximum length.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Brand templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle is not available for this store.
-
400INVALID_INPUTimage_idis invalid or does not refer to an uploaded image in this store. -
403STORE_API_SCOPE_REQUIREDA non-empty image_id requires read_files scope in addition to write_products.
-
404NOT_FOUNDThe supplied image does not exist in this store.
-
409BRAND_DUPLICATEName or slug already belongs to another brand in this store, in any language.
error.details.existing_idis that brand's id, so a retried create can fetch it instead of creating it again. -
409BRAND_DELETE_IN_PROGRESSA brand that is still being deleted holds the name or slug. Retry once the delete finishes.
-
400BRAND_SLUG_GENERATION_FAILEDA slug could not be generated from the supplied name.
-
400BRAND_UNIQUE_SLUG_GENERATION_FAILEDA unique generated slug could not be found; supply a slug explicitly.
-
400BRAND_PLAN_LIMIT_REACHEDThe store has as many brands as its plan allows; the message states the maximum. Fetch
/brands/limitsfor the store's current cap and usage. -
503CATALOG_NAMESPACE_BUSYAnother write is claiming the same names or slugs (for example a large CSV import or a translation save). Nothing was changed; retry after a short delay.
-
400CATALOG_REQUEST_KEY_TOO_LONGIdempotency-Keyis longer than 255 characters. -
403PLAN_UNKNOWNThe store has no active plan, so nothing can be created until one is chosen.
-
409CATALOG_REQUEST_KEY_CONFLICTIdempotency-Keywas already used with a different request body.
Bulk create brands
Create multiple brands by name.
Creates brands from names and generates their slugs. Existing names appear in skipped; invalid rows are reported without blocking valid ones. storefront_url uses the store's primary domain; storefront_path is the base path without a domain. Shopper-facing URLs may use translated slugs and locale/country prefixes.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Idempotency-Key
|
string |
Optional key, up to 255 characters, that makes this create safe to retry. Repeating the request with the same key and body within 24 hours returns the original response instead of creating again; the same key with a different body returns |
Body parameters
| Name | Type | Description |
|---|---|---|
names
required
|
array<string> |
Brand names to create. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400BRAND_BULK_NO_NAMESNo names were provided.
-
400BRAND_BULK_CREATE_TOO_MANYBatch exceeds the Brand bulk create cap.
-
409BRAND_BULK_DUPLICATEOne of the names in the batch was just created by another request.
-
503CATALOG_NAMESPACE_BUSYAnother write is claiming the same names or slugs (for example a large CSV import or a translation save). Nothing was changed; retry after a short delay.
-
400CATALOG_REQUEST_KEY_TOO_LONGIdempotency-Keyis longer than 255 characters. -
403PLAN_UNKNOWNThe store has no active plan, so nothing can be created until one is chosen.
-
409CATALOG_REQUEST_KEY_CONFLICTIdempotency-Keywas already used with a different request body.
Update a brand
Update a brand.
Changes only supplied fields. Empty optional text or image_id clears that field; clear a text field's translations first. A non-empty image_id must reference an uploaded image in this store and also requires read_files; video, documents, 3D models, and site assets are rejected. Omit template_handle to keep it, or send default_brand to reset it; an empty value is invalid. A slug change creates a redirect unless create_redirect is false. storefront_url uses the store's primary domain; storefront_path is the base path without a domain. Shopper-facing URLs may use translated slugs and locale/country prefixes.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Brand id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
|
string |
New Brand name. Omit to leave it unchanged; an empty value is invalid. |
slug
|
string |
New slug. Omit to leave the current slug unchanged; an empty value is invalid. |
description
|
string |
New plain-text description. Omit to leave it unchanged; send an empty string to clear it. |
seo_title
|
string |
New SEO title. Omit to leave it unchanged; send an empty string to clear it and restore the storefront Brand-name fallback. |
seo_description
|
string |
New SEO description. Omit to leave it unchanged; send an empty string to clear it and restore the storefront Brand-description fallback. |
image_id
|
string |
New Media-library upload image UUID. Omit to leave the image unchanged; send an empty string to clear it. A non-empty value requires |
template_handle
|
string |
New Brand template assignment. Omit to leave it unchanged, send |
create_redirect
|
boolean |
When slug changes, create a redirect from the previous slug. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is invalid.
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400BRAND_NAME_REQUIREDName is required.
-
400BRAND_NAME_INVALID_CHARSName contains unsupported control characters.
-
400BRAND_NAME_TOO_LONGName exceeds the maximum length.
-
400BRAND_DESCRIPTION_INVALID_CHARSDescription contains unsupported control characters.
-
400BRAND_DESCRIPTION_TOO_LONGDescription exceeds the maximum length.
-
400BRAND_SEO_TITLE_INVALID_CHARSSEO title contains unsupported control characters.
-
400BRAND_SEO_TITLE_TOO_LONGSEO title exceeds the maximum length.
-
400BRAND_SEO_DESCRIPTION_INVALID_CHARSSEO description contains unsupported control characters.
-
400BRAND_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the maximum length.
-
400BRAND_SLUG_INVALID_FORMATSlug is not valid for Brand URLs.
-
400BRAND_SLUG_TOO_LONGSlug exceeds the maximum length.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Brand templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle is not available for this store.
-
400INVALID_INPUTimage_idis invalid or does not refer to an uploaded image in this store. -
403STORE_API_SCOPE_REQUIREDA non-empty image_id requires read_files scope in addition to write_products.
-
404NOT_FOUNDThe supplied image does not exist in this store.
-
409BRAND_DUPLICATEName or slug already belongs to another brand in this store, in any language.
error.details.existing_idis that brand's id, so a retried create can fetch it instead of creating it again. -
409BRAND_DELETE_IN_PROGRESSA brand that is still being deleted holds the name or slug. Retry once the delete finishes.
-
503CATALOG_NAMESPACE_BUSYAnother write is claiming the same names or slugs (for example a large CSV import or a translation save). Nothing was changed; retry after a short delay.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
-
409TRANSLATION_SOURCE_FIELD_HAS_TRANSLATIONSClear a field's translations before clearing its source value.
Delete a brand
Delete a brand.
Deletes the brand, its translations, and its metafield values. If products, collection rules, or menu links use it, the first request returns CONFIRMATION_REQUIRED; repeat with confirmed: true and the returned confirmation_token. The brand, product assignments, and collection rules change atomically. Deletion emits one brands/translations/delete per translated locale and a brands/delete event. Menu links may update shortly after the response.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Brand id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
confirmed
|
boolean |
On a confirmation retry, set this to true and send the returned confirmation_token. Omit it on the first request. |
confirmation_token
|
string |
Token from the CONFIRMATION_REQUIRED response. Omit it on the first request and resend the exact same id selection when using it. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is invalid.
-
400STORE_API_INVALID_REQUEST_BODYA non-empty request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400BRAND_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
-
409CONFIRMATION_REQUIREDDelete requires confirmation because dependent records will be changed.
Bulk delete brands
Delete multiple brands.
Send brand IDs in brand_ids. If deletion affects products, collection rules, or menu links, repeat the request with confirmed: true and the returned confirmation_token. The response lists removed IDs in deleted and missing or changed IDs in failed. IDs listed in deleted are removed atomically. Menu links may update shortly after the response.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
brand_ids
required
|
array<integer> |
Store-scoped integer brand ids to delete. |
confirmed
|
boolean |
On a confirmation retry, set this to true and send the returned confirmation_token. Omit it on the first request. |
confirmation_token
|
string |
Token from the CONFIRMATION_REQUIRED response. Omit it on the first request and resend the exact same id selection when using it. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400BRAND_BULK_NO_IDSNo brand ids were provided.
-
400BRAND_BULK_DELETE_TOO_MANYBatch exceeds the Brand bulk delete cap.
-
409BRAND_BULK_RACEDDependencies changed while the bulk delete was running; retry with fresh state.
-
400BRAND_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
-
409CONFIRMATION_REQUIREDDelete requires confirmation because dependent records will be changed.
Fields#
Field |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|
|
No |
No |
No |
|
|
No |
No |
No |
|
|
Yes |
Yes |
create |
Yes |
|
Yes |
Yes |
Yes |
|
|
Yes |
Yes |
Yes |
|
|
Yes |
Yes |
Yes |
|
|
Yes |
Yes |
Yes |
|
|
Yes |
Yes |
No |
|
|
No |
No |
No |
|
|
No |
No |
No |
|
|
Yes |
Yes |
No |
|
|
No |
Yes |
No |
|
|
No |
No |
No |
|
|
No |
No |
No |
|
|
No |
No |
No |
|
|
No |
No |
No |
|
|
No |
No |
No |
No |
|
No |
No |
No |
No |
Webhook events#
Subscribe to these events to keep your integration in sync with brands. Event cards show the required scope, permission, and payload.
Metafield events follow definition access: apps receive their own, merchant-owned, and other apps' shared definitions; store-level endpoints receive merchant-owned and non-hidden app definitions.
Brand created
Fired when a brand is created.
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present
The stable Brand id. |
brand.name |
string |
Selectable in the Payload builder
The merchant-facing Brand name. |
brand.slug |
string |
Selectable in the Payload builder
The Brand's URL-safe identifier. |
brand.description |
string |
Selectable in the Payload builder
The Brand description in the store's default locale. |
brand.seo_title |
string |
Selectable in the Payload builder
The Brand page's SEO title in the store's default locale. |
brand.seo_description |
string |
Selectable in the Payload builder
The Brand page's SEO description in the store's default locale. |
brand.image_id |
string |
Selectable in the Payload builder
The assigned Media-library image id, or null when no image is assigned. |
brand.image_url |
string |
Selectable in the Payload builder
The original URL recorded for the assigned image, or an empty string. |
brand.image_cdn_url |
string |
Selectable in the Payload builder
The delivery URL for the assigned image, or an empty string. |
brand.product_count |
integer |
Selectable in the Payload builder
The number of products currently assigned to the Brand. |
brand.template_handle |
string |
Selectable in the Payload builder
The storefront template handle assigned to the Brand. |
brand.created_at |
string |
Selectable in the Payload builder
When the Brand was created. |
brand.updated_at |
string |
Selectable in the Payload builder
When the Brand last changed. |
brand.translations_updated_at |
string |
Selectable in the Payload builder
When any Brand translation last changed, or null when none exist. |
Brand updated
Fired when a brand changes. change_type is source for Brand field edits and assignments when product assignments change its product count. Source changes include previous and changed_fields; assignment changes report product_count in changed_fields. During a CSV product import, assignments changes are sent once per import chunk for each brand whose products changed, carrying the counts after the chunk. A rename is announced by this event alone (changed_fields includes name): the brand's products do not each get products/update (channel apps still get product_publications/update for products on their channel), so refresh any brand name you cache on products from it.
Possible changed_fields values
The changed_fields array names exactly which of these changed in this event — use it to skip processing updates your integration doesn't care about.
description image_id name product_count seo_description seo_title slug template_handle
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present
The stable Brand id. |
brand.name |
string |
Selectable in the Payload builder
The merchant-facing Brand name. |
brand.slug |
string |
Selectable in the Payload builder
The Brand's URL-safe identifier. |
brand.description |
string |
Selectable in the Payload builder
The Brand description in the store's default locale. |
brand.seo_title |
string |
Selectable in the Payload builder
The Brand page's SEO title in the store's default locale. |
brand.seo_description |
string |
Selectable in the Payload builder
The Brand page's SEO description in the store's default locale. |
brand.image_id |
string |
Selectable in the Payload builder
The assigned Media-library image id, or null when no image is assigned. |
brand.image_url |
string |
Selectable in the Payload builder
The original URL recorded for the assigned image, or an empty string. |
brand.image_cdn_url |
string |
Selectable in the Payload builder
The delivery URL for the assigned image, or an empty string. |
brand.product_count |
integer |
Selectable in the Payload builder
The number of products currently assigned to the Brand. |
brand.template_handle |
string |
Selectable in the Payload builder
The storefront template handle assigned to the Brand. |
brand.created_at |
string |
Selectable in the Payload builder
When the Brand was created. |
brand.updated_at |
string |
Selectable in the Payload builder
When the Brand last changed. |
brand.translations_updated_at |
string |
Selectable in the Payload builder
When any Brand translation last changed, or null when none exist. |
previous.id |
integer |
Always present
The stable Brand id. This value is from before the update. |
previous.name |
string |
Selectable in the Payload builder
The merchant-facing Brand name. This value is from before the update. |
previous.slug |
string |
Selectable in the Payload builder
The Brand's URL-safe identifier. This value is from before the update. |
previous.description |
string |
Selectable in the Payload builder
The Brand description in the store's default locale. This value is from before the update. |
previous.seo_title |
string |
Selectable in the Payload builder
The Brand page's SEO title in the store's default locale. This value is from before the update. |
previous.seo_description |
string |
Selectable in the Payload builder
The Brand page's SEO description in the store's default locale. This value is from before the update. |
previous.image_id |
string |
Selectable in the Payload builder
The assigned Media-library image id, or null when no image is assigned. This value is from before the update. |
previous.image_url |
string |
Selectable in the Payload builder
The original URL recorded for the assigned image, or an empty string. This value is from before the update. |
previous.image_cdn_url |
string |
Selectable in the Payload builder
The delivery URL for the assigned image, or an empty string. This value is from before the update. |
previous.product_count |
integer |
Selectable in the Payload builder
The number of products currently assigned to the Brand. This value is from before the update. |
previous.template_handle |
string |
Selectable in the Payload builder
The storefront template handle assigned to the Brand. This value is from before the update. |
previous.created_at |
string |
Selectable in the Payload builder
When the Brand was created. This value is from before the update. |
previous.updated_at |
string |
Selectable in the Payload builder
When the Brand last changed. This value is from before the update. |
previous.translations_updated_at |
string |
Selectable in the Payload builder
When any Brand translation last changed, or null when none exist. This value is from before the update. |
changed_fields |
array |
Always present
The Brand fields changed by this event. |
change_type |
string |
Always present
Why brands/update fired: source for Brand field edits or assignments for product assignment-count changes. |
Brand deleted
Fired after a brand is deleted. A brand with translations also produces brands/translations/delete for each translated locale; those events and the deletion are atomic. Removed metafield values have separate delete events.
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present
The stable id of the deleted Brand. |
brand.name |
string |
Selectable in the Payload builder
The Brand name at the time it was deleted. |
brand.slug |
string |
Selectable in the Payload builder
The Brand slug at the time it was deleted. |
Brand metafield value created
Fired when a brand metafield value is created.
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present |
brand.name |
string |
Selectable in the Payload builder |
brand.slug |
string |
Selectable in the Payload builder |
metafield.definition.id |
string |
Selectable in the Payload builder |
metafield.definition.owner_type |
string |
Selectable in the Payload builder |
metafield.definition.namespace |
string |
Selectable in the Payload builder |
metafield.definition.key |
string |
Selectable in the Payload builder |
metafield.definition.name |
string |
Selectable in the Payload builder |
metafield.definition.description |
string |
Selectable in the Payload builder |
metafield.definition.type |
string |
Selectable in the Payload builder |
metafield.definition.is_translatable |
boolean |
Selectable in the Payload builder |
metafield.definition.max_value_length |
integer |
Selectable in the Payload builder |
metafield.definition.max_list_items |
integer |
Selectable in the Payload builder |
metafield.definition.sort_order |
integer |
Selectable in the Payload builder |
metafield.definition.app_id |
string |
Selectable in the Payload builder |
metafield.definition.app_access |
string |
Selectable in the Payload builder |
metafield.definition.merchant_access |
string |
Selectable in the Payload builder |
metafield.definition.created_at |
string |
Selectable in the Payload builder |
metafield.definition.updated_at |
string |
Selectable in the Payload builder |
metafield.definition.usage_count |
integer |
Selectable in the Payload builder |
metafield.value |
string |
Selectable in the Payload builder |
metafield.display_value |
string |
Selectable in the Payload builder |
metafield.display_value_map |
object |
Selectable in the Payload builder |
metafield.created_at |
string |
Selectable in the Payload builder |
metafield.updated_at |
string |
Selectable in the Payload builder |
Brand metafield value updated
Fired when a brand metafield value changes.
Possible changed_fields values
The changed_fields array names exactly which of these changed in this event — use it to skip processing updates your integration doesn't care about.
value
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present |
brand.name |
string |
Selectable in the Payload builder |
brand.slug |
string |
Selectable in the Payload builder |
previous.definition.id |
string |
Selectable in the Payload builder |
previous.definition.owner_type |
string |
Selectable in the Payload builder |
previous.definition.namespace |
string |
Selectable in the Payload builder |
previous.definition.key |
string |
Selectable in the Payload builder |
previous.definition.name |
string |
Selectable in the Payload builder |
previous.definition.description |
string |
Selectable in the Payload builder |
previous.definition.type |
string |
Selectable in the Payload builder |
previous.definition.is_translatable |
boolean |
Selectable in the Payload builder |
previous.definition.max_value_length |
integer |
Selectable in the Payload builder |
previous.definition.max_list_items |
integer |
Selectable in the Payload builder |
previous.definition.sort_order |
integer |
Selectable in the Payload builder |
previous.definition.app_id |
string |
Selectable in the Payload builder |
previous.definition.app_access |
string |
Selectable in the Payload builder |
previous.definition.merchant_access |
string |
Selectable in the Payload builder |
previous.definition.created_at |
string |
Selectable in the Payload builder |
previous.definition.updated_at |
string |
Selectable in the Payload builder |
previous.definition.usage_count |
integer |
Selectable in the Payload builder |
previous.value |
string |
Selectable in the Payload builder |
previous.display_value |
string |
Selectable in the Payload builder |
previous.display_value_map |
object |
Selectable in the Payload builder |
previous.created_at |
string |
Selectable in the Payload builder |
previous.updated_at |
string |
Selectable in the Payload builder |
current.definition.id |
string |
Selectable in the Payload builder |
current.definition.owner_type |
string |
Selectable in the Payload builder |
current.definition.namespace |
string |
Selectable in the Payload builder |
current.definition.key |
string |
Selectable in the Payload builder |
current.definition.name |
string |
Selectable in the Payload builder |
current.definition.description |
string |
Selectable in the Payload builder |
current.definition.type |
string |
Selectable in the Payload builder |
current.definition.is_translatable |
boolean |
Selectable in the Payload builder |
current.definition.max_value_length |
integer |
Selectable in the Payload builder |
current.definition.max_list_items |
integer |
Selectable in the Payload builder |
current.definition.sort_order |
integer |
Selectable in the Payload builder |
current.definition.app_id |
string |
Selectable in the Payload builder |
current.definition.app_access |
string |
Selectable in the Payload builder |
current.definition.merchant_access |
string |
Selectable in the Payload builder |
current.definition.created_at |
string |
Selectable in the Payload builder |
current.definition.updated_at |
string |
Selectable in the Payload builder |
current.definition.usage_count |
integer |
Selectable in the Payload builder |
current.value |
string |
Selectable in the Payload builder |
current.display_value |
string |
Selectable in the Payload builder |
current.display_value_map |
object |
Selectable in the Payload builder |
current.created_at |
string |
Selectable in the Payload builder |
current.updated_at |
string |
Selectable in the Payload builder |
changed_fields |
array |
Selectable in the Payload builder |
Brand metafield value deleted
Fired when a brand metafield value is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
brand.id |
integer |
Always present |
brand.name |
string |
Selectable in the Payload builder |
brand.slug |
string |
Selectable in the Payload builder |
metafield.definition.id |
string |
Selectable in the Payload builder |
metafield.definition.owner_type |
string |
Selectable in the Payload builder |
metafield.definition.namespace |
string |
Selectable in the Payload builder |
metafield.definition.key |
string |
Selectable in the Payload builder |
metafield.definition.name |
string |
Selectable in the Payload builder |
metafield.definition.description |
string |
Selectable in the Payload builder |
metafield.definition.type |
string |
Selectable in the Payload builder |
metafield.definition.is_translatable |
boolean |
Selectable in the Payload builder |
metafield.definition.max_value_length |
integer |
Selectable in the Payload builder |
metafield.definition.max_list_items |
integer |
Selectable in the Payload builder |
metafield.definition.sort_order |
integer |
Selectable in the Payload builder |
metafield.definition.app_id |
string |
Selectable in the Payload builder |
metafield.definition.app_access |
string |
Selectable in the Payload builder |
metafield.definition.merchant_access |
string |
Selectable in the Payload builder |
metafield.definition.created_at |
string |
Selectable in the Payload builder |
metafield.definition.updated_at |
string |
Selectable in the Payload builder |
metafield.definition.usage_count |
integer |
Selectable in the Payload builder |
metafield.value |
string |
Selectable in the Payload builder |
metafield.display_value |
string |
Selectable in the Payload builder |
metafield.display_value_map |
object |
Selectable in the Payload builder |
metafield.created_at |
string |
Selectable in the Payload builder |
metafield.updated_at |
string |
Selectable in the Payload builder |