Brands

Brands require product scopes. Reads use read_products; writes use write_products. Brands support name, slug, description, seo_title, seo_description, image_id, and template_handle fields. Assigning a non-empty image_id also requires read_files for the referenced upload image. On create, omitting template_handle assigns default_brand. Use default_brand for the default Brand template, or pass an alternate Brand template handle configured for the store. Omit template_handle on update to leave the current assignment unchanged; an empty string is invalid. AI translation is not exposed through the Store API.

Endpoints#

Brand limits

GET read_products

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

GET read_products

List brands for the store.

Returns paginated brands. Pagination, sorting, and search validation are enforced by the product service.

Query parameters

Name Type Description
page integer

Page number.

Example: 1
limit integer

Page size.

Example: 20
search string

Search query.

Example: acme
sort_by string

Sort field from the Brand list contract.

Allowed values
nameproduct_countcreated_atupdated_at
Example: name
sort_direction string

Sort direction from the Brand list contract.

Allowed values
ascdesc
Example: asc

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_PAGE

    page must be a positive integer.

  • 400 VALIDATION_LIST_INVALID_LIMIT

    limit is outside the Brand contract range.

  • 400 VALIDATION_LIST_INVALID_SORT_BY

    sort_by is not a sortable Brand column.

  • 400 VALIDATION_LIST_INVALID_SORT_DIRECTION

    sort_direction is not supported.

  • 400 VALIDATION_SEARCH_TOO_LONG

    search exceeds the Brand contract maximum length.

Search brands

GET read_products

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.

Example: acme
limit integer

Suggestion count.

Example: 10

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_LIMIT

    limit is outside the Brand search range.

  • 400 VALIDATION_SEARCH_TOO_LONG

    q exceeds the Brand contract maximum length.

Get a brand

GET read_products

Fetch one brand by id.

Returns the brand if it belongs to the token's store.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is invalid.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

Create a brand

POST write_products

Create a brand.

Creates a brand. name is required. Omit slug to generate it from the name. Omitted or empty template_handle selects default_brand. A non-empty image_id must identify an uploaded image in this store and requires read_files; video, document, 3D-model, and site-asset ids are rejected.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
name required string

Brand name.

Example: Acme
slug string

Optional slug. Omit to generate from name.

Example: acme
description string

Optional plain-text description.

Example: Acme makes durable outdoor gear.
seo_title string

Optional SEO title.

Example: Acme Outdoor Gear
seo_description string

Optional SEO description.

Example: Shop Acme outdoor gear.
image_id string

Optional Media-library upload image id. Video, document, 3D-model, and site-asset ids are invalid. Non-empty values require read_files access to the referenced file.

Example: f_8f2a1c2b9d4e
template_handle string

Template assignment. On create, omitting this field or sending an empty string assigns default_brand. Use default_brand for the default Brand template, or pass an alternate Brand template handle configured for the store. On update, omit template_handle to leave the assignment unchanged, use default_brand to reset it to default, and do not send an empty string.

Example: default_brand

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 STORE_API_CREATE_REDIRECT_UNSUPPORTED

    create_redirect is only supported when updating a brand.

  • 400 BRAND_NAME_REQUIRED

    Name is required.

  • 400 BRAND_NAME_INVALID_CHARS

    Name contains unsupported control characters.

  • 400 BRAND_NAME_TOO_LONG

    Name exceeds the maximum length.

  • 400 BRAND_DESCRIPTION_INVALID_CHARS

    Description contains unsupported control characters.

  • 400 BRAND_DESCRIPTION_TOO_LONG

    Description exceeds the maximum length.

  • 400 BRAND_SEO_TITLE_INVALID_CHARS

    SEO title contains unsupported control characters.

  • 400 BRAND_SEO_TITLE_TOO_LONG

    SEO title exceeds the maximum length.

  • 400 BRAND_SEO_DESCRIPTION_INVALID_CHARS

    SEO description contains unsupported control characters.

  • 400 BRAND_SEO_DESCRIPTION_TOO_LONG

    SEO description exceeds the maximum length.

  • 400 BRAND_SLUG_INVALID_FORMAT

    Slug is not valid for Brand URLs.

  • 400 BRAND_SLUG_TOO_LONG

    Slug exceeds the maximum length.

  • 400 TEMPLATE_HANDLE_INVALID

    Template handle is not valid for Brand templates.

  • 400 TEMPLATE_HANDLE_NOT_FOUND

    Template handle is not available for this store.

  • 400 INVALID_INPUT

    image_id is malformed, is not an image, or references a file outside the Media-library upload namespace.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    A non-empty image_id requires read_files scope in addition to write_products.

  • 404 NOT_FOUND

    The supplied image does not exist in this store.

  • 409 BRAND_DUPLICATE

    Name or slug already exists in this store.

  • 400 BRAND_SLUG_GENERATION_FAILED

    A slug could not be generated from the supplied name.

  • 400 BRAND_UNIQUE_SLUG_GENERATION_FAILED

    A unique generated slug could not be found; supply a slug explicitly.

  • 400 BRAND_LIMIT_REACHED

    The store has reached its brand limit.

