# UCP manifest (/.well-known/ucp)

> UCP manifest (/.well-known/ucp): Google and Shopify's Universal Commerce Protocol; lets a merchant declare checkout capabilities at transaction time.

- Source: /checks/ucp-manifest
- Site: AgenticWebScore
- Language: English

---
Google and Shopify's Universal Commerce Protocol; lets a merchant declare checkout capabilities at transaction time.

| Property | Value |
| --- | --- |
| Check id | `ucp-manifest` |
| Dimension | Commerce Protocols (15%) |
| Tier | Emerging — pool 5 pts |
| Weight inside tier | 2 |
| Impact | Medium |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | Yes — scored only on commercial sites |
| Publishing skill | `ucp` |
| Standards | — |

## What the scanner requests

- `/.well-known/ucp`
- `/.well-known/ucp.json`

It also reads documents it has already fetched: `$home`.

## What is measured

Conditional: reported n/a unless the scanner has already detected a commercial signal (Product/Offer JSON-LD, add-to-cart or buy-now copy, a cart/checkout link). It requests /.well-known/ucp and then /.well-known/ucp.json, takes the first HTTP 200 and passes when that body parses as JSON with at least two of the top-level keys protocol_version, merchant, capabilities and checkout; valid JSON with fewer than two of those keys is a partial (0.5), and a missing or non-JSON response fails.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN=shop.example.com
curl -sL "https://$DOMAIN/.well-known/ucp" | jq '{protocol_version, merchant, capabilities, checkout}'
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```json
{
  "protocol_version": "1.0",
  "merchant": {
    "id": "shop.example.com",
    "name": "Example Shop",
    "url": "https://shop.example.com",
    "country": "US",
    "currency": "USD"
  },
  "capabilities": {
    "catalog_search": true,
    "product_detail": true,
    "cart": true,
    "checkout": true
  },
  "checkout": {
    "endpoint": "https://shop.example.com/api/ucp/checkout",
    "states": ["Incomplete", "RequiresEscalation", "ReadyForComplete"],
    "payment_handlers": ["ap2", "acp", "x402"]
  },
  "updated_at": "2026-10-08T00:00:00Z"
}
```

> Serve it as application/json at exactly /.well-known/ucp (the .json variant is only a fallback) and keep the four top-level keys — extra fields are ignored, missing ones cap the check at partial.

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `product-schema` — Product/catalog schema | Essential | Critical | — |
| `payment-protocols` — Agent payment standard support (AP2/ACP/x402/UCP) | Recommended | High | — |
| `agent-purchase` — Agent purchase policy | Recommended | High | — |
| `returns` — Return and shipping terms machine-readable | Recommended | Medium | — |
| `agent-analytics` — Agent traffic measurement | Emerging | Low | — |
| `inventory-freshness` — Inventory and price freshness | Recommended | High | — |
| `seller-identity` — Seller identity declared | Recommended | Medium | — |
| `shipping-costs` — Shipping cost and delivery declared | Recommended | High | — |
