Skip to main content

Product Data and Transports

5.1 Product Data Structure

UCP uses JSON to describe products. All monetary amounts follow ISO 4217 minor currency units:
{
  "product": {
    "id": "prod_abc123",
    "name": "Classic Canvas Sneakers",
    "description": "Comfortable, breathable canvas shoes for everyday wear",
    "brand": "ExampleBrand",
    "category": "Shoes > Sneakers > Canvas",
    "sku": "SHOE-001",
    "gtin": "1234567890123",
    "url": "https://store.example.com/product/shoe-001",
    "images": [
      { "url": "https://store.example.com/images/shoe-1.jpg", "alt": "Front view", "width": 800, "height": 800 },
      { "url": "https://store.example.com/images/shoe-2.jpg", "alt": "Side view", "width": 800, "height": 800 }
    ],
    "price": {
      "amount": 5900,
      "currency_code": "USD"
    },
    "compare_at_price": {
      "amount": 7900,
      "currency_code": "USD"
    },
    "availability": "in_stock",
    "variants": [
      {
        "id": "var_001",
        "attributes": { "size": "8", "color": "White" },
        "sku": "SHOE-001-8-W",
        "price": { "amount": 5900, "currency_code": "USD" },
        "availability": "in_stock"
      },
      {
        "id": "var_002",
        "attributes": { "size": "9", "color": "White" },
        "sku": "SHOE-001-9-W",
        "price": { "amount": 5900, "currency_code": "USD" },
        "availability": "in_stock"
      },
      {
        "id": "var_003",
        "attributes": { "size": "10", "color": "Black" },
        "sku": "SHOE-001-10-B",
        "price": { "amount": 5900, "currency_code": "USD" },
        "availability": "out_of_stock"
      }
    ],
    "shipping": {
      "weight": { "value": 1.8, "unit": "lb" },
      "dimensions": { "length": 13, "width": 8, "height": 5, "unit": "in" },
      "destinations": ["US", "CA", "MX"],
      "free_shipping_threshold": { "amount": 4900, "currency_code": "USD" }
    },
    "return_policy": {
      "returnable": true,
      "return_days": 30,
      "conditions": "Unworn, with tags and original packaging"
    }
  }
}

5.2 Required and Optional Fields

FieldTypeRequiredDescription
idstringYesUnique product identifier
namestringYesProduct name
price.amountintegerYesPrice in ISO 4217 minor currency units
price.currency_codestringYesISO 4217 currency code
availabilitystringYesin_stock / out_of_stock / preorder
imagesarrayYesAt least one product image
descriptionstringNoProduct description
brandstringNoBrand name
categorystringNoProduct category
skustringNoStock Keeping Unit
gtinstringNoGlobal Trade Item Number
variantsarrayNoVariant list (for multi-option products)
compare_at_priceobjectNoOriginal / strikethrough price
urlstringNoProduct page URL

5.3 Variant Management

Products with multiple options (color, size, material, etc.) use the variants array:
  • Each variant has its own id, sku, price, and availability
  • The attributes object defines option attributes as key-value pairs
  • AI agents can present all available options when displaying a product
  • Variants can have different prices (e.g., larger sizes at a premium)

5.4 Four Transport Mechanisms

UCP product data can be delivered to AI agents via four transport mechanisms, each suited to different integration scenarios.

REST Transport (OpenAPI 3.x)

The most traditional server-to-server integration approach. Merchants provide a REST API conforming to the OpenAPI 3.x specification:
GET /ucp/catalog/products?query=running+shoes&category=Athletic&limit=10&offset=0
Accept: application/json
Authorization: Bearer {api_key}
GET /ucp/catalog/products/{product_id}
Accept: application/json
REST transport is ideal for merchants and platforms with existing API infrastructure.

MCP Transport (OpenRPC / JSON-RPC 2.0)

An AI-native transport mechanism. UCP exposes catalog tools via the MCP protocol, defined using OpenRPC schemas. Three standard tools are provided: search_catalog — Search the product catalog
{
  "jsonrpc": "2.0",
  "method": "search_catalog",
  "params": {
    "query": "running shoes",
    "filters": {
      "category": "Athletic",
      "price_min": 3000,
      "price_max": 15000,
      "availability": "in_stock"
    },
    "limit": 10,
    "offset": 0
  },
  "id": 1
}
lookup_catalog — Look up by SKU or GTIN
{
  "jsonrpc": "2.0",
  "method": "lookup_catalog",
  "params": {
    "sku": "SHOE-001",
    "gtin": "1234567890123"
  },
  "id": 2
}
get_product — Get single product details
{
  "jsonrpc": "2.0",
  "method": "get_product",
  "params": {
    "product_id": "prod_abc123"
  },
  "id": 3
}
The key advantage of MCP transport is that AI applications (such as Claude or ChatGPT) can directly use UCP merchants as MCP tools without additional integration code. AI agents understand tool definitions through natural language and autonomously decide when to invoke each tool.

A2A Transport (Agent Card Specification)

Designed for multi-agent collaboration scenarios. Merchants publish an Agent Card that enables other AI agents to discover and connect with them. Agent Cards follow Google’s Agent-to-Agent protocol specification. Applicable scenarios include: a shopping agent invoking a payment agent, a price-comparison agent querying multiple merchant agents simultaneously, and similar patterns.

Embedded Transport (OpenRPC Schema)

A transport mechanism for embedded scenarios that uses only the OpenRPC schema (without the full MCP protocol). Suitable for merchants embedding an AI shopping assistant within their own website.

5.5 Transport Comparison

TransportSchema FormatAuthenticationUse CaseImplementation Complexity
RESTOpenAPI 3.xAPI Key / OAuthServer-to-server, platform integrationLow
MCPOpenRPC (JSON-RPC 2.0)MCP authDirect AI application integrationMedium
A2AAgent Card SpecInter-agent authMulti-agent collaborationMedium
EmbeddedOpenRPC schemaIn-page authEmbedded AI assistantsLow

5.6 Price Format Specification

UCP uses integers to represent prices (ISO 4217 minor currency units), avoiding floating-point precision issues:
Currencycurrency_codeExponentRepresentation of $59.00 or equivalent
US DollarUSD25900
EuroEUR25900
Japanese YenJPY059
Kuwaiti DinarKWD359000
Implementation note: Always look up the decimal places for a currency from the ISO 4217 exponent table. Do not hardcode exponent values.

5.7 Search and Filtering

UCP defines standardized search and filter parameters:
ParameterTypeDescription
querystringFull-text search keyword
categorystringCategory filter
price_minintegerMinimum price (minor currency units)
price_maxintegerMaximum price (minor currency units)
availabilitystringStock status filter
brandstringBrand filter
limitintegerResults per page (recommended max: 50)
offsetintegerOffset for pagination
sortstringSort order (price_asc, price_desc, relevance)

Next chapter: Security and Authentication — RFC 9421 signatures, JWK keys, mTLS, and Content-Digest