Vendors

Manage vendors, product assignments, translations, and metafields through the Store API.

Vendors identify a product's supplier or source; brands identify the name shoppers see. A product can have zero or one vendor. 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_vendor on create; omit it on update to keep the current template.

Product assignments#

Use POST /products/bulk-vendor with product_ids and a vendor_id to assign one vendor to each product. Send vendor_id: null to clear those assignments.

Vendor field changes emit vendors/update. Product assignment changes emit products/update for changed products, not vendors/update. Fetch the vendor when you need its current product_count.

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#

Vendor limits

GET read_products

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

GET read_products

List vendors for the store.

Returns vendors and their product counts. Each page holds at most 100 vendors, and every row carries the full Vendor 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 /vendors/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
limit integer

Page size, 1-100 (default 50). Larger values return VALIDATION_LIST_INVALID_LIMIT.

Example: 20
cursor string

Opaque cursor from a previous vendors.list response. Omit for the first page; reset when search or sorting changes.

Example: eyJ2IjoxLCJyIjoidmVuZG9yIn0
search string

Search query.

Example: acme-supplies
sort_by string

Sort field from the Vendor list contract.

Allowed values
nameproduct_countcreated_atupdated_at
Example: name
sort_direction string

Sort direction from the Vendor list contract.

Allowed values
ascdesc
Example: asc

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_LIMIT

    Limit is outside the supported range.

  • 400 INVALID_INPUT

    Cursor is malformed or does not match the current search/sort state.

  • 400 VALIDATION_LIST_INVALID_SORT_BY

    Sort_by is not a supported Vendor list sort.

  • 400 VALIDATION_LIST_INVALID_SORT_DIRECTION

    Sort_direction is invalid.

  • 400 VENDOR_SEARCH_TOO_LONG

    Search exceeds the Vendor search length limit.

  • 400 LIST_RESPONSE_TOO_LARGE

    The page would be larger than the 512 KiB reply budget (long descriptions or many options). Request it again with a lower limit; error.params.fit estimates how many rows fit.

Search vendors

GET read_products

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.

Example: acme
limit integer

Suggestion count, 1-50 (default 10).

Example: 10

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_LIMIT

    Limit is outside the supported search range.

  • 400 VENDOR_SEARCH_TOO_LONG

    Q exceeds the Vendor search length limit.

Get a vendor

GET read_products

Fetch one vendor by id.

Returns the vendor 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

Vendor id.

Example: 7

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_VENDOR_ID

    Vendor id is not a positive integer.

  • 404 VENDOR_NOT_FOUND

    Vendor does not exist in this store.

List vendor metafields

GET read_products

List vendor 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

Vendor id.

Example: 7

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

  • 400 STORE_API_INVALID_VENDOR_ID

    Vendor id is not a positive integer.

  • 400 VALIDATION_LIST_INVALID_PAGE

    Page must be at least 1.

  • 400 VALIDATION_LIST_INVALID_LIMIT

    Limit is outside the supported range.

  • 404 NOT_FOUND

    Vendor does not exist in this store.

Set vendor metafields

PUT write_products

Create, update, or delete vendor 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

Vendor id.

Example: 7

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
metafields required array<object>

Entries shaped as {namespace, key, value}. value is required in every entry; send null or an empty string to delete the stored value.

Example: [{"namespace":"details","key":"origin","value":"Seoul"}]