Bulk create brands

POST write_products

Create multiple brands by name.

Creates multiple brands from names. Slugs are generated server-side; existing names are skipped and reported in the response.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
names required array<string>

Brand names to create.

Example: Acme

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 BRAND_BULK_NO_NAMES

    No names were provided.

  • 400 BRAND_BULK_CREATE_TOO_MANY

    Batch exceeds the Brand bulk create cap.

  • 409 BRAND_BULK_DUPLICATE

    One of the names in the batch was just created by another request.

Update a brand

PUT write_products

Update a brand.

Updates only the fields you provide. Empty description and SEO values clear those fields; an empty image_id clears the image. A non-empty image_id must identify an uploaded image in this store and requires read_files; video, document, 3D-model, and site-asset ids are rejected. Omit template_handle to keep the assignment; default_brand resets it; empty is invalid. When slug changes, create_redirect defaults to true.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
name string

Brand name.

Example: Acme
slug string

New slug. Omit to leave the current slug unchanged; an empty value is invalid.

Example: acme
description string

Optional plain-text description.

Example: Acme makes durable outdoor gear.
seo_title string

Optional SEO title.

Example: Acme Outdoor Gear
seo_description string

Optional SEO description.

Example: Shop Acme outdoor gear.
image_id string

Optional Media-library upload image id. Video, document, 3D-model, and site-asset ids are invalid. Non-empty values require read_files access to the referenced file.

Example: f_8f2a1c2b9d4e
template_handle string

Template assignment. On create, omitting this field or sending an empty string assigns default_brand. Use default_brand for the default Brand template, or pass an alternate Brand template handle configured for the store. On update, omit template_handle to leave the assignment unchanged, use default_brand to reset it to default, and do not send an empty string.

Example: default_brand
create_redirect boolean

When slug changes, create a redirect from the previous slug.

Example: true

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is invalid.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 BRAND_NAME_REQUIRED

    Name is required.

  • 400 BRAND_NAME_INVALID_CHARS

    Name contains unsupported control characters.

  • 400 BRAND_NAME_TOO_LONG

    Name exceeds the maximum length.

  • 400 BRAND_DESCRIPTION_INVALID_CHARS

    Description contains unsupported control characters.

  • 400 BRAND_DESCRIPTION_TOO_LONG

    Description exceeds the maximum length.

  • 400 BRAND_SEO_TITLE_INVALID_CHARS

    SEO title contains unsupported control characters.

  • 400 BRAND_SEO_TITLE_TOO_LONG

    SEO title exceeds the maximum length.

  • 400 BRAND_SEO_DESCRIPTION_INVALID_CHARS

    SEO description contains unsupported control characters.

  • 400 BRAND_SEO_DESCRIPTION_TOO_LONG

    SEO description exceeds the maximum length.

  • 400 BRAND_SLUG_INVALID_FORMAT

    Slug is not valid for Brand URLs.

  • 400 BRAND_SLUG_TOO_LONG

    Slug exceeds the maximum length.

  • 400 TEMPLATE_HANDLE_INVALID

    Template handle is not valid for Brand templates.

  • 400 TEMPLATE_HANDLE_NOT_FOUND

    Template handle is not available for this store.

  • 400 INVALID_INPUT

    image_id is malformed, is not an image, or references a file outside the Media-library upload namespace.

  • 403 STORE_ADMIN_TOKEN_RUNTIME_FORBIDDEN

    A non-empty image_id requires read_files scope in addition to write_products.

  • 404 NOT_FOUND

    The supplied image does not exist in this store.

  • 409 BRAND_DUPLICATE

    Name or slug already exists in this store.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

  • 409 TRANSLATION_SOURCE_FIELD_HAS_TRANSLATIONS

    Clear a field's translations before clearing its source value.

