Vendors group products by supplier or source. Reads require read_products; writes require write_products. A vendor supports name, slug, description, seo_title, seo_description, image_id, and template_handle. The slug is optional when creating a vendor and is generated from its name when omitted. Assigning a non-empty image_id also requires read_files for the referenced uploaded image. On create, omitting template_handle assigns default_vendor. Use default_vendor for the default vendor template, or pass an alternate vendor template handle configured for the store. Omit template_handle on update to leave the current assignment unchanged; an empty string is invalid.
Endpoints#
Vendor limits
Fetch vendor field limits and request limits.
Returns the validation limits clients need when building vendor forms and requests.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List vendors
List vendors for the store.
Returns vendors with pagination, search, and sorting.
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search query. |
sort_by
|
string |
Sort field from the Vendor list contract.
Allowed values
nameproduct_countcreated_atupdated_at |
sort_direction
|
string |
Sort direction from the Vendor list contract.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Search vendors
Search vendors for picker-style suggestions.
Returns lightweight vendor 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. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Get a vendor
Fetch one vendor by id.
Returns the vendor if it belongs to the token's store.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Vendor id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404VENDOR_NOT_FOUNDVendor does not exist in this store.
Create a vendor
Create a vendor.
Creates a vendor. name is required. Omit slug to generate it from the name. 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 |
Vendor name. |
slug
|
string |
Optional slug. Omit to generate from name. |
description
|
string |
Optional plain-text description. |
seo_title
|
string |
Optional SEO title. |
seo_description
|
string |
Optional SEO description. |
image_id
|
string |
Optional Media-library upload image id. Video, document, 3D-model, and site-asset ids are invalid. Non-empty values require |
template_handle
|
string |
Template assignment. On create, omitting this field or sending an empty string assigns |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
400STORE_API_CREATE_REDIRECT_UNSUPPORTEDcreate_redirect is only supported when updating a vendor.
-
400VENDOR_NAME_REQUIREDName is required.
-
400VENDOR_NAME_INVALID_CHARSName contains unsupported control characters.
-
400VENDOR_NAME_TOO_LONGName exceeds the maximum length.
-
400VENDOR_DESCRIPTION_INVALID_CHARSDescription contains unsupported control characters.
-
400VENDOR_DESCRIPTION_TOO_LONGDescription exceeds the maximum length.
-
400VENDOR_SEO_TITLE_INVALID_CHARSSEO title contains unsupported control characters.
-
400VENDOR_SEO_TITLE_TOO_LONGSEO title exceeds the maximum length.
-
400VENDOR_SEO_DESCRIPTION_INVALID_CHARSSEO description contains unsupported control characters.
-
400VENDOR_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the maximum length.
-
400VENDOR_SLUG_INVALID_FORMATSlug is not valid for Vendor URLs.
-
400VENDOR_SLUG_TOO_LONGSlug exceeds the maximum length.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Vendor templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle is not available for this store.
-
400INVALID_INPUTimage_id is malformed, is not an image, or references a file outside the Media-library upload namespace.
-
403STORE_ADMIN_TOKEN_RUNTIME_FORBIDDENA non-empty image_id requires read_files scope in addition to write_products.
-
404NOT_FOUNDThe supplied image does not exist in this store.
-
409VENDOR_DUPLICATEName or slug already exists in this store.
-
400VENDOR_SLUG_GENERATION_FAILEDA slug could not be generated from the supplied name.
-
400VENDOR_UNIQUE_SLUG_GENERATION_FAILEDA unique generated slug could not be found; supply a slug explicitly.
-
400VENDOR_LIMIT_REACHEDThe store has reached its vendor limit.
Bulk create vendors
Create multiple vendors by name.
Creates multiple vendors 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> |
Vendor names to create. |
Errors
-
400VENDOR_BULK_NO_NAMESNo names were provided.
-
400VENDOR_BULK_CREATE_TOO_MANYBatch exceeds the Vendor bulk create cap.
-
409VENDOR_BULK_DUPLICATEOne of the names in the batch was just created by another request.
Update a vendor
Update a vendor.
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. When slug changes, create_redirect controls whether the previous URL redirects to the new one and defaults to true.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Vendor id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
|
string |
Vendor name. |
slug
|
string |
New slug. Omit to leave the current slug unchanged; an empty value is invalid. |
description
|
string |
Optional plain-text description. |
seo_title
|
string |
Optional SEO title. |
seo_description
|
string |
Optional SEO description. |
image_id
|
string |
Optional Media-library upload image id. Video, document, 3D-model, and site-asset ids are invalid. Non-empty values require |
template_handle
|
string |
Template assignment. On create, omitting this field or sending an empty string assigns |
create_redirect
|
boolean |
When slug changes, create a redirect from the previous slug. |
Errors
-
400STORE_API_INVALID_VENDOR_IDVendor id is invalid.
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
400VENDOR_NAME_REQUIREDName is required.
-
400VENDOR_NAME_INVALID_CHARSName contains unsupported control characters.
-
400VENDOR_NAME_TOO_LONGName exceeds the maximum length.
-
400VENDOR_DESCRIPTION_INVALID_CHARSDescription contains unsupported control characters.
-
400VENDOR_DESCRIPTION_TOO_LONGDescription exceeds the maximum length.
-
400VENDOR_SEO_TITLE_INVALID_CHARSSEO title contains unsupported control characters.
-
400VENDOR_SEO_TITLE_TOO_LONGSEO title exceeds the maximum length.
-
400VENDOR_SEO_DESCRIPTION_INVALID_CHARSSEO description contains unsupported control characters.
-
400VENDOR_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the maximum length.
-
400VENDOR_SLUG_INVALID_FORMATSlug is not valid for Vendor URLs.
-
400VENDOR_SLUG_TOO_LONGSlug exceeds the maximum length.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Vendor templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle is not available for this store.
-
400INVALID_INPUTimage_id is malformed, is not an image, or references a file outside the Media-library upload namespace.
-
403STORE_ADMIN_TOKEN_RUNTIME_FORBIDDENA non-empty image_id requires read_files scope in addition to write_products.
-
404NOT_FOUNDThe supplied image does not exist in this store.
-
409VENDOR_DUPLICATEName or slug already exists in this store.
-
404VENDOR_NOT_FOUNDVendor does not exist in this store.
-
409TRANSLATION_SOURCE_FIELD_HAS_TRANSLATIONSClear a field's translations before clearing its source value.
Delete a vendor
Delete a vendor.
Deletes a vendor. If dependent products, collection rules, or menu items require confirmation, retry with the returned confirmation token.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Vendor 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
-
400VENDOR_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404VENDOR_NOT_FOUNDVendor does not exist in this store.
-
409CONFIRMATION_REQUIREDDelete requires confirmation because dependent records will be changed.
Bulk delete vendors
Delete multiple vendors.
Send store-scoped integer vendor ids in vendor_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 |
|---|---|---|
vendor_ids
required
|
array<integer> |
Store-scoped integer vendor 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 is not valid JSON.
-
400VENDOR_BULK_NO_IDSNo vendor_ids were provided.
-
400VENDOR_BULK_DELETE_TOO_MANYBatch exceeds the Vendor bulk delete cap.
-
409VENDOR_BULK_RACEDDependencies changed while the bulk delete was running; the affected id is returned in failed.
-
400VENDOR_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404VENDOR_NOT_FOUNDVendor does not exist in this store.
-
409CONFIRMATION_REQUIREDDelete requires confirmation because dependent records will be changed.
Fields#
Field |
Kind |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
text |
Yes |
Yes |
create |
Yes |
|
slug |
Yes |
Yes |
Yes |
|
|
textarea |
Yes |
Yes |
Yes |
|
|
text |
Yes |
Yes |
Yes |
|
|
textarea |
Yes |
Yes |
Yes |
|
|
image |
Yes |
Yes |
No |
|
|
template |
Yes |
Yes |
No |
|
|
boolean |
No |
Yes |
No |
|
|
integer |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
url |
No |
No |
No |
No |
Webhook events#
Vendor webhook events are declared by the Vendor resource contract. The event cards below include the topic, subscription scope, store permission, payload schema, and sample payload.
Vendor created
Fired when a vendor is created.
Payload fields
| Field | Type | Description |
|---|---|---|
vendor.id |
integer |
Always present |
vendor.name |
string |
Can be removed/added via the Payload builder |
vendor.slug |
string |
Can be removed/added via the Payload builder |
vendor.description |
string |
Can be removed/added via the Payload builder |
vendor.seo_title |
string |
Can be removed/added via the Payload builder |
vendor.seo_description |
string |
Can be removed/added via the Payload builder |
vendor.image_id |
string |
Can be removed/added via the Payload builder |
vendor.image_url |
string |
Can be removed/added via the Payload builder |
vendor.image_cdn_url |
string |
Can be removed/added via the Payload builder |
vendor.product_count |
integer |
Can be removed/added via the Payload builder |
vendor.template_handle |
string |
Can be removed/added via the Payload builder |
vendor.created_at |
string |
Can be removed/added via the Payload builder |
vendor.updated_at |
string |
Can be removed/added via the Payload builder |
vendor.translations_updated_at |
string |
Can be removed/added via the Payload builder |
Vendor updated
Fired when a vendor is updated.
Payload fields
| Field | Type | Description |
|---|---|---|
vendor.id |
integer |
Always present |
vendor.name |
string |
Can be removed/added via the Payload builder |
vendor.slug |
string |
Can be removed/added via the Payload builder |
vendor.description |
string |
Can be removed/added via the Payload builder |
vendor.seo_title |
string |
Can be removed/added via the Payload builder |
vendor.seo_description |
string |
Can be removed/added via the Payload builder |
vendor.image_id |
string |
Can be removed/added via the Payload builder |
vendor.image_url |
string |
Can be removed/added via the Payload builder |
vendor.image_cdn_url |
string |
Can be removed/added via the Payload builder |
vendor.product_count |
integer |
Can be removed/added via the Payload builder |
vendor.template_handle |
string |
Can be removed/added via the Payload builder |
vendor.created_at |
string |
Can be removed/added via the Payload builder |
vendor.updated_at |
string |
Can be removed/added via the Payload builder |
vendor.translations_updated_at |
string |
Can be removed/added via the Payload builder |
Vendor deleted
Fired when a vendor is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
vendor.id |
integer |
Always present |
vendor.name |
string |
Can be removed/added via the Payload builder |
vendor.slug |
string |
Can be removed/added via the Payload builder |