Skip to main content

Storefront Catalog extension

The Storefront Catalog extension adds Shopify-specific fields to the base UCP catalog tools. When this extension is active, responses include additional fields on products and variants, and requests accept an additional filter.

  • Extension name: dev.shopify.catalog.storefront
  • Version: 2026-04-08
  • Extends: dev.ucp.shopping.catalog.search, dev.ucp.shopping.catalog.lookup

This extension is scoped to a single merchant's storefront. For the cross-merchant extension, see Global Catalog extension.


When this extension is active, products in search_catalog, lookup_catalog, and get_product responses include:

FieldTypeDescription
gift_cardbooleanWhether this product is a gift card — a digital product, not a physical item.
collectionsArray[Collection]Merchant-curated collections this product belongs to.

Each collection object contains:

FieldTypeDescription
idstringCollection GID (e.g., gid://shopify/Collection/123).
handlestringURL-safe slug for the collection.
titlestringCollection display name.
descriptionDescriptionCollection description in HTML format.
urlstringCanonical collection page URL (if available).
mediaArray[Media]Collection image (if available).

Variants include checkout prerequisites and purchase options:

FieldTypeDescription
requires.shippingbooleanWhether a shipping address is needed. When false, checkout can skip address collection.
requires.selling_planbooleanWhether a selling plan must be selected. When true, include a selling_plan_id on the checkout line item.
checkout_urlstringDirect checkout URL for this variant.
selling_plansArray[SellingPlan]Available purchase options (subscriptions). Only on get_product responses — use requires.selling_plan in search to detect availability.

Each selling plan includes:

FieldTypeDescription
idstringSelling plan GID.
namestringPlan display name (e.g., "Subscribe & save 15%").
groupstringSelling plan group name.
recurringbooleanWhether this plan involves recurring deliveries.
descriptionstringOptional plan description.
optionsArrayPlan options with name and value.
priceobjectPrice adjustment with type, value, and currency.

When this extension is active, search_catalog and lookup_catalog accept an additional filter:

FieldTypeDefaultDescription
availablebooleantrueWhen true (default), only sale-ready items are returned. Set to false to include unavailable items.
{
"catalog": {
"query": "shirts",
"filters": {
"available": false
}
}
}

A lookup response with the storefront extension active, showing a physical product and a gift card:

{
"ucp": {
"version": "2026-04-08",
"capabilities": {
"dev.ucp.shopping.catalog.lookup": [{"version": "2026-04-08"}],
"dev.shopify.catalog.storefront": [{"version": "2026-04-08"}]
}
},
"products": [
{
"id": "gid://shopify/Product/101",
"title": "Classic Blue Oxford Shirt",
"description": {"html": "<p>Tailored cotton oxford shirt.</p>"},
"price_range": {
"min": {"amount": 7500, "currency": "USD"},
"max": {"amount": 7500, "currency": "USD"}
},
"collections": [
{
"id": "gid://shopify/Collection/shirts",
"handle": "shirts",
"title": "Shirts",
"description": {"html": "<p>Dress and casual shirts.</p>"}
}
],
"variants": [
{
"id": "gid://shopify/ProductVariant/201",
"title": "Size M",
"price": {"amount": 7500, "currency": "USD"},
"availability": {"available": true},
"requires": {"shipping": true},
"checkout_url": "https://example.myshopify.com/cart/201:1",
"inputs": [{"id": "gid://shopify/Product/101", "match": "featured"}]
}
]
},
{
"id": "gid://shopify/Product/102",
"title": "$50 Gift Card",
"gift_card": true,
"price_range": {
"min": {"amount": 5000, "currency": "USD"},
"max": {"amount": 5000, "currency": "USD"}
},
"variants": [
{
"id": "gid://shopify/ProductVariant/202",
"title": "$50 Gift Card",
"price": {"amount": 5000, "currency": "USD"},
"availability": {"available": true},
"requires": {"shipping": false},
"checkout_url": "https://example.myshopify.com/cart/202:1",
"inputs": [{"id": "gid://shopify/Product/102", "match": "featured"}]
}
]
}
]
}

Physical product has requires.shipping: true; gift card has gift_card: true and requires.shipping: false.


Was this page helpful?