Delete a brand

DELETE write_products

Delete a brand.

Deletes a brand. If dependent products, collection rules, or menu items require confirmation, retry with the returned confirmation token.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7

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

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is invalid.

  • 400 STORE_API_INVALID_REQUEST_BODY

    A non-empty request body must be valid JSON.

  • 400 BRAND_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation because dependent records will be changed.

Bulk delete brands

POST write_products

Delete multiple brands.

Send store-scoped integer brand ids in brand_ids. The first request needs only that array. If products, collection rules, or menu items will be changed, the API returns CONFIRMATION_REQUIRED; retry the same ids with confirmed: true and its confirmation_token. The success response separates deleted ids from missing or concurrently changed ids in deleted and failed. All database changes for the ids reported as deleted commit together.

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.

Example: [7, 11]
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

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 BRAND_BULK_NO_IDS

    No brand ids were provided.

  • 400 BRAND_BULK_DELETE_TOO_MANY

    Batch exceeds the Brand bulk delete cap.

  • 409 BRAND_BULK_RACED

    Dependencies changed while the bulk delete was running; retry with fresh state.

  • 400 BRAND_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation because dependent records will be changed.

Fields#

Field

Kind

Create

Update

Required

Translatable

name

text

Yes

Yes

create

Yes

slug

slug

Yes

Yes

Yes

description

textarea

Yes

Yes

Yes

seo_title

text

Yes

Yes

Yes

seo_description

textarea

Yes

Yes

Yes

image_id

image

Yes

Yes

No

template_handle

template

Yes

Yes

No

create_redirect

boolean

No

Yes

No

product_count

integer

No

No

No

created_at

datetime

No

No

No

updated_at

datetime

No

No

No

storefront_url

url

No

No

No

No

Webhook events#

Brand webhook events are declared by the Brand resource contract. The event cards below include the topic, subscription scope, store permission, payload schema, and sample payload.

Brand created

EVENT brands/create write_products products:write

Fired when a brand is created.

Payload fields

Field Type Description
brand.id integer Always present
brand.name string Can be removed/added via the Payload builder
brand.slug string Can be removed/added via the Payload builder
brand.description string Can be removed/added via the Payload builder
brand.seo_title string Can be removed/added via the Payload builder
brand.seo_description string Can be removed/added via the Payload builder
brand.image_id string Can be removed/added via the Payload builder
brand.image_url string Can be removed/added via the Payload builder
brand.image_cdn_url string Can be removed/added via the Payload builder
brand.product_count integer Can be removed/added via the Payload builder
brand.template_handle string Can be removed/added via the Payload builder
brand.created_at string Can be removed/added via the Payload builder
brand.updated_at string Can be removed/added via the Payload builder
brand.translations_updated_at string Can be removed/added via the Payload builder

Brand updated

EVENT brands/update write_products products:write

Fired when a brand is updated.

Payload fields

Field Type Description
brand.id integer Always present
brand.name string Can be removed/added via the Payload builder
brand.slug string Can be removed/added via the Payload builder
brand.description string Can be removed/added via the Payload builder
brand.seo_title string Can be removed/added via the Payload builder
brand.seo_description string Can be removed/added via the Payload builder
brand.image_id string Can be removed/added via the Payload builder
brand.image_url string Can be removed/added via the Payload builder
brand.image_cdn_url string Can be removed/added via the Payload builder
brand.product_count integer Can be removed/added via the Payload builder
brand.template_handle string Can be removed/added via the Payload builder
brand.created_at string Can be removed/added via the Payload builder
brand.updated_at string Can be removed/added via the Payload builder
brand.translations_updated_at string Can be removed/added via the Payload builder

Brand deleted

EVENT brands/delete write_products products:write

Fired when a brand is deleted.

Payload fields

Field Type Description
brand.id integer Always present
brand.name string Can be removed/added via the Payload builder
brand.slug string Can be removed/added via the Payload builder