Errors

  • 400 STORE_API_INVALID_VENDOR_ID

    Vendor id is not a positive integer.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 METAFIELD_NO_WRITES

    At least one metafield entry is required.

  • 400 METAFIELD_DUPLICATE_WRITE

    The request contains the same namespace and key more than once.

  • 400 PRODUCT_METAFIELD_DEF_NOT_FOUND

    The 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.

  • 403 METAFIELD_WRITE_MERCHANT_READ_ONLY

    This app-owned definition is not writable by the token.

  • 404 NOT_FOUND

    Vendor does not exist in this store. A file reference names a file that does not exist in this store.

  • 400 METAFIELD_VALUE_TOO_LONG

    The value exceeds its size limit: the definition's max_value_length, or the platform value size limit for the type.

  • 400 METAFIELD_VALUE_STRING_TOO_LONG

    A string value exceeds the definition's max_value_length or the platform string limit.

  • 400 METAFIELD_VALUE_TOO_SHORT

    A string value is shorter than the definition's min_length rule.

  • 400 METAFIELD_VALUE_PATTERN_MISMATCH

    A string value does not match the definition's pattern rule.

  • 400 METAFIELD_VALUE_INTEGER_INVALID

    An integer value is not a whole number in the 64-bit range.

  • 400 METAFIELD_VALUE_INTEGER_TOO_LONG

    An integer value has more digits than the definition or the platform integer limit allows.

  • 400 METAFIELD_VALUE_DECIMAL_INVALID

    A decimal value is not a finite decimal number.

  • 400 METAFIELD_VALUE_DECIMAL_TOO_LONG

    A decimal value, written out in full, is longer than the definition or the platform decimal limit allows.

  • 400 METAFIELD_VALUE_BELOW_MIN

    An integer or decimal value is below the definition's min rule.

  • 400 METAFIELD_VALUE_ABOVE_MAX

    An integer or decimal value is above the definition's max rule.

  • 400 METAFIELD_VALUE_BOOLEAN_INVALID

    A boolean value is not true or false.

  • 400 METAFIELD_VALUE_DATE_INVALID

    A date value is not a calendar date in YYYY-MM-DD form.

  • 400 METAFIELD_VALUE_DATETIME_INVALID

    A datetime value is not YYYY-MM-DDTHH:mm, YYYY-MM-DDTHH:mm:ss or an RFC 3339 timestamp.

  • 400 METAFIELD_VALUE_JSON_INVALID

    A json value is not valid JSON.

  • 400 METAFIELD_VALUE_JSON_UNSAFE_LINK

    A json value contains a link whose scheme is not http, https, mailto or tel.

  • 400 METAFIELD_VALUE_URL_INVALID

    A url value, or an item of a list.url value, is not an absolute URL with a host.

  • 400 METAFIELD_VALUE_URL_SCHEME

    A url value, or an item of a list.url value, does not use http or https.

  • 400 METAFIELD_VALUE_URL_TOO_LONG

    A url value, or an item of a list.url value, exceeds the definition's max_value_length or the platform URL limit.

  • 400 METAFIELD_VALUE_NOT_IN_CHOICES

    A single_select value is not one of the definition's choice keys.

  • 400 METAFIELD_LIST_CHOICE_INVALID

    An item of a list.single_select value is not one of the definition's choice keys; the message names the item.

  • 400 METAFIELD_LIST_STRINGS_INVALID

    A list.string or list.single_select value is not a JSON array of strings.

  • 400 METAFIELD_LIST_URLS_INVALID

    A list.url value is not a JSON array of strings.

  • 400 METAFIELD_LIST_FILES_INVALID

    A list.file_reference value is not a JSON array of strings.

  • 400 METAFIELD_LIST_IDS_INVALID

    A list.product_reference or list.variant_reference value is not a JSON array of integers.

  • 400 METAFIELD_LIST_EMPTY

    A list value other than list.string is an empty array. Send null or an empty string to remove the value instead.

  • 400 METAFIELD_LIST_TOO_MANY

    A list value has more items than the definition's max_list_items or the platform list limit for the type.

  • 400 METAFIELD_LIST_ITEM_EMPTY

    An item of a list.string value is empty or only whitespace; the message names the item.

  • 400 METAFIELD_LIST_ITEM_TOO_LONG

    An item of a list.string value exceeds the definition's max_value_length or the platform string limit; the message names the item.

  • 400 METAFIELD_VALUE_FILE_UUID_INVALID

    A file_reference value, or an item of a list.file_reference value, is not a file UUID.

  • 400 METAFIELD_VALUE_ID_INVALID

    A product_reference or variant_reference value is not an integer ID.

  • 400 METAFIELD_VALUE_ID_POSITIVE

    A product_reference or variant_reference value is not a positive integer.

  • 400 METAFIELD_VALUE_ID_TOO_LONG

    A product_reference or variant_reference value exceeds the platform reference ID limit.

  • 400 METAFIELD_LIST_ITEMS_POSITIVE

    An item of a list.product_reference or list.variant_reference value is not a positive integer.

  • 400 METAFIELD_REFERENCE_PRODUCT_MISSING

    A product reference names a product that does not exist in this store.

  • 400 METAFIELD_REFERENCE_VARIANT_MISSING

    A variant reference names a variant that does not exist in this store.

  • 400 INVALID_INPUT

    A file reference names a file that is not an uploaded file.

