UCP now has a standard way to publish return terms that an AI agent can read before it buys. On October 23, 2026, the Universal Commerce Protocol repository merged a return policy extension, dev.ucp.shopping.policy.return. This note reads the merged spec and schema directly. We did not read Shopify’s or any platform’s implementation, so nothing below says who supports it today.
What changed
The extension builds on the policies[] field that UCP added in August. Per the spec, it adds machine-readable return terms across catalog, cart, checkout and order, so an agent can answer “How long do I have to return this?” or “Where and at what cost do I send it back?” without leaving to read a policy page.
The spec’s stated reason: one policy page usually covers standard terms, final-sale items and category exceptions in prose, so a buyer or agent cannot tell which terms govern a given item.
The fields an agent can read
eligibility: awindow(a minimum duration plus an explicit anchor),unlimited, ornot_accepted.- Anchor: when the clock starts. Well-known values are
purchased,fulfilledanddelivered. The spec says there is no default anchor and a platform must not assume one. supported_resolutions: what the buyer gets back. Well-known values per the schema:original_payment_method,store_credit,gift_card,exchange,replacement.methods: return channels:in_store,by_mail,kiosk.fees: typed charges such as restocking, return shipping and handling, each optionally scoped to a channel, as a flat amount or a percentage with a cap.
Details that change how you publish
- A window is a floor, not a ceiling. The spec says it is a guaranteed minimum for otherwise eligible returns, and that its expiry does not make an item non-returnable.
- Final sale is explicit.
not_acceptedis the single signal. An empty list must not be used to mean “no returns”. - Silence is not “free”. Only
amount: 0states that nothing is charged. A platform must not treat an omittedfeesfield as zero cost. - Fees are estimated maximums. A business must not state a fee lower than its policy charges, and a platform must not present the figure as the final charge for a particular return.
- Exceptions need restating. A default policy applies store-wide; an override for one category replaces it and inherits nothing, so every term that still applies must be repeated.
- Omitted means unstated. A platform must not infer that returns are unrestricted, or unavailable, from a missing
eligibility. It falls back to the free-textdescription.
What this does not tell you
The spec says the policy states the business’s own terms and does not describe remedies a buyer has under law. The extension is additive: a platform that has not negotiated it still shows the policy from the base type and description.
FAQ
What is the UCP return policy extension?
It is a UCP policy type, dev.ucp.shopping.policy.return, that structures return terms: eligibility window, anchor, refund resolutions, return channels and fees. It was merged into the UCP repository on October 23, 2026 and extends catalog, cart, checkout and order responses.
Does an agent need my return policy page if I publish these fields?
The spec keeps the free-text description and an optional url alongside the structured fields. A platform that does not recognise a field or value presents the policy from the description, so the page still matters as the fallback.
Why does the anchor matter for a 30-day return window?
Businesses start the clock at purchase, fulfilment or delivery, and the spec requires a window to state which. A platform may not assume one, so “30 days” without an anchor is not a valid structured window.
Sources
- UCP return policy extension commit (#634), 2026-10-23
- Return policy extension specification
- policy_return.json schema
An agent can only buy what it can fully price, and a return window and fee it cannot read is a cost it cannot price: AgentReady audits that transaction, not just discovery.