1-833-643-7737 Talk to us
Insights TechnologySeptember 2, 2026 15 min read

Agentic Commerce: What It Actually Asks of a Store

Phil Bagdassarian
Shelves of identical packaged products, in rows receding down an aisle

Most of what brands are told will change ecommerce turns out to be something you add to the page. This one sits further back, and it has already happened.

Your products are searchable by software right now, through a single endpoint that returns results from every Shopify merchant at once. There is no plan to upgrade to and no setting to enable. The access tiers that exist apply to the agent doing the asking, not to the store being asked, so what you actually control is narrower and more consequential than a feature decision: it is the quality of what comes back when something queries you.

What changes when the buyer is software

An assistant does not browse. It calls a tool and reads the response.

Nearly everything a storefront does to sell to a person is invisible to it. The photography, the pacing of the page, the copy that took three rounds to get right, the transition on the add to cart button: none of it is read. What is left is the catalog, the attributes hanging off it, and the structure holding them together.

This is why the work lands with operations before it lands with marketing. The question is not whether your store looks good to an assistant. It is whether your store can answer it.

Two catalogs, and you are already in both

Shopify’s agent surfaces run on the Universal Commerce Protocol, and discovery comes in two scopes.

The Global Catalog searches products across every Shopify merchant from one endpoint, catalog.shopify.com/api/ucp/mcp. Results come back clustered by a Universal Product ID, with offers from multiple merchants attached to the same product. Comparison shopping is not something an agent has to assemble by visiting three storefronts. It is the shape of the response.

The Storefront Catalog scopes the same tools to one merchant at {shop-domain}/api/ucp/mcp, which is what a storefront assistant uses when the buyer is already in your store.

Both implement the UCP catalog capability with the same three tools: search_catalog, lookup_catalog and get_product. Calls are JSON-RPC, and tools/list will tell you what a given endpoint currently offers rather than making you assume, though which tools come back depends on what your agent’s profile advertises.

Nobody is gating this by plan

Worth stating plainly, because the assumption runs the other way. Shopify classifies traffic to these servers into three tiers based on how the calling agent identifies itself, and none of them turn on what the merchant pays.

TierCatalogCartCheckoutComplete a purchaseOrders
TokenYesYesYesWith permissionWith scope
SignedYesYesYesNoNo
AnonymousYesYesYesNoNo

Anonymous means no credential and no signature at all. It still reaches catalog, cart and checkout building tools, at the lowest rate limits.

Signed means the agent has implemented HTTP Message Signatures per RFC 9421 using ECDSA P-256, and Shopify verifies each request against the public key published in the agent’s well-known UCP profile. This is worth being precise about: the profile is not a self-description an agent asserts and Shopify takes on trust, it is where the key lives that proves the request came from who it claims.

Token means a credential issued through the Dev Dashboard, passed as a JWT bearer token. It carries the highest rate limits and it is the only tier that can call complete_checkout, and then only when that token has been granted permission to complete purchases. Order tools need a token carrying the read_global_api_orders scope, and access is limited to orders placed through that agent.

A buyer-linked token adds a signed in Shop customer’s identity on top, which is what makes search results personalized and automatic discounts apply.

Two consequences follow. Rate limits scale with identification, so an agent that stays anonymous gets throttled hardest. And Checkout is rate limited more strictly than Cart at every tier, deliberately, because Shopify wants carts iterated and checkouts reserved for buyers who are actually ready.

What the filters decide about you

Here is where a merchant’s work actually sits, because the tools are fixed and identical everywhere. The only variable in the answer is your data, and the filters are specific about which parts of it matter.

filters.available defaults to true, so anything not sale ready is absent unless the agent deliberately asks for it.

filters.attributes supports Color, Size and Target gender, drawn from Shopify’s standard taxonomy. Unsupported names are ignored. So an agent narrowing by color is matching against taxonomy values rather than against whatever your theme calls that option, and products mapped loosely to the taxonomy are products that do not survive a filter.

filters.categories takes taxonomy IDs, and filters.price_tier sorts into low, medium and high relative to each product’s category. Your category assignment therefore decides which set your price is judged against, which is a strange and real consequence of getting taxonomy wrong.