Create a vendor

POST write_products

Create a vendor.

Create with name; omit slug to generate it. Omitted or empty template_handle uses default_vendor. 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 CATALOG_REQUEST_KEY_CONFLICT.

Body parameters

Name Type Description
name required string

Vendor name.

Example: Acme Supplies
slug string

Optional slug. Omit to generate from name.

Example: acme-supplies
description string

Optional plain-text description.

Example: Acme Supplies provides wholesale outdoor gear.
seo_title string

Optional SEO title.

Example: Acme Supplies
seo_description string

Optional SEO description.

Example: Shop products supplied by Acme Supplies.
image_id string

Optional Media-library upload image UUID. Video, document, 3D-model, and site-asset ids are invalid. A non-empty value requires read_files access to the referenced file.

Example: 8f2a1c2b-9d4e-4a56-b789-0123456789ab
template_handle string

Vendor template assignment. Omit this field, send an empty string, or send default_vendor to use the default Vendor template. Otherwise, send a Vendor template handle available in the store's active theme.

Example: default_vendor

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 STORE_API_CREATE_REDIRECT_UNSUPPORTED

    Create_redirect is only supported when updating a vendor.

  • 400 VENDOR_NAME_REQUIRED

    Name is required.

  • 400 VENDOR_NAME_INVALID_CHARS

    Name contains unsupported control characters.

  • 400 VENDOR_NAME_TOO_LONG

    Name exceeds the maximum length.

  • 400 VENDOR_DESCRIPTION_INVALID_CHARS

    Description contains unsupported control characters.

  • 400 VENDOR_DESCRIPTION_TOO_LONG

    Description exceeds the maximum length.

  • 400 VENDOR_SEO_TITLE_INVALID_CHARS

    SEO title contains unsupported control characters.

  • 400 VENDOR_SEO_TITLE_TOO_LONG

    SEO title exceeds the maximum length.

  • 400 VENDOR_SEO_DESCRIPTION_INVALID_CHARS

    SEO description contains unsupported control characters.

  • 400 VENDOR_SEO_DESCRIPTION_TOO_LONG

    SEO description exceeds the maximum length.

  • 400 VENDOR_SLUG_INVALID_FORMAT

    Slug is not valid for Vendor URLs.

  • 400 VENDOR_SLUG_TOO_LONG

    Slug exceeds the maximum length.

  • 400 TEMPLATE_HANDLE_INVALID

    Template handle is not valid for Vendor templates.

  • 400 TEMPLATE_HANDLE_NOT_FOUND

    Template handle is not available for this store.

  • 400 INVALID_INPUT

    image_id is invalid or does not refer to an uploaded image in this store.

  • 403 STORE_API_SCOPE_REQUIRED

    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 VENDOR_DUPLICATE

    Name or slug already belongs to another vendor in this store, in any language. error.details.existing_id is that vendor's id, so a retried create can fetch it instead of creating it again.

  • 409 VENDOR_DELETE_IN_PROGRESS

    A vendor that is still being deleted holds the name or slug. Retry once the delete finishes.

  • 400 VENDOR_SLUG_GENERATION_FAILED

    A slug could not be generated from the supplied name.

  • 400 VENDOR_UNIQUE_SLUG_GENERATION_FAILED

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

  • 400 VENDOR_PLAN_LIMIT_REACHED

    The store has as many vendors as its plan allows; the message states the maximum. Fetch /vendors/limits for the store's current cap and usage.

  • 503 CATALOG_NAMESPACE_BUSY

    Another 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.

  • 400 CATALOG_REQUEST_KEY_TOO_LONG

    Idempotency-Key is longer than 255 characters.

  • 403 PLAN_UNKNOWN

    The store has no active plan, so nothing can be created until one is chosen.

  • 409 CATALOG_REQUEST_KEY_CONFLICT

    Idempotency-Key was already used with a different request body.

