{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://ucp.dev/draft/schemas/shopping/types/item.json",
  "title": "Item",
  "type": "object",
  "required": [
    "id",
    "title",
    "price"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The product identifier, often the SKU, required to resolve the product details associated with this line item. Should be recognized by both the Platform, and the Business."
    },
    "title": {
      "type": "string",
      "description": "Product title.",
      "ucp_request": "omit"
    },
    "price": {
      "$ref": "https://ucp.dev/draft/schemas/common/types/amount.json",
      "description": "Unit price in ISO 4217 minor units. Price is the amount per one whole `quantity_unit.unit` (for example, per lb or per hour); when `quantity_unit` is absent, it is per `each`.",
      "ucp_request": "omit"
    },
    "list_price": {
      "$ref": "https://ucp.dev/draft/schemas/common/types/amount.json",
      "description": "Reference price for comparison display, typically shown as a strikethrough next to `price`, and denominated like `price`. It is not charged and is never part of `totals`; the gap against `price` is a comparison, not a discount. The Business chooses what it is measured against (for example, the price typically charged over a preceding period, or the manufacturer's suggested retail price); what is permitted varies by jurisdiction. On an Order, this is the value captured at Checkout.",
      "ucp_request": "omit"
    },
    "quantity_unit": {
      "$ref": "https://ucp.dev/draft/schemas/common/types/quantity_unit.json",
      "description": "Sale basis this item's `quantity` is denominated in. On an authoritative Business response, absence encodes the default `each` machine identity (`C62`, 0); the Business MUST include this descriptor for every non-`each` response. On Platform requests, omission makes no assertion: the Business interprets `quantity` using the item's authoritative sale basis. If the Platform includes this descriptor, it asserts the unit-descriptor machine identity. The Business MUST compare that machine identity (`unit`, effective `scale`), ignore `display_text` and `increment`, and resolve a mismatch by conversion surfaced as a visible line revision with a warning, or by rejection with a recoverable business outcome; silent reinterpretation is forbidden. An explicit `C62` descriptor at effective scale 0 matches an authoritative basis represented by an absent descriptor.",
      "ucp_request": "optional"
    },
    "unit_price": {
      "$ref": "https://ucp.dev/draft/schemas/shopping/types/unit_price.json",
      "description": "Pricing basis for this item. On an authoritative Business response, the Business MUST include `unit_price` on every line whose pricing basis differs from its sale basis (for example, priced per pound but sold per `each`); presence on a line marks the rate as transactional rather than display-only. When the pricing basis is the sale basis, `item.price` fully denominates the charge and this field MAY be omitted.",
      "ucp_request": "omit"
    },
    "image_url": {
      "type": "string",
      "description": "Product image URI.",
      "format": "uri",
      "ucp_request": "omit"
    }
  }
}