Two separate versions
Two version numbers appear in a UCP integration with Prism. They change independently.
A store on UCP 2026-01-23 and a store on UCP 2026-08-25 both advertise the same Prism handler contract
2026-10-07.
Plugin releases
All plugin updates are minor releases. No config key, route, export or response field was removed or renamed.
The default is the latest UCP version, currently 2026-08-25. Fresh installs and upgrades start there. Agents that declare a version in their profile are served that version regardless of the default. Stores that never update the plugin are unaffected.
- WooCommerce, PrestaShop: to stay on an older version, set it under UCP versions in the plugin settings. A version already saved there is kept on update.
- Medusa, Saleor: an omitted version option means the latest version. To pin, set
ucp_version(Medusa) orucpVersion(Saleor) to"2026-04-08".
Discovery
GET /.well-known/ucp returns the profile in the store’s current version. It lists every other enabled version under ucp.supported_versions, each pointing to a leaf profile:
GET /.well-known/ucp/{version} returns the profile for one enabled version. A version that is not enabled returns 404 version_unsupported. Leaf profiles never contain supported_versions.
UCP 2026-01-23 has no cart or catalog capability. In that version, cart and catalog routes return 404.
Configuration
Every plugin has the same three settings. On Medusa and Saleor the current-version setting already existed and keeps its name. On WooCommerce and PrestaShop all three settings are new in 0.3.0 and 0.7.0.
Where to set them:
- WooCommerce: WooCommerce > Settings > Advanced > UCP versions.
- PrestaShop: Modules > Finance District UCP > Configure > UCP versions.
- Medusa: options of the
agenticCommercemodule inmedusa-config.ts. - Saleor:
createAgenticCommerce({ ucpVersion, ucpSupportedVersions, ucpVersionNegotiation }). Wire thediscoveryVersionroute atsrc/app/.well-known/ucp/[version]/route.ts. The Next.js integration needs the Node.js runtime.
On Medusa and Saleor, leaving the supported list unset enables every known version other than the current one, so
ucpVersion: "2026-04-08" alone keeps 2026-08-25 and 2026-01-23 available. On WooCommerce and PrestaShop, the settings page saves both values together.- Medusa, Saleor: the store fails at boot.
- WooCommerce, PrestaShop: saving the setting fails. If an unknown value is stored anyway, every UCP route answers
500 configuration_invalidand the admin shows a notice. The rest of the shop keeps running.
How a request gets its version
The agent names its profile in theUCP-Agent header (profile="https://..."). The store fetches that profile and reads ucp.version.
The profile fetch is restricted: HTTPS only, public addresses only, no redirects, 3 second timeout, 64 KiB limit. Results, including failures, are cached for 10 minutes.
The warning is one structured log line with the key
ucp_profile_resolution and the outcome (unreachable, undeclared or unknown).
The 422 version_unsupported message lists what the store serves, for example: Version 2026-07-01 is not supported. This business implements versions 2026-08-25, 2026-04-08, 2026-01-23.
Session pinning
A checkout session (and a cart, where the plugin has one) keeps the version its agent declared when it was created.
A session is pinned only when the agent profile declared a version the store serves. Sessions created on a fallback, and sessions created by an earlier release, are not pinned.
Payment instruments and the Prism handler entry
Upgraded plugins accept both Prism handler entry shapes:- the current entry:
idxyz.fd.prism_payment,version2026-10-07,spec,schema,config,config_schema,instrument_schemasand, except for 2026-01-23,available_instruments; - the original entry:
idx402(orxyz.fd.prism_payment),config_schema,instrument_schemas,config.
id xyz.fd.prism_payment.
Instruments sent by agents written for earlier releases still complete:
handler_id:xyz.fd.prism_payment,x402or missingtype:x402,tokenized,defaultor missingcredential.type:x402or missing
Prism contract selection
The UCP version is part of the path. Prism picks the handler contract from the route, not from the caller.
The versioned handlers route is public and needs no API key.
Payment requirements do not depend on the UCP version.
POST /api/v2/merchant/payment-requirements needs the API key and returns the raw x402 PaymentRequired object. The merchant builds the UCP checkout entry {id, version, config}: id and version come from the handlers declaration for its UCP version, config is that object.
Prism sends the handlers response with:
Handler documents
A versioned URL for a version Prism does not serve returns
404.
Shopware
On Shopware, SwagAgenticCommerce (SAG) serves UCP, and the Prism handler follows the version SAG serves.
Prism handler 0.7.0 requires
shopware/agentic-commerce >=1.0.0 <2.0.0.
Shopware serves one UCP version per SAG release. A store that upgrades SAG from 1.2 to 1.3 moves from 2026-04-08 to 2026-08-25, and agents that only speak 2026-04-08 get 422 version_unsupported from SAG. Stores that stay on SAG 1.2 keep 2026-04-08.