How to build native e-commerce experiences using Edge Commerce

This guide showcases how to use Edge Commerce (Product Bus) to deliver EDS-native product catalog pages and product detail pages — combining structured commerce data from any backend with the performance and authoring simplicity of Edge Delivery Services.

Availability: Edge Commerce (Product Bus) is currently available as a VIP / Co-innovation engagement. Contact your Adobe account team to learn more.

Problem

  1. Scale: Product catalogs can have thousands of SKUs. Authoring every product detail page (PDP) by hand in a CMS does not scale.
  2. Performance: Merchants want product pages that perform like any other EDS content page with all the benefits of SEO, GEO and site speed.
  3. Coupling: Traditional platforms tightly couple catalog storage, rendering, and the storefront — making EDS adoption difficult without a full re-platform.

Solution

Edge Commerce (Product Bus) decouples catalog storage and ETL from storefront delivery and authoring choices. Products are ingested once via a simple REST API and stored in the Product Bus. A product pipeline then renders them as EDS-native HTML pages with JSON-LD structured data — automatically generating product index JSON for category listings, XML sitemaps, and Google Merchant Center feeds.

Your front-end stays 100% EDS. Authors can enrich product pages in Document Authoring using the same blocks they use for any other page — independently of the ingestion pipeline. The commerce data layer is transparent to the authoring experience.

For the full technical architecture and API reference, see the Product Bus documentation: https://main--helix-website--adobe.aem.page/drafts/dyland/product-bus-overview

How it works: End-to-End

The full Edge Commerce flow connects your catalog backend to EDS delivery in three stages:

  1. Ingestion: A customer-written ETL script (event or cron-triggered) calls the Helix Commerce API (api.adobecommerce.live) to PUT product data. The API validates the payload and writes it to the Product Bus (R2 storage).
  2. Indexing: Each product write triggers the Indexer, which maintains three files per category: default-index.json (product listing data), product-sitemap.xml, and merchant-feed.xml.
  3. Delivery: When a visitor opens a product URL, aem.network (helix-mixer) routes the request to the Product Pipeline worker. The pipeline fetches structured data from the Product Bus and authored enrichment from Edge Delivery, combines them, and returns a fully rendered HTML page with JSON-LD. If a DA-authored page exists at the same path as the product, its content is merged into the rendered response — allowing authors to enrich any product page with marketing content independently of the ingestion pipeline.

End-to-End Architecture

Two Authoring Layers

Product pages combine two independent authoring layers. Authors control the marketing experience in DA without touching the ingestion pipeline — and developers control the commerce data without touching DA.

Layer 1: Core Product Data via JSON Ingestion

The description field in the Product Bus API payload is the base layer — typically developer- or ETL-authored HTML. It carries the product's factual content: specs, format, level, and what's included. EDS block classes added here decorate automatically when the page renders. On FIRE, product descriptions use:

To update this layer, re-submit the product payload via the ingestion script. No DA authoring or deployment needed.

Layer 2: Marketing Enrichment via Document Authoring — takes precedence

The pipeline looks for a DA-authored page at the same path as the product. If one exists, its content is merged into the rendered page on top of the ingested data. This layer takes precedence and lets authors add rich marketing content to any product — without touching the ingestion API or waiting for a data re-sync. Authoring flow:

  1. Open DA at the matching product path (e.g. /products/books/etf-mastery-canadian-edition)
  2. Add EDS blocks — columns, tabs, teaser, FAQ sections, or any block available on the site
  3. Preview and publish
  4. The pipeline picks it up automatically — no reingestion needed

On FIRE, the three enriched PDPs use: columns for feature breakdowns, tabs for course module outlines, teaser for community pull-quotes, and plain H3/paragraph sections for FAQ content.

Building Category Listing Pages

The product-grid block reads a product index JSON and renders a responsive card grid. No code required from the author.

  1. Open a category page in DA (e.g. /products/books)
  2. Add a product-grid block to the page
  3. In the block, link to the category index JSON (e.g. /products/books/index.json)
  4. Preview and publish

The block automatically fetches products, resolves images, and renders a 1→2→3 column responsive grid with hover animations matching the site design tokens.

Live Examples on FIRE

The FIRE demo site (demo.bbird.live) showcases a 3-category product catalog — all delivered via Edge Commerce. Each PDP demonstrates the two-layer authoring model. Open any PDP and use View Source to see where the pipeline-rendered data ends and the DA-authored enrichment begins.

Category listing pages (powered by the product-grid block):

Sample product detail pages (structured data + DA-authored enrichment):

Product Ingestion API

Products are written to the Product Bus via a REST API. Minimal required payload shape:

PUT https://api.adobecommerce.live/{org}/sites/{site}/catalog/*

{
  "sku": "the-fire-playbook",
  "name": "The FIRE Playbook",
  "path": "/products/books/the-fire-playbook",
  "url": "https://demo.bbird.live/products/books/the-fire-playbook",
  "urlKey": "the-fire-playbook",
  "type": "simple",
  "availability": "InStock",
  "images": [{ "url": "https://...", "label": "Product image" }],
  "price": {
    "currency": "CAD",
    "regular": "29.99",
    "final": "29.99"
  },
  "custom": {
    "category": "Books",
    "format": "PDF + EPUB"
  }
}

The schema is strict — use the custom object for any extra product attributes not defined in the core schema. Write an ETL script in any language or runtime that can call an HTTP endpoint.

URL Routing (helix-mixer)

Configure mixerConfig in your site's /config.json to route product PDPs to the Product Pipeline and category/index pages to EDS:

{
  "patterns": {
    "/products/*/*": "pipeline-backend",
    "/products/*/index.json": "eds-backend",
    "/products/index.json": "eds-backend",
    "default": "eds-backend"
  },
  "backends": {
    "pipeline-backend": {
      "origin":
        "pipeline-cloudflare.adobecommerce.live"
    },
    "eds-backend": {
      "origin": "main--demo--scdemos.aem.live"
    }
  }
}

Longer patterns take priority. * does not cross slashes — so /products/*/* matches PDPs but not category roots or index files.

Note: For the complete API reference, schema details, image processing behavior, and multi-locale configuration, see the Product Bus documentation.