Skip to main content

Universal Commerce Protocol

UCP standardises discovery and checkout so commerce apps interoperate across platforms instead of each pair needing a bespoke integration. A client fetches one well-known document, learns what the merchant supports, and drives a checkout session through a lifecycle that’s identical everywhere.

How it works

  1. Discover β€” GET /.well-known/ucp advertises which capabilities the merchant supports: checkout, fulfillment, discounts, and orders.
  2. Transact β€” a standard checkout session lifecycle: create, get, update, complete, cancel.
  3. Confirm β€” completion emits an order webhook.

Run the handler

The reference implementation is a standalone Rust server.
By default the handler requires a UCP-Agent header on every request and a Request-Signature on POST/PUT. For local testing you can relax both with UCP_REQUIRE_UCP_AGENT=false and UCP_REQUIRE_REQUEST_SIGNATURE=false β€” never in production, since the signature is what authenticates the caller.

Endpoints

Discovery Checkout sessions Orders Credentials and audit Optional OAuth identity linking (when enabled): /.well-known/oauth-authorization-server, /oauth2/authorize, /oauth2/token, /oauth2/revoke. Operations: /metrics (Prometheus), /health, /ready. A gRPC server with JSON payloads, health, and reflection listens on GRPC_HOST:GRPC_PORT (default 0.0.0.0:50051).

Extensions

Enabling the iCommerce backend turns the handler from a protocol endpoint into a working commerce system β€” the session actually reserves inventory and creates an order.

Bindings

Node.js, Python, and Go bindings are available in addition to the Rust crate, which is published on crates.io.

When to use UCP

How it relates to ACP and ICP

ICP subsumes both. UCP is the right choice when you want checkout interoperability without adopting the full intent model.