1. Call it before payment

POST https://tetheredtrust.com/v1/checkout/check (MCP tool check_cart_before_checkout). Accepts a UCP checkout, an ACP CheckoutSession, or plain line_items. Free during early access; /v1/paid/checkout charges $0.25 per completed decision and nothing for insufficient_evidence.

{
  "checkout": {
    "ucp": {
      "version": "2026-08-25"
    },
    "id": "chk_123",
    "line_items": [
      {
        "id": "li_1",
        "item": {
          "id": "sku_vlt7",
          "title": "Sanus VLT7 tilting TV mount",
          "price": 12999
        },
        "quantity": 1
      },
      {
        "id": "li_2",
        "item": {
          "id": "sku_hdmi",
          "title": "Ultra High Speed HDMI cable 2 m",
          "price": 1999
        },
        "quantity": 1
      }
    ]
  },
  "owned": [
    "TCL 65QM8K"
  ]
}

ACP line items carry only ids, so add a products map from your feed:

{
  "checkout": {
    "id": "cs_123",
    "line_items": [
      {
        "id": "li_1",
        "item": {
          "id": "sku_vlt7",
          "quantity": 1
        }
      }
    ]
  },
  "products": {
    "sku_vlt7": {
      "title": "Sanus VLT7 tilting TV mount"
    }
  },
  "owned": [
    "TCL 65QM8K"
  ]
}

2. Act on action

decisionactionWhat the agent does
supportedproceedComplete the checkout.
conditionalresolve_conditionsAdd the named adapter or hub (required_accessories) or confirm the verify items with the customer, then check again.
incompatibledo_not_checkoutRemove or replace the item (see substitutions) and check again.
insufficient_evidenceask_customerAsk the returned questions. Never complete the checkout on a guess.

The whole cart takes its worst line: one incompatible item makes the checkout do_not_checkout.

3. Attach the result to the checkout

The response's extension object is ready to place at the checkout's top level, so the merchant, a payment handler or a later dispute can see what was checked:

{
  "com.tetheredtrust.shopping.compatibility": {
    "version": "2026-10-14",
    "decision": "supported",
    "safe_to_checkout": true,
    "checked_at": "2026-10-14T15:02:11Z",
    "line_items": [
      {
        "line_item_id": "li_1",
        "decision": "supported"
      },
      {
        "line_item_id": "li_2",
        "decision": "supported"
      }
    ],
    "receipt_id": "rcpt_...",
    "valid_until": "2026-11-13T15:02:11Z",
    "verify_url": "https://tetheredtrust.com/v1/receipts/verify",
    "spec": "https://tetheredtrust.com/ucp"
  }
}

Machine-readable definition: /ucp/com.tetheredtrust.shopping.compatibility.json (JSON Schema 2020-12).

4. For merchants: declare it

A business that wants agents to run the check can list the extension among its UCP capabilities:

{
  "capabilities": {
    "com.tetheredtrust.shopping.compatibility": [
      {
        "version": "2026-10-14",
        "spec": "https://tetheredtrust.com/ucp",
        "schema": "https://tetheredtrust.com/ucp/com.tetheredtrust.shopping.compatibility.json",
        "extends": "dev.ucp.shopping.checkout"
      }
    ]
  }
}

Agents that don't know the extension ignore it, as UCP intends for unknown capabilities.

Rules the decision follows

  • We never return "works" to help a purchase complete. Unknown or unsupported items return insufficient_evidence.
  • Products read by AI from a manufacturer's page are unreviewed: a "works" on them comes back conditional with a verify condition.
  • A receipt proves what we said and when (EdDSA JWS, public keys); it isn't a guarantee. See Trust.