https://<store> below with the storefront’s host, such as https://<subdomain>.fluid.app or the store’s custom domain.
Discover the store
Each store publishes its profile at/.well-known/ucp. Read it first. It names the versions the store serves, the endpoint for each at /api/ucp/{version}, and the capabilities and payment handlers on offer. The request and response shapes are UCP’s own, in the specification the profile links to.
/.well-known/ucp answers the current version. Each older version that the store still serves has its own path, such as /.well-known/ucp/2026-04-08.
Capabilities
Search for products:
2026-08-25 is the current version at the time of writing.
Ask the store a question
Ask answers a question about the store in plain language, such as “What is your return policy?” or “Is this serum fragrance-free?”. The answer comes only from what the store publishes:- products, collections, categories and enrollment packs;
- blog posts, media and pages;
- the company’s sites;
- the store’s active policies and agreements.
answer.plainis plain text of 120 words or fewer, in the language of the question.linksare the store pages the answer is based on. Each one’stypenames what it points to:product,collection,category,enrollment_pack,post,media,page,site,policyor a policy kind such asrefund_policy, orstorefrontfor the store itself. Show the shopper the link rather than restating the page.- Ground a question in products. Send up to 10
idswith the query: product IDs or slugs, or variant IDs or SKUs. The answer then treats “this” as those products. An ID that names nothing the shopper can see comes back as anot_foundmessage, as catalog lookup reports misses. - When the store hasn’t published an answer, Ask says so and links the store, rather than guessing. It never invents prices, stock, ingredients, health claims or policy terms. For prices and stock, use catalog lookup.
- New content takes up to an hour to appear. The store’s index refreshes in the background after questions arrive.
Limits
Every question costs the merchant a model call, so Ask is rate-limited:
A query can be at most 1,000 characters. A request over a rate limit gets a 429 with a
Retry-After header. Ask’s own errors use UCP’s { "code", "content" } body:
Ask is only on the current version. An older version’s
/ask path answers 404.
Finish the purchase
A UCP cart or checkout session is a real Fluid cart. There are two ways to finish the purchase:- Pay inside the agent with Google Pay. When one of the company’s card accounts in Fluid Payments takes Google Pay through its payment provider, the store’s profile lists the
com.google.paypayment handler, and each checkout session returns the Google Pay configuration for its country. The agent completes the checkout session with the Google Pay token, and reads the order afterwards. - Hand off to hosted checkout. Every cart and checkout session has a
continue_urlthat opens Fluid’s hosted checkout at checkout.fluid.app with that cart. The shopper finishes the purchase there, with agreements, enrollment, subscriptions and card entry included. Use it when the store offers no Google Pay handler, and whenever a checkout session asks for something only the hosted checkout can collect.
What isn’t available through UCP yet
- Payment methods other than Google Pay. Inside the agent, a checkout session completes only with Google Pay, and only on stores whose payment provider takes it. For any other payment method, hand the shopper the
continue_url. - Signed-in buyers. An agent can’t link a shopper’s Fluid account through UCP, so UCP carts don’t carry member pricing, saved addresses or saved payment methods.
/.well-known/ucp profile for what it serves today.