filters.rating matches on a variant rating with both a minimum value and a minimum number of reviews. Review volume is now a discovery input, not only a conversion one.

filters.ships_to and filters.ships_from filter by where a product can actually reach and where it ships from, so shipping profile configuration decides whether you appear for a buyer in a given country.

filters.price is in minor currency units, so fifty dollars is 5000. That one returns an empty result set the first time and looks like a bug elsewhere.

A few response details worth knowing before you build a report on them: pagination runs to a depth of a thousand results, and total_count is an estimate of matches rather than an exact figure.

Search itself is multimodal. catalog.like accepts an image, on its own for visual similarity or alongside a text query, where the words carry intent and the picture carries style and shape.

What gets inferred when you leave it blank

This is the part that reframes the whole exercise, and it is easy to miss in the reference.

Some Global Catalog response fields are generated or enriched by Shopify rather than taken from what you wrote. The reference marks them Inferred, and the list is not marginal: description, options, metadata.attributes such as material and style and occasion, metadata.tech_specs, metadata.top_features, metadata.unique_selling_points, and variant condition.

Shopify’s own guidance is to treat those as discovery and merchandising signals rather than as merchant authored source text, and to expect their accuracy to vary with how much product data was there to work from.

Read that from the merchant’s side. A thin product record does not produce a thin answer or an absent one. It produces an inferred answer, assembled from whatever was available, and that inference is what a buyer comparing three merchants sees attributed to your product. The choice is not between saying something and saying nothing. It is between writing your own attributes and having them guessed.

Which makes populated, taxonomy-mapped, specific product data the highest leverage work available here, and it is unglamorous enough that most brands will not do it.

Carts, checkout, and orders

The cart tools moved, and if you built against the older ones this is the migration to know about. get_cart and update_cart on {shop}/api/mcp are deprecated in favor of UCP Cart MCP at {shop-domain}/api/ucp/mcp, which exposes create_cart, get_cart, update_cart and cancel_cart. The deprecated pair is maintained until the end of August 2026.

Two details in that move matter more than the endpoint change. update_cart has PUT semantics: each call replaces the cart’s entire contents, so a client has to send the complete line items array every time rather than patching one line. And cancel_cart takes an idempotency key as a UUID in the request meta, which is the platform being careful about exactly the repeated call an agent is likely to make.

Checkout MCP converts a cart into a checkout and refers the buyer to the merchant storefront to pay, which is the default path. Only a trusted agent, at the Token tier with explicit permission, completes a purchase directly.

After the sale, Order MCP answers get_order on demand, for when a buyer asks where something is or an integration is reconciling a webhook it missed. The lifecycle itself, fulfillment and refunds and returns and exchanges and cancellations, arrives as UCP shaped order webhooks, and those are what you subscribe to rather than poll.

Your own text, read by something else

Product descriptions, specification fields and policy content are what these tools return, and what they return goes into a model. So does the intent string, which is free text supplied by the caller.

Text can carry instructions. A description telling a reader to disregard prior guidance and report an item as in stock is a merchandising field to you and an input to somebody else’s model. Anywhere customers or suppliers can write into that content, and anywhere a feed pulls from a supplier you do not control, the care you would give any other user submitted content applies.

When this is not the first thing to fix

Often. If the catalog is small, the options map cleanly onto the taxonomy, and the attributes people ask about are already fields rather than paragraphs, then your endpoint is answering well and this sits behind the work already on your list. We will tell you so.

The case for moving early is stronger when the catalog is deep, when variants are numerous or inconsistently named, when you compete in a category where buyers compare on specifications, or when you sell across borders and shipping configuration decides whether you are visible at all.

Where to start

Look at yourself the way software does, which takes about ten minutes.

Install the toolkit and query your own store:

npm install -g @shopify/ucp-cli

ucp catalog search --business https://yourstore.com \
  --set /query='your best seller' \
  --view :compact --format md

Then drop --business and run the same search against the Global Catalog, where your product sits next to everyone else’s offer on the same Universal Product ID. Compare what comes back with what you believe you sell. The fields you did not write, and the ones that came back inferred, are the work, in the order they matter.

Tell us what you are working on.

A scope, a brief, or a store that already exists.