Skip to main content

Global Catalog extension

The Global Catalog extension adds Shopify-specific fields to the base UCP catalog tools. This page documents additional filters, variant fields, and inferred product fields that Global Catalog responses can include.

  • Extension name: dev.shopify.catalog.global.
  • Versions: 2026-04-08, 2026-08-25, and draft.
  • Extends: dev.ucp.shopping.catalog.search, dev.ucp.shopping.catalog.lookup.

This extension is scoped to the global catalog — products from across all Shopify merchants. For the single-store extension, see Storefront Catalog extension.


All three tools (search_catalog, lookup_catalog, and get_product) accept a catalog.filters object with the following Shopify-specific fields:

FieldTypeDefaultDescription
availablebooleantrueWhen true (default), only sale-ready items are returned. Set to false to include unavailable items.
conditionarray—Product condition filter. Known values: "new", "secondhand". Multiple values use OR logic. Absent means no condition filter.
ships_toobject—Filter to products that ship to a given location. When country matches context.address_country, the implementation might enrich with context region and postal code. Accepts country (required, ISO 3166-1 alpha-2), region, and postal_code.
ships_fromarray—Filter by merchant origin country. Each entry accepts country (required, ISO 3166-1 alpha-2). Multiple entries use OR logic. Digital products that don't require shipping can still match this filter.
shopsarray—Restrict results to specific shops by GID. You can pass up to 1000 shop IDs per request.

search_catalog also accepts these additional filters:

FilterTypeDefaultDescription
categoriesarray—Filter by product category. Each item is a taxonomy category GID (for example, "gid://shopify/TaxonomyCategory/123"). Multiple values use OR logic.
attributesarray—Filter by Shopify taxonomy attributes. Supported names are Color, Size, and Target gender. Entries combine with AND logic. Values within one entry combine with OR logic. Unsupported attribute names are ignored and returned in messages.
ratingobject—Filter by variant rating. Accepts variant, which matches products with at least one variant whose rating meets the given thresholds. variant.min sets the minimum rating value (0–5 scale) and variant.min_count sets the minimum number of reviews.
price_tierarray—Filter by relative price tier within each product's category. Supported values are low, medium, and high. Multiple values use OR logic. Unsupported values are ignored and returned in messages.
{
"catalog": {
"query": "running shoes",
"filters": {
"available": true,
"condition": ["new"],
"ships_to": {"country": "US"},
"ships_from": [{"country": "US"}],
"attributes": [
{"name": "Color", "values": ["Black", "Blue"]},
{"name": "Size", "values": ["10"]},
{"name": "Target gender", "values": ["Unisex"]}
],
"rating": {"variant": {"min": 4.5, "min_count": 10}},
"price_tier": ["low", "medium"]
}
}
}

Use catalog.like in a search_catalog request to find products similar to a reference product, variant, or image. Pass one item as one of:

  • Item reference: A product or variant GID. For example, {"id": "gid://shopify/p/..."}, {"id": "gid://shopify/Product/..."}, or {"id": "gid://shopify/ProductVariant/..."}.
  • Image content: A base64-encoded image with its MIME type. For example, {"image": {"content_type": "image/jpeg", "data": "<base64>"}}.

You can combine like with query in a single request to narrow similarity results by keyword. When like contains an image and query is present, Global Catalog uses multimodal search. Multimodal search uses the text query to describe what the agent is looking for and the image to provide visual context, such as style, shape, or pattern. When like contains only an image, Global Catalog uses visual similarity search, which returns items that visually resemble the image without additional text intent.

{
"catalog": {
"query": "trail running shoes",
"like": [
{"id": "gid://shopify/p/7f3a2b8c1d9e"}
],
"filters": {
"ships_to": {"country": "US"}
}
}
}

Draft

Rich media fields are available only in the draft version of the Global Catalog extension.

In the draft version, product and variant media arrays can include images, videos, and 3D models. The type field identifies the media type. Known values are image, video, and model_3d. If your agent doesn't recognize a media type, then ignore that media item.

Each media item has a primary url. Videos and 3D models can also include preview images and multiple source files so that your agent can select a supported format or rendition.

FieldTypeApplies toDescription
namestringAll mediaHuman-readable title or label that's distinct from accessibility-oriented alt_text.
previewobjectAll mediaPoster or thumbnail image to render before or instead of the primary resource. Includes url and can include width and height.
durationintegerVideosVideo duration in seconds.
embed_urlstringExternally hosted videosPlayer embed URL. When present, url identifies the video's watch page.
sourcesarrayVideos and 3D modelsComplete set of available video renditions or 3D model encodings.

Each entry in sources can include these fields:

FieldTypeDescription
urlstringURL of the rendition file or streaming manifest.
mime_typestringIANA media type, such as video/mp4 or model/gltf-binary.
formatstringShort format token, such as mp4, m3u8, glb, or usdz.
widthintegerPixel width of a video rendition.
heightintegerPixel height of a video rendition.
filesizeintegerFile size in bytes.

When sources is present and url identifies a rendition, sources should include an entry with the same URL. Adaptive-streaming manifests can omit width, height, and filesize. If your agent selects a video rendition from sources, then use that source's dimensions instead of the media item's dimensions.

The following example includes a video with two renditions and a 3D model with GLB and USDZ encodings:

{
"media": [
{
"type": "video",
"url": "https://cdn.example.com/products/runner-pro-demo-720p.mp4",
"name": "Runner Pro flex demo",
"alt_text": "Runner Pro shoe flexing to show sole cushioning.",
"duration": 24,
"preview": {
"url": "https://cdn.example.com/products/runner-pro-demo-poster.jpg",
"width": 1280,
"height": 720
},
"sources": [
{
"url": "https://cdn.example.com/products/runner-pro-demo-720p.mp4",
"mime_type": "video/mp4",
"format": "mp4",
"width": 1280,
"height": 720,
"filesize": 4200000
},
{
"url": "https://cdn.example.com/products/runner-pro-demo.m3u8",
"mime_type": "application/vnd.apple.mpegurl",
"format": "m3u8"
}
]
},
{
"type": "model_3d",
"url": "https://cdn.example.com/products/runner-pro.glb",
"name": "Runner Pro 3D model",
"alt_text": "Rotatable 3D model of the Runner Pro shoe.",
"preview": {
"url": "https://cdn.example.com/products/runner-pro-3d-poster.jpg"
},
"sources": [
{
"url": "https://cdn.example.com/products/runner-pro.glb",
"mime_type": "model/gltf-binary",
"format": "glb",
"filesize": 4200000
},
{
"url": "https://cdn.example.com/products/runner-pro.usdz",
"mime_type": "model/vnd.usdz+zip",
"format": "usdz",
"filesize": 5100000
}
]
}
]
}

For an externally hosted video, url identifies the watch page and embed_url identifies third-party active player content:

{
"type": "video",
"url": "https://videos.example.com/watch/runner-pro",
"embed_url": "https://videos.example.com/embed/runner-pro",
"name": "Runner Pro trail review",
"alt_text": "Reviewer running a trail in the Runner Pro.",
"preview": {
"url": "https://cdn.example.com/products/runner-pro-review-poster.jpg",
"width": 1280,
"height": 720
}
}

Your agent may decline to load third-party active content because of its security, privacy, or presentation policy and use the watch-page url instead.


Anchor to Inferred product fieldsInferred product fields

All three tool responses can include fields inferred or enriched by Shopify. These fields might not always be present or might vary in accuracy depending on available product data. Treat them as discovery and merchandising signals, not as merchant-authored source text.

FieldTypeTagDescription
descriptionobjectInferredProduct description generated or enriched by Shopify.
optionsArray[ProductOption]InferredProduct options normalized for catalog discovery and variant selection.
metadata.attributesArray[Attribute]InferredProduct attributes such as material, style, and occasion.
metadata.tech_specsArray[string]InferredTechnical specifications.
metadata.top_featuresArray[string]InferredTop product features.
metadata.unique_selling_pointsArray[string]InferredUnique selling propositions.
variants[].conditionArray[string]InferredProduct condition labels for this variant. Known values are "new" and "secondhand".

Variants include checkout URLs, purchase requirements, inventory signals, and seller identity:

FieldTypeDescription
checkout_urlstringDirect checkout URL for this variant.
requires.shippingbooleanWhether a shipping address is needed. When false, checkout can skip address collection.
requires.componentsbooleanWhether the variant requires bundle components. When true, the variant can only be purchased as a parent bundle.
conditionArray[string]Product condition labels for this variant. Known values: "new", "secondhand".
eligible.native_checkoutbooleanWhether this variant supports native (non-redirect) checkout. Default false.
availability.running_lowbooleanWhether inventory is limited. Only meaningful when available is true.
seller.idstringThe shop GID.
seller.urlstringThe storefront URL.
seller.domainstringThe primary domain of the shop.
Info

seller.name and seller.links are part of the base UCP spec and always present in Global Catalog responses.


The following example shows a search_catalog response with Global Catalog extension fields:

{
"result": {
"structuredContent": {
"ucp": {
"version": "2026-08-25",
"capabilities": {
"dev.ucp.shopping.catalog.search": [{"version": "2026-08-25"}],
"dev.shopify.catalog.global": [{"version": "2026-08-25"}]
}
},
"products": [
{
"id": "gid://shopify/p/7f3a2b8c1d9e",
"title": "Trail Runner Pro",
"description": {"html": "<p>Lightweight trail running shoe for road and light trail.</p>"},
"price_range": {
"min": {"amount": 8999, "currency": "USD"},
"max": {"amount": 12999, "currency": "USD"}
},
"metadata": {
"top_features": ["Lightweight", "Breathable mesh upper", "Cushioned sole"],
"unique_selling_points": ["Designed for road and light trail", "Responsive foam midsole"]
},
"variants": [
{
"id": "gid://shopify/ProductVariant/12345678",
"title": "Black / Size 10",
"price": {"amount": 8999, "currency": "USD"},
"checkout_url": "https://example-running.myshopify.com/cart/12345678:1",
"condition": ["new"],
"eligible": {"native_checkout": true},
"availability": {
"available": true,
"status": "in_stock",
"running_low": false
},
"requires": {"shipping": true, "selling_plan": false, "components": false},
"seller": {
"name": "Example Running",
"id": "gid://shopify/Shop/987654321",
"domain": "example-running.myshopify.com",
"url": "https://example-running.myshopify.com",
"links": [
{"type": "refund_policy", "url": "https://example-running.myshopify.com/policies/refunds"}
]
}
}
]
}
]
}
}
}

Was this page helpful?