Spec version 2026-04-08. This page annotates the official UCP specification overview. Last verified July 2026.

UCP Specification Overview

The Universal Commerce Protocol defines a common language for AI agents, platforms, and businesses to conduct commerce without custom integrations. This page walks through the core concepts in plain English.

Discovery, Governance, and Negotiation

UCP separates protocol version compatibility from capability negotiation. This is a key design decision:

The merchant publishes its profile at /.well-known/ucp. This profile describes capabilities for the protocol version it declares. If the merchant supports multiple versions, it can advertise them via the supported_versions field - a map from protocol version to profile URI.

Server-Selects Architecture

The business (server) determines the active capabilities. Not the agent. The agent declares what it can do, the merchant intersects that with what it supports, and the merchant selects the final set. This keeps the merchant in control.

Both business and platform profiles can be cached by both parties, enabling efficient capability negotiation within the normal request/response flow.

Namespace Governance

UCP uses reverse-domain naming to encode governance authority directly into capability identifiers. This eliminates the need for a central registry.

Naming Convention

All capability and service names follow this format:

{reverse-domain}.{service}.{capability}
NameAuthorityServiceCapability
dev.ucp.shopping.checkoutucp.devshoppingcheckout
dev.ucp.shopping.fulfillmentucp.devshoppingfulfillment
dev.ucp.common.identity_linkingucp.devcommonidentity_linking
com.example.payments.installmentsexample.compaymentsinstallments
Spec URL Binding

The spec and schema URLs must match the namespace authority. dev.ucp.* capabilities must point to https://ucp.dev/.... com.example.* must point to https://example.com/.... Platforms MUST validate this binding and SHOULD reject mismatches.

Governance Model

Namespace PatternAuthorityGovernance
dev.ucp.*ucp.devUCP governing body
com.{vendor}.*{vendor}.comVendor organization
org.{org}.*{org}.orgOrganization

Services

A service defines the API surface for a vertical. Current services: shopping, common. Coming soon: lodging, food.

Services include operations, events, and transport bindings defined via standard formats:

Service Definition Fields

FieldRequiredDescription
versionYesEntity version in YYYY-MM-DD format
specYesURL to human-readable specification
schemaNo*URL to JSON Schema (required for REST, MCP, embedded)
idNoUnique identifier when multiple instances exist
configNoEntity-specific configuration
transportYesOne of: rest, mcp, a2a, embedded
endpointNoBase URL for API calls

Endpoint Resolution

The endpoint field provides the base URL. OpenAPI paths are appended directly to form complete URLs:

// Service declares:
"endpoint": "https://business.example.com/api/v2"

// OpenAPI path: /checkout-sessions
// Resolved URL:
POST https://business.example.com/api/v2/checkout-sessions

Capabilities

A capability is a feature within a service. It declares what functionality is supported and where to find its documentation and schemas.

Capability Definition Fields

FieldRequiredDescription
versionYesYYYY-MM-DD format
specYesURL to human-readable spec
schemaYesURL to JSON Schema
idNoUnique identifier for this instance
configNoCapability-specific configuration
extendsNoParent capability(s) - present for extensions only

Extensions

An extension is an optional module that augments another capability. Extensions use the extends field to declare their parent(s).

{
  "dev.ucp.shopping.fulfillment": [
    {
      "version": "2026-04-08",
      "spec": "https://ucp.dev/2026-04-08/specification/fulfillment",
      "schema": "https://ucp.dev/2026-04-08/schemas/shopping/fulfillment.json",
      "extends": "dev.ucp.shopping.checkout"
    }
  ]
}

Multi-Parent Extensions

Extensions can extend multiple parents by using an array:

{
  "dev.ucp.shopping.discount": [
    {
      "version": "2026-04-08",
      "spec": "https://ucp.dev/2026-04-08/specification/discount",
      "schema": "https://ucp.dev/2026-04-08/schemas/shopping/discount.json",
      "extends": ["dev.ucp.shopping.checkout", "dev.ucp.shopping.cart"]
    }
  ]
}

When an extension has multiple parents, it MAY define different fields for each capability (e.g. loyalty_earned for checkout, loyalty_preview for cart).

Schema Composition

Extensions use allOf composition. Each extension schema MUST have a $defs entry for each parent, with the key matching the parent's full capability name. This enables deterministic schema resolution.

Profile Structure

The business profile at /.well-known/ucp is the complete discovery document. It contains:

Versioning

UCP uses dated releases in YYYY-MM-DD format. The protocol version is negotiated on every request:

  1. Platform fetches /.well-known/ucp
  2. If the platform's protocol version matches the profile's version, proceed to capability negotiation
  3. If the platform's version is a key in supported_versions, fetch the version-specific profile
  4. Otherwise, the business returns a version_unsupported error
No Draft Versions in Public Discovery

Pre-release implementations MUST NOT be surfaced through public discovery. Businesses MUST NOT advertise a non-date version string (e.g. "draft") in their profile. Pre-release coordination happens outside public discovery.

Independent Component Versioning

Backwards Compatibility

Backwards-Compatible Changes (no new version needed)

Breaking Changes (require new version)

Next: Architecture → Read Official Spec