Bulk create vendors

POST write_products

Create multiple vendors by name.

Creates vendors from names and generates their slugs. Existing names appear in skipped; invalid rows appear in row_errors 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 CATALOG_REQUEST_KEY_CONFLICT.

Body parameters

Name Type Description
names required array<string>

Vendor names to create.

Example: ["Acme Supplies", "Northwind Traders", "Existing Vendor"]

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 VENDOR_BULK_NO_NAMES

    No names were provided.

  • 400 VENDOR_BULK_CREATE_TOO_MANY

    Batch exceeds the Vendor bulk create cap.

  • 409 VENDOR_BULK_DUPLICATE

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

  • 503 CATALOG_NAMESPACE_BUSY

    Another 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.

  • 400 CATALOG_REQUEST_KEY_TOO_LONG

    Idempotency-Key is longer than 255 characters.

  • 403 PLAN_UNKNOWN

    The store has no active plan, so nothing can be created until one is chosen.

  • 409 CATALOG_REQUEST_KEY_CONFLICT

    Idempotency-Key was already used with a different request body.

Update a vendor

PUT write_products

Update a vendor.

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_vendor 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

Vendor id.

Example: 7

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
name string

Vendor name.

Example: Acme Supplies
slug string

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

Example: acme-supplies
description string

New plain-text description. Omit to leave it unchanged; send an empty string to clear it.

Example: Acme Supplies provides wholesale outdoor gear.
seo_title string

New SEO title. Omit to leave it unchanged; send an empty string to clear it.

Example: Acme Supplies
seo_description string

New SEO description. Omit to leave it unchanged; send an empty string to clear it.

Example: Shop products supplied by Acme Supplies.
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 read_files access and must reference an image upload in this store.

Example: 8f2a1c2b-9d4e-4a56-b789-0123456789ab
template_handle string

New Vendor template assignment. Omit to leave it unchanged, send default_vendor to use the default Vendor template, or send another Vendor template handle available in the store's active theme. An empty string is invalid.

Example: default_vendor
create_redirect boolean

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

Example: true

