addedInput schema / properties / market
Added value: +{
+ "description": "Market key, e.g. san-antonio-tx. Used when no zip is given.",
+ "type": "string"
+}
removedInput schema / properties / postal_code
Removed value: -{
- "description": "Optional echoed caller context only; never filters facts.",
- "pattern": "^[0-9]{5}(?:-[0-9]{4})?$",
- "type": "string"
-}
removedInput schema / properties / product_id / maxLength
Removed value: -128
changedInput schema / properties / zip / description
Previous value: -"Optional echoed caller context only; never filters facts."New value: +"5-digit US ZIP code, for local prices and distances."
removedInput schema / properties / zip / pattern
Removed value: -"^[0-9]{5}(?:-[0-9]{4})?$"
removedOutput schema / additionalProperties
Removed value: -false
removedOutput schema / properties / catalog_authority
Removed value: -{
- "additionalProperties": false,
- "properties": {
- "kind": {
- "const": "jenni_catalog_facts",
- "type": "string"
- },
- "policy_hash": {
- "const": "1340ae7f5b87d590b5107d90c6ace904a0b38419101e211f39f5bbaa84e704a1",
- "type": "string"
- },
- "version": {
- "const": "2026-10-16.v1",
- "type": "string"
- }
- },
- "required": [
- "kind",
- "version",
- "policy_hash"
- ],
- "type": "object"
-}
removedOutput schema / properties / contract_version
Removed value: -{
- "const": "catalog_facts_v1",
- "type": "string"
-}
removedOutput schema / properties / exhausted
Removed value: -{
- "type": "boolean"
-}
removedOutput schema / properties / items
Removed value: -{
- "items": {
- "additionalProperties": false,
- "properties": {
- "brand": {
- "type": [
- "string",
- "null"
- ]
- },
- "category": {
- "additionalProperties": false,
- "properties": {
- "id": {
- "type": [
- "string",
- "null"
- ]
- },
- "name": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "required": [
- "id",
- "name"
- ],
- "type": "object"
- },
- "checkout_eligible": {
- "const": false,
- "type": "boolean"
- },
- "gtin": {
- "type": [
- "string",
- "null"
- ]
- },
- "id": {
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
- "type": "string"
- },
- "images": {
- "items": {
- "type": "string"
- },
- "maxItems": 0,
- "type": "array"
- },
- "offers": {
- "items": {
- "type": "string"
- },
- "maxItems": 0,
- "type": "array"
- },
- "stock_state": {
- "const": "unknown",
- "type": "string"
- },
- "title": {
- "type": [
- "string",
- "null"
- ]
- },
- "upc": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "required": [
- "id",
- "title",
- "brand",
- "upc",
- "gtin",
- "category",
- "images",
- "offers",
- "stock_state",
- "checkout_eligible"
- ],
- "type": "object"
- },
- "type": "array"
-}
removedOutput schema / properties / mode
Removed value: -{
- "const": "canonical_discovery",
- "type": "string"
-}
removedOutput schema / properties / next_cursor
Removed value: -{
- "type": [
- "string",
- "null"
- ]
-}
removedOutput schema / properties / offer_policy
Removed value: -{
- "additionalProperties": false,
- "properties": {
- "state": {
- "const": "not_requested",
- "type": "string"
- }
- },
- "required": [
- "state"
- ],
- "type": "object"
-}
addedOutput schema / properties / product
Added value: +{
+ "properties": {
+ "brand": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "category": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "color": {
+ "description": "Colour of the variant product_id names; null when it has none.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "description": {
+ "description": "The merchant's own description (get_product only).",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "image": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "offer_count": {
+ "description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all.",
+ "type": "integer"
+ },
+ "offers": {
+ "items": {
+ "properties": {
+ "availability": {
+ "description": "NULL when we cannot read that shop's shelf, or the last read is over 24 hours old (shelf_observed_at says when). Null is not 'out of stock' — it means unknown, and must not be presented as either availability state.",
+ "enum": [
+ "in_stock",
+ "out_of_stock",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "city": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "distance_miles": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "fulfillment": {
+ "description": "`local_delivery`: delivered from the shop. `concierge`: a person goes to the shop and buys it on the buyer's behalf. start_checkout returns a hosted request link, even when is_eligible_checkout is false; the page determines whether a request can proceed. The link is not a stock reservation, durable quote or completed purchase. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront.",
+ "enum": [
+ "pickup",
+ "local_delivery",
+ "ship_to_home",
+ "concierge",
+ "in_store_only"
+ ],
+ "type": "string"
+ },
+ "is_eligible_checkout": {
+ "description": "True when the storefront offers this exact offer for order: ordering on, a checkout price quote, a shelf in stock, a courier or shipping, and a stated delivery fee. Local delivery is also refused when the shop's own hours show no opening within the week; a search result may not carry hours, and start_checkout re-checks with them. False forbids direct checkout. An explicitly `concierge` offer may still use start_checkout for a hosted request handoff; the product page checks whether a request is available. Neither eligibility nor a handoff reserves stock, creates a quote or places an order.",
+ "type": "boolean"
+ },
+ "is_eligible_search": {
+ "type": "boolean"
+ },
+ "note": {
+ "description": "The disclosure a shopper sees for this shop; relay it.",
+ "type": "string"
+ },
+ "price": {
+ "description": "USD, e.g. \"$12.50\". Null when we hold no current price.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "product_id": {
+ "description": "The exact variant this shop holds.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "shelf_observed_at": {
+ "description": "When the shelf was last read. Null means never.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "shelf_price": {
+ "description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "store_id": {
+ "type": "string"
+ },
+ "store_name": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Storefront page for this exact offer.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "store_id",
+ "is_eligible_search",
+ "is_eligible_checkout",
+ "fulfillment",
+ "availability"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "price": {
+ "description": "Headline price in USD; null when none is held.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "product_id": {
+ "type": "string"
+ },
+ "shelf_price": {
+ "description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "size": {
+ "description": "Size of the variant product_id names; null when it has none.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "variants": {
+ "description": "Buyable size/colour variants. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all.",
+ "items": {
+ "properties": {
+ "color": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "product_id": {
+ "type": "string"
+ },
+ "size": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "url": {
+ "description": "Storefront page opened on this variant.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "product_id"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "product_id",
+ "title",
+ "offers"
+ ],
+ "type": "object"
+}
removedOutput schema / properties / requested_context
Removed value: -{
- "additionalProperties": false,
- "properties": {
- "postal_code": {
- "pattern": "^[0-9]{5}(?:-[0-9]{4})?$",
- "type": [
- "string",
- "null"
- ]
- }
- },
- "required": [
- "postal_code"
- ],
- "type": "object"
-}
removedOutput schema / properties / snapshot_semantics
Removed value: -{
- "const": "live_keyset",
- "type": "string"
-}
removedOutput schema / properties / source_observed_at
Removed value: -{
- "format": "date-time",
- "type": "string"
-}
changedOutput schema / required
Previous value: -[
- "mode",
- "contract_version",
- "items",
- "next_cursor",
- "exhausted",
- "catalog_authority",
- "offer_policy",
- "requested_context",
- "source_observed_at",
- "snapshot_semantics"
-]New value: +[
+ "product"
+]