Adobe Merchant Services GraphQL
Adobe Merchant Services—Catalog Service, Live Search, and Product Recommendations—are SaaS extensions for Adobe Commerce that expose their own GraphQL schemas. These schemas are separate from the core Commerce GraphQL schema and optimized for fast, read-only storefront rendering.
How the three services relate to each other
Although each service addresses a distinct storefront use case, they share a common technical foundation and are designed to work together:
| Service | Primary purpose |
|---|---|
Catalog Service | Renders product detail pages (PDPs) and product compare pages by fetching rich product data by SKU. |
Live Search | Powers product listing pages (PLPs) and on-site search with AI-driven relevance, faceting, and merchandising rules. |
Product Recommendations | Surfaces AI-generated product suggestions ("Customers who viewed this also viewed…") as recommendation units on any storefront page. |
Shared dependency. Product Recommendations requires Catalog Service (v2.2.0 or later) to retrieve complete product data for each recommended item. If you use Product Recommendations, you must also have Catalog Service installed.
Complementary coverage. A typical storefront uses all three:
products(Catalog Service) on the PDPproductSearch(Live Search) on the PLP and search results pagerecommendations(Product Recommendations) as widgets on the PDP, home page, and cart pagevariantsandrefineProduct(Catalog Service) for option selection on the PDP
How Merchant Services differ from the core GraphQL schema
The core Commerce GraphQL endpoint (<commerce-url>/graphql) provides a comprehensive schema for all Commerce operations: catalog browsing, cart management, checkout, customer accounts, orders, and more. The Merchant Services schemas are narrowly scoped for read-only storefront rendering, and they differ from the core schema in the following ways.
Separate endpoints
Merchant Services queries do not use the standard Commerce GraphQL endpoint. They are sent to dedicated Adobe SaaS endpoints:
| Edition | Environment | Endpoint |
|---|---|---|
PaaS | Testing | https://catalog-service-sandbox.adobe.io/graphql |
PaaS | Production | https://catalog-service.adobe.io/graphql |
SaaS | Testing | https://na1-sandbox.api.commerce.adobe.com/{{tenant-id}}/graphql |
SaaS | Production | https://na1.api.commerce.adobe.com/{{tenant-id}}/graphql |
Different HTTP headers
Instead of the authentication tokens used by core Commerce, these services require SaaS context headers:
| Header | Required by | Description |
|---|---|---|
Magento-Environment-Id | All three services | The SaaS Data Space ID from the Commerce Admin |
Magento-Store-Code | All three services | Store code |
Magento-Store-View-Code | All three services | Store view code |
Magento-Website-Code | All three services | Website code |
X-Api-Key | Catalog Service, Product Recommendations | Unique API key for your Commerce environment |
X-Api-Key: search_gql | Live Search | Fixed value required for Live Search requests |
Magento-Customer-Group | Catalog Service, Product Recommendations | Customer group for personalized pricing |
Different data types
Merchant Services return their own types that are not interchangeable with core types:
- The Catalog Service
productsquery returnsProductViewobjects (SimpleProductVieworComplexProductView), not the coreProductstype. Prices, images, attributes, and options are structured differently. - The Live Search
productSearchquery returnsProductSearchResponsewith facets (Aggregation) and merchandising metadata. The coreproductsquery returns layered-navigation data for categories, which is a fundamentally different filtering model. - Both the Catalog Service and core Commerce expose a
categoriesquery, but the Catalog Service version is read-optimized and returns only the data needed to render category navigation, not the full administrative category tree.
No write operations
Merchant Services schemas contain only queries. All mutations (cart, checkout, customer, orders) remain in the core schema and must be sent to the core endpoint.
When to use Merchant Services queries
Use Merchant Services queries when:
- Building or customizing a storefront and you need the fastest possible catalog rendering for PDPs, PLPs, search, or recommendations.
- Your storefront front end (for example, an Edge Delivery Services or headless storefront) needs to fetch catalog data independently from cart and checkout operations.
- You need advanced search features like semantic search, AI merchandising rules, synonyms, or faceted filtering that are not available in the core
productsquery. - You need AI-driven product recommendations that are automatically trained on shopper behavior.
Do not use Merchant Services queries when:
- You need to perform a write operation (add to cart, place an order, update a customer profile). These operations always use the core schema.
- You need real-time inventory or pricing that must be guaranteed up to the millisecond; Merchant Services data is indexed asynchronously.
- You are working on a server-side admin workflow or integration that reads data from Commerce for non-storefront purposes (use the core REST or GraphQL APIs instead).
- The Merchant Services extensions are not installed or your Commerce instance is not connected to Adobe's SaaS platform.
How Merchant Services differ from Adobe Commerce Optimizer
Adobe Commerce Optimizer is a standalone SaaS platform that is not installed as an extension on an existing Commerce instance. It provides the Merchandising GraphQL API, which covers a similar set of storefront use cases but with a different architecture, different query signatures, and different headers.
Architectural difference
| Aspect | Merchant Services | Commerce Optimizer |
|---|---|---|
Deployment model | Extensions installed on an existing Adobe Commerce (PaaS or SaaS) instance | Standalone SaaS platform; catalog data is ingested via a separate Data Ingestion API |
Data source | Commerce catalog, indexed into Adobe SaaS | Data ingested independently into Commerce Optimizer |
Context model | Store view and website codes from Commerce | Catalog views and policies defined in Commerce Optimizer |
Authentication | X-Api-Key tied to your Commerce environment | No API key required; context is provided through AC-View-Id |
Different headers
Commerce Optimizer uses a different set of context headers that reflect its catalog-view model:
| Header | Description |
|---|---|
AC-View-Id | Required. Identifies the catalog view (replaces Magento-Store-View-Code / Magento-Environment-Id) |
AC-Price-Book-ID | Optional. Specifies the price book for pricing context |
AC-Policy-{*} | Optional. Restricts product access based on request attributes (for example, brand or channel policies) |
Query-level differences
The Merchandising GraphQL API provides queries that are similar in name to some Merchant Services queries but are not identical in structure or behavior:
| Query | Merchant Services | Commerce Optimizer |
|---|---|---|
products | Catalog Service — fetch by SKU, returns ProductView | Same name, same general purpose, but uses AC-View-Id context |
productSearch | Live Search / Catalog Service — full search with phrase, filter, sort, optional context | Similar structure, but context is provided through headers rather than a context input object |
attributeMetadata | Live Search — returns filterable and sortable attributes | Same name and purpose; independent implementation |
refineProduct | Catalog Service — narrow complex product options by selection | Equivalent query available |
variants | Catalog Service — return all variant combinations | Equivalent query available |
categories | Catalog Service — return category hierarchy | Commerce Optimizer uses categoryTree with family and slugs arguments |
recommendations | Product Recommendations — returns units by recommendation type | Commerce Optimizer uses recommendationsByUnitIds, which requires pre-configured unit IDs |
(none) | Not available in Merchant Services | navigation — returns category-based navigation structure |
When to use Commerce Optimizer instead
Use the Commerce Optimizer Merchandising GraphQL API instead of Merchant Services queries when:
- You are building on Adobe Commerce Optimizer as a standalone SaaS platform rather than on an Adobe Commerce (PaaS/SaaS) instance.
- Your storefront needs to serve multiple catalog views or channel-specific product catalogs controlled by Commerce Optimizer policies.
- You are migrating off a traditional Commerce installation and Commerce Optimizer is the designated catalog backend.
If you are running Adobe Commerce (PaaS or SaaS) with the Merchant Services extensions installed, use the Merchant Services queries described in this section. The two API surfaces are not interchangeable—switching endpoints without also migrating your catalog data and context configuration will result in errors.
Combining schemas with API Mesh
Because Merchant Services and Commerce Optimizer both use separate endpoints from the core Commerce GraphQL endpoint, a storefront often needs to make requests to multiple endpoints. You can use API Mesh for Adobe Developer App Builder to unify multiple GraphQL schemas—including the core Commerce schema, Catalog Service, Live Search, and third-party APIs—into a single endpoint. API Mesh also handles the context headers for each upstream service automatically, simplifying storefront development.