Errors

  • 400 STORE_API_INVALID_VENDOR_ID

    Vendor id is invalid.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 VENDOR_NAME_REQUIRED

    Name is required.

  • 400 VENDOR_NAME_INVALID_CHARS

    Name contains unsupported control characters.

  • 400 VENDOR_NAME_TOO_LONG

    Name exceeds the maximum length.

  • 400 VENDOR_DESCRIPTION_INVALID_CHARS

    Description contains unsupported control characters.

  • 400 VENDOR_DESCRIPTION_TOO_LONG

    Description exceeds the maximum length.

  • 400 VENDOR_SEO_TITLE_INVALID_CHARS

    SEO title contains unsupported control characters.

  • 400 VENDOR_SEO_TITLE_TOO_LONG

    SEO title exceeds the maximum length.

  • 400 VENDOR_SEO_DESCRIPTION_INVALID_CHARS

    SEO description contains unsupported control characters.

  • 400 VENDOR_SEO_DESCRIPTION_TOO_LONG

    SEO description exceeds the maximum length.

  • 400 VENDOR_SLUG_INVALID_FORMAT

    Slug is not valid for Vendor URLs.

  • 400 VENDOR_SLUG_TOO_LONG

    Slug exceeds the maximum length.

  • 400 TEMPLATE_HANDLE_INVALID

    Template handle is not valid for Vendor templates.

  • 400 TEMPLATE_HANDLE_NOT_FOUND

    Template handle is not available for this store.

  • 400 INVALID_INPUT

    image_id is invalid or does not refer to an uploaded image in this store.

  • 403 STORE_API_SCOPE_REQUIRED

    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 VENDOR_DUPLICATE

    Name or slug already belongs to another vendor in this store, in any language. error.details.existing_id is that vendor's id, so a retried create can fetch it instead of creating it again.

  • 409 VENDOR_DELETE_IN_PROGRESS

    A vendor that is still being deleted holds the name or slug. Retry once the delete finishes.

  • 503 CATALOG_NAMESPACE_BUSY

    Another 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.

  • 404 VENDOR_NOT_FOUND

    Vendor does not exist in this store.

  • 409 TRANSLATION_SOURCE_FIELD_HAS_TRANSLATIONS

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

Delete a vendor

DELETE write_products

Delete a vendor.

Deletes the vendor, 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 vendor, product assignments, and collection rules change atomically. Menu links may update shortly after the response.

Path parameters

Name Type Description
id required integer

Vendor 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_VENDOR_ID

    Vendor id is invalid.

  • 400 STORE_API_INVALID_REQUEST_BODY

    A non-empty request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 VENDOR_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 VENDOR_NOT_FOUND

    Vendor does not exist in this store.

  • 409 VENDOR_BULK_RACED

    Dependencies changed before deletion; repeat the request to confirm the current impact.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation because dependent records will be changed.

Bulk delete vendors

POST write_products

Delete multiple vendors.

Send vendor IDs in vendor_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
vendor_ids required array<integer>

Store-scoped integer vendor 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 must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 VENDOR_BULK_NO_IDS

    No vendor_ids were provided.

  • 400 VENDOR_BULK_DELETE_TOO_MANY

    Batch exceeds the Vendor bulk delete cap.

  • 400 VENDOR_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation because dependent records will be changed.

Fields#

Field

Create

Update

Required

Translatable

id

No

No

No

store_id

No

No

No

name

Yes

Yes

create

Yes

slug

Yes

Yes

Yes

description

Yes

Yes

Yes

seo_title

Yes

Yes

Yes

seo_description

Yes

Yes

Yes

image_id

Yes

Yes

No

image_url

No

No

No

image_cdn_url

No

No

No

template_handle

Yes

Yes

No

create_redirect

No

Yes

No

product_count

No

No

No

created_at

No

No

No

updated_at

No

No

No

translations_updated_at

No

No

No

storefront_url

No

No

No

No

storefront_path

No

No

No

No

Webhook events#

Subscribe to these events to keep your integration in sync with vendors. 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.

Vendor created

EVENT vendors/create App scope: read_products Staff permission: products:write

Fired after a vendor is created. The payload contains the new vendor snapshot; product_count is 0 and translations_updated_at is null.

Payload fields

Field Type Description
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

vendor.description string Selectable in the Payload builder

The vendor description in the store's default language.

vendor.seo_title string Selectable in the Payload builder

The vendor page's SEO title in the store's default language.

vendor.seo_description string Selectable in the Payload builder

The vendor page's SEO description in the store's default language.

vendor.image_id string Selectable in the Payload builder

The assigned Media-library image UUID, or null when no image is assigned.

vendor.image_url string Selectable in the Payload builder

The storefront URL for the assigned image, or an empty string.

vendor.image_cdn_url string Selectable in the Payload builder

The delivery URL for the assigned image, or an empty string.

vendor.product_count integer Selectable in the Payload builder

The number of products assigned to the vendor when the event was created.

vendor.template_handle string Selectable in the Payload builder

