@avvyr/storefront-sdk - v0.19.0
    Preparing search index...

    Interface StorefrontProduct

    interface StorefrontProduct {
        assetCount?: number;
        assets?: StorefrontAsset[];
        attributes?: StorefrontAttribute[];
        averageScore?: number;
        badges?: string[];
        barcode?: string | null;
        brand?: string;
        bundle?: StorefrontBundle;
        campaigns?: string[];
        categoryFacets?: string[];
        categoryIds?: string[];
        color_stack?: StorefrontColorVariant[];
        description?: string;
        discountPercentage?: number;
        handle: string;
        index?: { created?: string; updated?: string };
        isDiscounted?: boolean;
        isVariantParent?: boolean;
        labels?: string[];
        listable?: boolean;
        listingGroupId?: string;
        listingHandle?: string;
        listingName?: string;
        listingPrice: number | null;
        listingPriceExVat?: number;
        listingPriceIncVat?: number;
        name: string;
        priceFrom?: number;
        priceFromExVat?: number;
        priceTo?: number;
        priceToExVat?: number;
        productId: string;
        recommendedRetailPriceExVat?: number;
        recommendedRetailPriceIncVat?: number;
        reviewCount?: number;
        sellingPrice: number | null;
        sellingPriceExVat?: number;
        sellingPriceIncVat?: number;
        sku: string;
        status?: "active" | "inactive" | "draft" | "hidden";
        stockLevels?: StorefrontStockLevel[];
        tags?: string[];
        tierPrices?: StorefrontTierPrice[];
        type: "simple" | "bundle" | "variant";
        unitOfMeasure?: StorefrontUnitOfMeasure[];
        variantCount?: number;
        variantGroupId?: string;
        variants?: StorefrontVariant[];
        vatPercentage?: number;
    }
    Index
    assetCount?: number
    assets?: StorefrontAsset[]
    attributes?: StorefrontAttribute[]
    averageScore?: number
    badges?: string[]
    barcode?: string | null

    Sales-unit barcode (EAN). Searchable server-side; shown on PDP.

    brand?: string
    campaigns?: string[]
    categoryFacets?: string[]

    Flattened category hierarchy for this product — one entry per category in the chain (the leaf category and every ancestor). Each entry is pipe-delimited: categoryId|localizedName|parentId (the parentId segment is empty for a root category). Because the leaf and all ancestors are present, the full breadcrumb trail can be reconstructed from this field alone, with no extra category request — see the useProductBreadcrumb composable in @avvyr/storefront-nuxt.

    categoryIds?: string[]
    color_stack?: StorefrontColorVariant[]
    description?: string
    discountPercentage?: number
    handle: string
    index?: { created?: string; updated?: string }
    isDiscounted?: boolean
    isVariantParent?: boolean

    A variant parent: opens, never buys. The picker lists its children.

    labels?: string[]
    listable?: boolean

    false on a variant parent whose children are the cards. Missing means listable.

    listingGroupId?: string

    One card per listing group: the collapse key of listings.

    listingHandle?: string

    The product's canonical listing address. Equals handle for simple products; for a variant in a parent-child family it is the parent's handle plus one segment per splitting axis ("st-hermine/svart"). Link cards here and 301 a product page whose handle differs.

    listingName?: string

    The card's name: the parent's name plus the split value ("St Hermine Svart").

    listingPrice: number | null

    Same basis and same null rule as sellingPrice.

    listingPriceExVat?: number
    listingPriceIncVat?: number
    name: string
    priceFrom?: number

    Group price range (parent-child listings), incl. VAT and ex VAT.

    priceFromExVat?: number
    priceTo?: number
    priceToExVat?: number
    productId: string
    recommendedRetailPriceExVat?: number
    recommendedRetailPriceIncVat?: number
    reviewCount?: number
    sellingPrice: number | null

    The market's own basis, inc or ex VAT per StorefrontMarket.pricesIncVat.

    null means HIDDEN, not free: on a market with pricesRequireLogin an anonymous read carries no prices at all (every other price field below is absent too). 0 still means "no price set". See StorefrontMarket.pricesRequireLogin.

    sellingPriceExVat?: number
    sellingPriceIncVat?: number
    sku: string
    status?: "active" | "inactive" | "draft" | "hidden"
    stockLevels?: StorefrontStockLevel[]
    tags?: string[]
    tierPrices?: StorefrontTierPrice[]
    type: "simple" | "bundle" | "variant"
    unitOfMeasure?: StorefrontUnitOfMeasure[]

    Units of measure — packaging, weight and dimensions per unit.

    variantCount?: number
    variantGroupId?: string
    variants?: StorefrontVariant[]
    vatPercentage?: number