> ## Documentation Index
> Fetch the complete documentation index at: https://developers.redo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EmailTemplateShoppableProductsSection

> Shoppable product cards. The template trigger must provide Cart Context. `schemaFieldName` defaults to `cartContext`. `productFilterId` is a product filter id. This block cannot use the trigger-products sentinel.

<ResponseField name="cardCornerRadiusPx" type="Int!" required>
  Card corner radius in pixels.
</ResponseField>

<ResponseField name="checkoutButton" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-email-button">EmailTemplateBrandKitEmailButton!</a>} required>
  Checkout button.

  <Expandable title="fields" lazyRender>
    <ResponseField name="fullWidth" type="Boolean!" required>
      Stretch to the content width.
    </ResponseField>

    <ResponseField name="hierarchy" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-button-hierarchy">EmailTemplateButtonHierarchy!</a>} required>
      Primary, secondary, or tertiary.
    </ResponseField>

    <ResponseField name="override" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-button-override">EmailTemplateBrandKitButtonOverride!</a>} required>
      Style override.

      <Expandable title="fields" lazyRender>
        <ResponseField name="backgroundColor" type="String">
          Override fill. Null keeps the hierarchy default.
        </ResponseField>

        <ResponseField name="border" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-button-border">EmailTemplateBrandKitButtonBorder!</a>} required>
          Border.
        </ResponseField>

        <ResponseField name="enabled" type="Boolean!" required>
          Whether override styles apply.
        </ResponseField>

        <ResponseField name="font" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-font">EmailTemplateBrandKitFont!</a>} required>
          Label font.
        </ResponseField>

        <ResponseField name="paddingPx" type="Int!" required>
          Inner padding in pixels.
        </ResponseField>

        <ResponseField name="textColor" type="String!" required>
          Label color.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="text" type="String!" required>
      Button label.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="fontFamily" type="String!" required>
  One of the email builder's fonts (Arial, Courier New, Georgia, Lucida Sans Unicode, Tahoma, Times New Roman, Trebuchet MS, Verdana, Nunito, Poppins, Raleway, Inter, Pacifico) or a font from the store's brand kit. A single name gets a fallback of the same kind; a comma-separated list is used as written.
</ResponseField>

<ResponseField name="horizontalAlignment" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-alignment">EmailTemplateAlignment!</a>} required>
  Card alignment.
</ResponseField>

<ResponseField name="id" type="ID!" required>
  Stable id of this section (`blockId` in storage).
</ResponseField>

<ResponseField name="imageAspectRatio" type="Float">
  Width divided by height.
</ResponseField>

<ResponseField name="imageObjectFit" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-object-fit">EmailTemplateObjectFit</a>}>
  How the image fills its box. Null if unset.
</ResponseField>

<ResponseField name="kind" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-section-kind">EmailTemplateSectionKind!</a>} required>
  Always SHOPPABLE\_PRODUCTS.
</ResponseField>

<ResponseField name="manuallySelectedProducts" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-manual-product">[EmailTemplateManualProduct!]!</a>} required>
  Products used when productSelectionType is MANUAL.

  <Expandable title="fields" lazyRender>
    <ResponseField name="productId" type="String!" required>
      Store product id.
    </ResponseField>

    <ResponseField name="variantId" type="String!" required>
      Store variant id.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="numberOfDynamicProducts" type="Int!" required>
  How many dynamic products to show.
</ResponseField>

<ResponseField name="productButtons" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-email-button">EmailTemplateBrandKitEmailButton!</a>} required>
  Button on each product.

  <Expandable title="fields" lazyRender>
    <ResponseField name="fullWidth" type="Boolean!" required>
      Stretch to the content width.
    </ResponseField>

    <ResponseField name="hierarchy" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-button-hierarchy">EmailTemplateButtonHierarchy!</a>} required>
      Primary, secondary, or tertiary.
    </ResponseField>

    <ResponseField name="override" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-button-override">EmailTemplateBrandKitButtonOverride!</a>} required>
      Style override.

      <Expandable title="fields" lazyRender>
        <ResponseField name="backgroundColor" type="String">
          Override fill. Null keeps the hierarchy default.
        </ResponseField>

        <ResponseField name="border" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-button-border">EmailTemplateBrandKitButtonBorder!</a>} required>
          Border.
        </ResponseField>

        <ResponseField name="enabled" type="Boolean!" required>
          Whether override styles apply.
        </ResponseField>

        <ResponseField name="font" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-brand-kit-font">EmailTemplateBrandKitFont!</a>} required>
          Label font.
        </ResponseField>

        <ResponseField name="paddingPx" type="Int!" required>
          Inner padding in pixels.
        </ResponseField>

        <ResponseField name="textColor" type="String!" required>
          Label color.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="text" type="String!" required>
      Button label.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="productFilterId" type="ID">
  Saved product filter id from productFilters. Null when unset.
</ResponseField>

<ResponseField name="productSelectionType" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-product-selection-type">EmailTemplateProductSelectionType!</a>} required>
  Dynamic recommendations or a hand-picked list.
</ResponseField>

<ResponseField name="provider" type={<a href="/docs/api-reference/v3/reference/marketing/product-filter-provider">ProductFilterProvider!</a>} required>
  Which of this account's stores the products come from.
</ResponseField>

<ResponseField name="schemaFieldName" type="String">
  Cart Context key on this template's trigger. Defaults to cartContext.
</ResponseField>

<ResponseField name="sectionColor" type="String!" required>
  Section background color.
</ResponseField>

<ResponseField name="sectionPadding" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-padding">EmailTemplatePadding!</a>} required>
  Padding around the section.

  <Expandable title="fields" lazyRender>
    <ResponseField name="bottom" type="Int!" required>
      Bottom padding in pixels.
    </ResponseField>

    <ResponseField name="left" type="Int!" required>
      Left padding in pixels.
    </ResponseField>

    <ResponseField name="right" type="Int!" required>
      Right padding in pixels.
    </ResponseField>

    <ResponseField name="top" type="Int!" required>
      Top padding in pixels.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="show" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-product-card-content">EmailTemplateProductCardContent!</a>} required>
  Which parts of each card are visible.

  <Expandable title="fields" lazyRender>
    <ResponseField name="button" type="Boolean!" required>
      Show the product button.
    </ResponseField>

    <ResponseField name="description" type="Boolean!" required>
      Show the description.
    </ResponseField>

    <ResponseField name="image" type="Boolean!" required>
      Show the product image.
    </ResponseField>

    <ResponseField name="price" type="Boolean!" required>
      Show the price.
    </ResponseField>

    <ResponseField name="title" type="Boolean!" required>
      Show the product title.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="size" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-shoppable-products-size">EmailTemplateShoppableProductsSize!</a>} required>
  Card size.
</ResponseField>

<ResponseField name="textColor" type="String!" required>
  Text color.
</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.