The storefront Vendor template assigned to the vendor.

vendor.created_at string Selectable in the Payload builder

When the vendor was created.

vendor.updated_at string Selectable in the Payload builder

When the vendor last changed.

vendor.translations_updated_at string Selectable in the Payload builder

When any vendor translation last changed, or null when none exist.

Vendor updated

EVENT vendors/update App scope: read_products Staff permission: products:write

Fired after vendor fields change. Product assignment changes do not fire this event; fetch the vendor when you need an authoritative product_count. A rename is announced by this event alone (changed_fields includes name): the vendor's products do not each get products/update (channel apps still get product_publications/update for products on their channel), so refresh any vendor 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 seo_description seo_title slug template_handle

Payload fields

Field Type Description
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

vendor.description string Selectable in the Payload builder

The vendor description in the store's default language.

vendor.seo_title string Selectable in the Payload builder

The vendor page's SEO title in the store's default language.

vendor.seo_description string Selectable in the Payload builder

The vendor page's SEO description in the store's default language.

vendor.image_id string Selectable in the Payload builder

The assigned Media-library image UUID, or null when no image is assigned.

vendor.image_url string Selectable in the Payload builder

The storefront URL for the assigned image, or an empty string.

vendor.image_cdn_url string Selectable in the Payload builder

The delivery URL for the assigned image, or an empty string.

vendor.product_count integer Selectable in the Payload builder

The number of products assigned to the vendor when the event was created.

vendor.template_handle string Selectable in the Payload builder

The storefront Vendor template assigned to the vendor.

vendor.created_at string Selectable in the Payload builder

When the vendor was created.

vendor.updated_at string Selectable in the Payload builder

When the vendor last changed.

vendor.translations_updated_at string Selectable in the Payload builder

When any vendor translation last changed, or null when none exist.

previous.id integer Always present

The stable vendor id. This value is from before the update.

previous.name string Selectable in the Payload builder

The vendor name at the time the event was created. This value is from before the update.

previous.slug string Selectable in the Payload builder

The vendor slug at the time the event was created. This value is from before the update.

previous.description string Selectable in the Payload builder

The vendor description in the store's default language. This value is from before the update.

previous.seo_title string Selectable in the Payload builder

The vendor page's SEO title in the store's default language. This value is from before the update.

previous.seo_description string Selectable in the Payload builder

The vendor page's SEO description in the store's default language. This value is from before the update.

previous.image_id string Selectable in the Payload builder

The assigned Media-library image UUID, or null when no image is assigned. This value is from before the update.

previous.image_url string Selectable in the Payload builder

The storefront URL 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 assigned to the vendor when the event was created. This value is from before the update.

previous.template_handle string Selectable in the Payload builder

The storefront Vendor template assigned to the vendor. This value is from before the update.

previous.created_at string Selectable in the Payload builder

When the vendor was created. This value is from before the update.

previous.updated_at string Selectable in the Payload builder

When the vendor last changed. This value is from before the update.

previous.translations_updated_at string Selectable in the Payload builder

When any vendor translation last changed, or null when none exist. This value is from before the update.

changed_fields array Always present

The vendor fields changed by this event.

change_type string Always present

Why vendors/update fired: source for vendor field edits.

Vendor deleted

EVENT vendors/delete App scope: read_products Staff permission: products:write

Fired after a vendor is deleted. Removed translations and metafield values have separate delete events.

Payload fields

Field Type Description
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

Vendor metafield value created

EVENT vendor_metafields/create App scope: read_products Staff permission: products:write

Fired after a vendor metafield value is created. The payload contains the vendor identity, definition, and stored value.

Payload fields

Field Type Description
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

metafield.definition.id string Selectable in the Payload builder

The stable metafield definition UUID.

metafield.definition.owner_type string Selectable in the Payload builder

The resource type that can hold this definition; vendor for these events.

metafield.definition.namespace string Selectable in the Payload builder

The definition namespace.

