Skip to main content
This feature is available on the Pro plan only. The public metafields are written and kept in sync automatically whenever you save a bundle in the app.

Overview

On the Pro plan, Panori Bundles writes the bundle configuration into a public metafield namespace (panda_bundles) on every mother variant. This lets you build a fully custom bundle picker directly in your theme’s Liquid — no Theme App Extension block required.

Available Metafields

Each mother variant gets a metafield with the full bundle configuration for that variant. child_variants is a list.variant_reference — Shopify resolves each entry to a full variant object in Liquid, giving you live access to .price, .title, .image, .available, and all other variant properties.

Data structure

discount.type can be "percentage", "fixed", or "custom". For "custom", the price lives directly on the Shopify variant — no calculation needed.

Building the UI in Liquid

Use bundle_config for step structure and child_variants for live variant data. Combine them by matching variantId from the config against the resolved variant objects.
child_variants is a list.variant_reference — Shopify resolves it to actual variant objects at render time. Prices, availability, and images are always live. You do not need to manage staleness.

Submitting the Bundle to Cart

When the customer confirms their selection, you must POST to /cart/add.js with the selected variants plus a _bundle_config_json property on the first line item and a shared _bundle_id across all items.
1

Collect selections

Gather the selected variantId per step from your UI state.
2

Build the payload

Construct the _bundle_config_json from the bundle metafield and the customer’s selections.
3

POST to /cart/add.js

Add each selected child variant as a separate line item. Attach _bundle_config_json to the first item only, and _bundle_id to all items.

Server-side Validation

Do not include discount, isGift, maxVariants, or allowedVariantIds in the _bundle_config_json payload. These fields are ignored — Panori Bundles reads them exclusively from the server-side metafield.
When the cart is processed, the Panori Bundles cart transform function validates every bundle instance against the saved configuration: If any check fails, the bundle is not merged and the items remain as separate, full-price lines in the cart.