metafield.definition.key string Selectable in the Payload builder

The definition key within its namespace.

metafield.definition.name string Selectable in the Payload builder

The merchant-facing definition name.

metafield.definition.description string Selectable in the Payload builder

The optional merchant-facing definition description.

metafield.definition.type string Selectable in the Payload builder

The metafield value type.

metafield.definition.is_translatable boolean Selectable in the Payload builder

Whether the stored value can have locale-specific translations.

metafield.definition.max_value_length integer Selectable in the Payload builder

The maximum stored string length, or null when this limit does not apply.

metafield.definition.max_list_items integer Selectable in the Payload builder

The maximum number of list items, or null when this limit does not apply.

metafield.definition.sort_order integer Selectable in the Payload builder

The definition's display order.

metafield.definition.app_id string Selectable in the Payload builder

The owning app id, or null for a merchant-owned definition.

metafield.definition.app_access string Selectable in the Payload builder

Whether another authorized app may read the definition: private or shared.

metafield.definition.merchant_access string Selectable in the Payload builder

How Store Admin can access an app-owned definition: hidden, read, or read_write.

metafield.definition.created_at string Selectable in the Payload builder

When the definition was created.

metafield.definition.updated_at string Selectable in the Payload builder

When the definition last changed.

metafield.definition.usage_count integer Selectable in the Payload builder

The number of vendor values currently stored for this definition.

metafield.value string Selectable in the Payload builder

The stored metafield value.

metafield.created_at string Selectable in the Payload builder

When this vendor's value was created.

metafield.updated_at string Selectable in the Payload builder

When this vendor's value last changed.

Vendor metafield value updated

EVENT vendor_metafields/update App scope: read_products Staff permission: products:write

Fired after a vendor metafield value changes. previous and current contain the value snapshots, and changed_fields is ["value"].

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
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

previous.definition.id string Selectable in the Payload builder

The stable metafield definition UUID.

previous.definition.owner_type string Selectable in the Payload builder

The resource type that can hold this definition; vendor for these events.

previous.definition.namespace string Selectable in the Payload builder

The definition namespace.

previous.definition.key string Selectable in the Payload builder

The definition key within its namespace.

previous.definition.name string Selectable in the Payload builder

The merchant-facing definition name.

previous.definition.description string Selectable in the Payload builder

The optional merchant-facing definition description.

previous.definition.type string Selectable in the Payload builder

The metafield value type.

previous.definition.is_translatable boolean Selectable in the Payload builder

Whether the stored value can have locale-specific translations.

previous.definition.max_value_length integer Selectable in the Payload builder

The maximum stored string length, or null when this limit does not apply.

previous.definition.max_list_items integer Selectable in the Payload builder

The maximum number of list items, or null when this limit does not apply.

previous.definition.sort_order integer Selectable in the Payload builder

The definition's display order.

previous.definition.app_id string Selectable in the Payload builder

The owning app id, or null for a merchant-owned definition.

previous.definition.app_access string Selectable in the Payload builder

Whether another authorized app may read the definition: private or shared.

previous.definition.merchant_access string Selectable in the Payload builder

How Store Admin can access an app-owned definition: hidden, read, or read_write.

previous.definition.created_at string Selectable in the Payload builder

When the definition was created.

previous.definition.updated_at string Selectable in the Payload builder

When the definition last changed.

previous.definition.usage_count integer Selectable in the Payload builder

The number of vendor values currently stored for this definition.

previous.value string Selectable in the Payload builder

The stored value before the change.

previous.created_at string Selectable in the Payload builder

When this vendor's value was created.

previous.updated_at string Selectable in the Payload builder

When this vendor's value last changed.

current.definition.id string Selectable in the Payload builder

The stable metafield definition UUID.

current.definition.owner_type string Selectable in the Payload builder

The resource type that can hold this definition; vendor for these events.

current.definition.namespace string Selectable in the Payload builder

The definition namespace.

current.definition.key string Selectable in the Payload builder

The definition key within its namespace.

current.definition.name string Selectable in the Payload builder

The merchant-facing definition name.

current.definition.description string Selectable in the Payload builder

The optional merchant-facing definition description.

current.definition.type string Selectable in the Payload builder

The metafield value type.

current.definition.is_translatable boolean Selectable in the Payload builder

Whether the stored value can have locale-specific translations.

current.definition.max_value_length integer Selectable in the Payload builder

The maximum stored string length, or null when this limit does not apply.

current.definition.max_list_items integer Selectable in the Payload builder

The maximum number of list items, or null when this limit does not apply.

current.definition.sort_order integer Selectable in the Payload builder

The definition's display order.

current.definition.app_id string Selectable in the Payload builder

The owning app id, or null for a merchant-owned definition.

current.definition.app_access string Selectable in the Payload builder

Whether another authorized app may read the definition: private or shared.

current.definition.merchant_access string Selectable in the Payload builder

How Store Admin can access an app-owned definition: hidden, read, or read_write.

current.definition.created_at string Selectable in the Payload builder

When the definition was created.

current.definition.updated_at string Selectable in the Payload builder

When the definition last changed.

current.definition.usage_count integer Selectable in the Payload builder

The number of vendor values currently stored for this definition.

current.value string Selectable in the Payload builder

The stored value after the change.

current.created_at string Selectable in the Payload builder

When this vendor's value was created.

current.updated_at string Selectable in the Payload builder

When this vendor's value last changed.

changed_fields array Selectable in the Payload builder

The metafield fields that changed. Vendor metafield update events currently contain value.

Vendor metafield value deleted

EVENT vendor_metafields/delete App scope: read_products Staff permission: products:write

Fired when a vendor metafield value is deleted, including as part of vendor deletion. Removed translations have separate delete events.

Payload fields

Field Type Description
vendor.id integer Always present

The stable vendor id.

vendor.name string Selectable in the Payload builder

The vendor name at the time the event was created.

vendor.slug string Selectable in the Payload builder

The vendor slug at the time the event was created.

metafield.definition.id string Selectable in the Payload builder

The stable metafield definition UUID.

metafield.definition.owner_type string Selectable in the Payload builder

The resource type that can hold this definition; vendor for these events.

metafield.definition.namespace string Selectable in the Payload builder

The definition namespace.

metafield.definition.key string Selectable in the Payload builder

The definition key within its namespace.

metafield.definition.name string Selectable in the Payload builder

The merchant-facing definition name.

metafield.definition.description string Selectable in the Payload builder

The optional merchant-facing definition description.

metafield.definition.type string Selectable in the Payload builder

The metafield value type.

metafield.definition.is_translatable boolean Selectable in the Payload builder

Whether the stored value can have locale-specific translations.

metafield.definition.max_value_length integer Selectable in the Payload builder

The maximum stored string length, or null when this limit does not apply.

metafield.definition.max_list_items integer Selectable in the Payload builder

The maximum number of list items, or null when this limit does not apply.

metafield.definition.sort_order integer Selectable in the Payload builder

The definition's display order.

metafield.definition.app_id string Selectable in the Payload builder

The owning app id, or null for a merchant-owned definition.

metafield.definition.app_access string Selectable in the Payload builder

Whether another authorized app may read the definition: private or shared.

metafield.definition.merchant_access string Selectable in the Payload builder

How Store Admin can access an app-owned definition: hidden, read, or read_write.

metafield.definition.created_at string Selectable in the Payload builder

When the definition was created.

metafield.definition.updated_at string Selectable in the Payload builder

When the definition last changed.

metafield.definition.usage_count integer Selectable in the Payload builder

The number of vendor values currently stored for this definition.

metafield.value string Selectable in the Payload builder

The stored metafield value.

metafield.created_at string Selectable in the Payload builder

When this vendor's value was created.

metafield.updated_at string Selectable in the Payload builder

When this vendor's value last changed.