{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/answerline-dev/json-schema/answerline-dev-chat-gptmonitor-response-schema.json",
  "title": "ChatGPTMonitorResponse",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/answerline-dev-openapi.json#/components/schemas/ChatGPTMonitorResponse",
  "required": [
    "success",
    "result"
  ],
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "result": {
      "description": "Data from ChatGPT's reply",
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "description": "Text of ChatGPT's reply"
        },
        "sources": {
          "type": "array",
          "description": "Sources the response cites; an empty array if there are none.",
          "items": {
            "type": "object",
            "properties": {
              "position": {
                "type": "number",
                "description": "Where the source sits in the response, as an index"
              },
              "url": {
                "type": "string",
                "description": "Link to the source"
              },
              "label": {
                "type": "string",
                "description": "Title of the source article"
              },
              "description": {
                "type": "string",
                "description": "Excerpt or short summary taken from the source"
              },
              "footnote": {
                "type": "boolean",
                "description": "True if the source is shown as a footnote, i.e. in a later list inside the sources modal"
              },
              "datePublished": {
                "type": "string",
                "description": "Date the source was published. If the source has no such date, the field is left out entirely rather than set to `null`."
              }
            }
          }
        },
        "html": {
          "type": "string",
          "format": "uri",
          "description": "Present when include.html is true: the link to the stored copy of the ChatGPT page."
        },
        "markdown": {
          "type": "string",
          "description": "ChatGPT's reply as Markdown; returned only if include.markdown is true"
        },
        "rawResponse": {
          "type": "array",
          "description": "The answer as normalized stream events (present when include.rawResponse is true). For the engine's answer as received, use include.rawWire.",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "Identifier of the event's type"
              },
              "token": {
                "type": "string",
                "description": "Token for picking the ChatGPT conversation back up"
              },
              "conversation_id": {
                "type": "string",
                "description": "Identifier of the ChatGPT conversation"
              },
              "message": {
                "type": "object",
                "description": "Payload of the event that describes the assistant's message",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "role": {
                    "type": "string"
                  },
                  "model": {
                    "type": "string"
                  }
                }
              },
              "delta": {
                "type": "object",
                "description": "Delta payload streamed by ChatGPT",
                "properties": {
                  "content": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "text_delta": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "reason": {
                "type": "string",
                "description": "Reason ChatGPT ended the stream"
              }
            }
          }
        },
        "searchQueries": {
          "type": "array",
          "description": "The fan-out queries ChatGPT issued while producing the response (present when include.searchQueries is true)",
          "items": {
            "type": "string"
          }
        },
        "model": {
          "type": [
            "string",
            "null"
          ],
          "description": "ChatGPT model that produced the answer. Empty when the response came through OpenAI's mobile-web format."
        },
        "shoppingCards": {
          "type": "array",
          "description": "Shopping/product cards parsed from the response. When `include.shopping` is `false` or not set, `result` does not contain this field at all, so treat it as optional instead of relying on an empty array.",
          "items": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "description": "Tags naming the shopping card's categories",
                "items": {
                  "type": "string"
                }
              },
              "products": {
                "type": "array",
                "description": "List of product details",
                "items": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Product name"
                    },
                    "position": {
                      "type": "integer",
                      "description": "Rank starting at 1, counted over every product in every shopping card of the response (one continuous sequence that does not restart for each card)."
                    },
                    "url": {
                      "type": "string",
                      "description": "Product page link carrying ChatGPT attribution"
                    },
                    "price": {
                      "type": "string",
                      "description": "Current price"
                    },
                    "featured_tag": {
                      "type": "string",
                      "description": "Style or category tag for the product"
                    },
                    "merchant": {
                      "type": "string",
                      "description": "Merchant information"
                    },
                    "image_urls": {
                      "type": "array",
                      "description": "URLs of the product's images",
                      "items": {
                        "type": "string"
                      }
                    },
                    "rating": {
                      "type": "number",
                      "description": "Rating of the product, on a 0-5 scale"
                    },
                    "num_reviews": {
                      "type": "integer",
                      "description": "Review count"
                    },
                    "id": {
                      "type": "string",
                      "description": "Identifier unique to the product"
                    },
                    "offers": {
                      "type": "array",
                      "description": "Offers for the product from various merchants",
                      "items": {
                        "type": "object",
                        "properties": {
                          "merchant_name": {
                            "type": "string",
                            "description": "Merchant name"
                          },
                          "product_name": {
                            "type": "string",
                            "description": "Product title as the merchant lists it"
                          },
                          "url": {
                            "type": "string",
                            "description": "Offer link carrying ChatGPT attribution"
                          },
                          "price": {
                            "type": "string",
                            "description": "Offer price"
                          },
                          "details": {
                            "type": "string",
                            "description": "Availability and delivery details"
                          },
                          "available": {
                            "type": "boolean",
                            "description": "Stock/availability status of the offer"
                          },
                          "checkoutable": {
                            "type": "boolean",
                            "description": "True if the offer supports direct checkout"
                          },
                          "price_details": {
                            "type": "object",
                            "description": "Itemized breakdown of the price",
                            "properties": {
                              "base": {
                                "type": "string",
                                "description": "Base price of the product"
                              },
                              "total": {
                                "type": "string",
                                "description": "Overall price with all extra charges added"
                              }
                            }
                          },
                          "tag": {
                            "type": "object",
                            "description": "Promotional tag",
                            "properties": {
                              "text": {
                                "type": "string",
                                "description": "Tag text"
                              }
                            }
                          }
                        }
                      }
                    },
                    "rating_grouped_citation": {
                      "type": "object",
                      "description": "Details about where the rating comes from",
                      "properties": {
                        "title": {
                          "type": "string",
                          "description": "Source title"
                        },
                        "url": {
                          "type": "string",
                          "description": "Source URL"
                        },
                        "supporting_websites": {
                          "type": "array",
                          "description": "Websites cited in support",
                          "items": {
                            "type": "object",
                            "properties": {
                              "title": {
                                "type": "string",
                                "description": "Website title"
                              },
                              "url": {
                                "type": "string",
                                "description": "Website URL"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "inlineProducts": {
          "type": "array",
          "description": "Products shown inline, with their prices and offers. When `include.shopping` is `false` or not set, `result` does not contain this field at all, so treat it as optional instead of relying on an empty array.",
          "items": {
            "$ref": "#/$defs/InlineProduct"
          }
        },
        "entities": {
          "type": "array",
          "description": "Entities parsed from the response (if any). With include.shopping, an entity ChatGPT links to a product also carries `product`.",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "Identifier of the entity's type"
              },
              "name": {
                "type": "string",
                "description": "Entity name"
              },
              "product": {
                "$ref": "#/$defs/ShoppingProduct",
                "description": "The product ChatGPT links this entity to: its price, url and merchant offers, as an inline product carries them. Present with `include.shopping` when the entity is a product ChatGPT shows a listing for; absent otherwise."
              }
            },
            "required": [
              "type",
              "name"
            ]
          }
        },
        "map": {
          "type": "array",
          "description": "Map entries for businesses or places parsed from the response (if any). Entries originate from the enrichment providers ChatGPT uses (Yelp, Google Business), with field names in camelCase. Only the fields filled in most often appear here; see the [API reference](/docs/reference) for every field.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Identifier of the business (a Yelp ID or a Google Place ID)"
              },
              "provider": {
                "type": "string",
                "description": "Source of the data: \"yelp\", \"b1\" or \"b3\" (Google), or \"yelp-feed\""
              },
              "name": {
                "type": "string",
                "description": "Business name"
              },
              "position": {
                "type": "integer",
                "description": "Rank/position in the results (set by the parser)"
              },
              "address": {
                "type": "string",
                "description": "Complete street address"
              },
              "latitude": {
                "type": "number",
                "description": "Latitude from GPS"
              },
              "longitude": {
                "type": "number",
                "description": "Longitude from GPS"
              },
              "categories": {
                "type": "array",
                "description": "Business categories",
                "items": {
                  "type": "string"
                }
              },
              "rating": {
                "type": "number",
                "description": "Rating of the business (scale of 0-5)"
              },
              "reviewCount": {
                "type": "integer",
                "description": "Review count"
              },
              "description": {
                "type": "string",
                "description": "Business description"
              },
              "phone": {
                "type": "string",
                "description": "Phone number for contact"
              },
              "websiteUrl": {
                "type": "string",
                "format": "uri",
                "description": "URL of the business's website"
              }
            }
          }
        },
        "citationPills": {
          "type": "array",
          "description": "Inline citation pills parsed from the response (if any), i.e. citations shown in the body of the text. Every entry represents a single (pill, source) pair; grouping on `citationPillId` rebuilds each pill.",
          "items": {
            "type": "object",
            "required": [
              "label",
              "citationPillId",
              "url",
              "domain",
              "type",
              "position"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "URL the citation points to"
              },
              "label": {
                "type": "string",
                "description": "Title of this individual cited source. Never missing, but can be an empty string if the citation event carries no title — then identify the source by `domain` / `url`."
              },
              "description": {
                "type": "string",
                "description": "Text describing what the citation contains; left out if the citation event has no snippet, as with grouped-webpage cards that show only a title."
              },
              "domain": {
                "type": "string",
                "description": "Domain the cited source belongs to"
              },
              "datePublished": {
                "type": "string",
                "description": "Publication date of the source as an ISO 8601 date string. Left out when the citation event has no publication date."
              },
              "citationPillId": {
                "type": "integer",
                "description": "Zero-based ID common to every entry that comes from one chip; grouping on `citationPillId` rebuilds each pill. **Note:** ChatGPT numbers these from 0 for legacy reasons, whereas every other engine (Google AIO, AI Mode, Copilot, Perplexity, Gemini) numbers `citationPillId` from 1."
              },
              "type": {
                "type": "string",
                "enum": [
                  "searchResult",
                  "groupedWebpage"
                ],
                "description": "Indicates which kind of citation event this came from: `searchResult` means an inline search citation, `groupedWebpage` a grouped-webpage card."
              },
              "position": {
                "type": "integer",
                "description": "Index of this source within the sibling `result.sources` array, starting at 1."
              }
            }
          }
        },
        "ads": {
          "type": "array",
          "description": "Ads delivered with the ChatGPT response (present when include.ads is true). Several candidate ads are sent by OpenAI, yet the interface displays one at most; check `rendered` to see which ones were really displayed.",
          "items": {
            "type": "object",
            "properties": {
              "brand": {
                "type": "object",
                "description": "Details about the advertiser's brand",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the advertiser's brand"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "URL of the advertiser's brand"
                  },
                  "favicon": {
                    "type": "string",
                    "format": "uri",
                    "description": "Favicon URL of the advertiser's brand"
                  }
                },
                "required": [
                  "name",
                  "url"
                ]
              },
              "cards": {
                "type": "array",
                "description": "Carousel cards contained in the ad",
                "items": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Card title"
                    },
                    "body": {
                      "type": "string",
                      "description": "Text describing the card"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL the card links to"
                    },
                    "image": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the card's image"
                    }
                  },
                  "required": [
                    "title",
                    "body",
                    "url"
                  ]
                }
              },
              "visibility": {
                "type": "string",
                "description": "Whether OpenAI served the ad. `allowed`: the ad qualified to be shown; `hidden`: OpenAI suppressed it (an integrity check, for instance)."
              },
              "adsResponseIndex": {
                "type": "integer",
                "description": "Position of the ad's slot in the ad response OpenAI served. It reflects the order ads were served in, not what was displayed; use `rendered` for real exposure."
              },
              "rendered": {
                "type": "boolean",
                "description": "Indicates if the ad was rendered on screen as a card within the response. ChatGPT returns multiple candidate ads, yet the UI displays one at most; an ad with `rendered: false` was delivered but never shown."
              }
            },
            "required": [
              "brand",
              "cards",
              "visibility",
              "adsResponseIndex",
              "rendered"
            ]
          }
        },
        "images": {
          "type": "array",
          "description": "The pictures ChatGPT shows in its answer, beside the places and things it names, in answer order: medium image, the page each comes from (url), its title and the picture shown (thumbnail). Absent when the answer shows none.",
          "items": {
            "$ref": "#/$defs/MediaItem"
          }
        },
        "screenshot": {
          "type": "string",
          "format": "uri",
          "description": "Present when include.screenshot is true and the answer came from a rendered page: the link to the PNG screenshot of the ChatGPT page once the answer finished."
        }
      }
    }
  },
  "$defs": {
    "ImagePosition": {
      "type": "object",
      "description": "Image offset within a slot, in pixels",
      "properties": {
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        }
      },
      "required": [
        "x",
        "y"
      ]
    },
    "InlineProduct": {
      "type": "object",
      "description": "Product mentioned inline in the response text, with prices and offers",
      "properties": {
        "product": {
          "$ref": "#/$defs/ShoppingProduct"
        },
        "render_as": {
          "type": "string",
          "description": "Way the product is displayed in the response",
          "enum": [
            "inline",
            "hero",
            "block"
          ]
        },
        "details": {
          "type": "object",
          "description": "Product reasoning and reviews loaded from the sidebar API",
          "properties": {
            "rationale": {
              "type": "object",
              "properties": {
                "rationale": {
                  "type": "string",
                  "description": "Explanation the AI gave for suggesting this product"
                },
                "citations": {
                  "type": "array",
                  "description": "Sources cited in support of the rationale",
                  "items": {
                    "type": "object"
                  }
                }
              }
            },
            "reviews": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "description": "Overview of what product reviews say"
                },
                "reviews": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/ProductReview"
                  }
                }
              }
            }
          }
        }
      }
    },
    "MediaItem": {
      "type": "object",
      "description": "A video or image that appears in the response",
      "properties": {
        "title": {
          "type": "string",
          "description": "Media title"
        },
        "url": {
          "type": "string",
          "description": "Media URL"
        },
        "thumbnail": {
          "type": "string",
          "description": "Thumbnail URL"
        },
        "medium": {
          "type": "string",
          "description": "Media type",
          "enum": [
            "video",
            "image",
            "map"
          ]
        },
        "source": {
          "type": "string",
          "description": "Source platform"
        },
        "image_width": {
          "type": "number",
          "description": "Width of the original image"
        },
        "image_height": {
          "type": "number",
          "description": "Height of the original image"
        },
        "thumbnail_width": {
          "type": "number",
          "description": "Thumbnail width"
        },
        "thumbnail_height": {
          "type": "number",
          "description": "Thumbnail height"
        }
      }
    },
    "OfferTag": {
      "type": [
        "object",
        "null"
      ],
      "description": "Promotion label attached to an offer",
      "properties": {
        "text": {
          "type": "string",
          "description": "Tag text"
        },
        "tooltip": {
          "type": "string",
          "description": "Text of the tag's tooltip"
        }
      }
    },
    "PriceDetails": {
      "type": "object",
      "description": "Itemized breakdown of an offer's price",
      "properties": {
        "display_price": {
          "type": [
            "string",
            "null"
          ],
          "description": "Price formatted for display"
        },
        "base": {
          "type": "string",
          "description": "Base price of the product"
        },
        "shipping": {
          "type": [
            "string",
            "null"
          ],
          "description": "Shipping cost"
        },
        "tax": {
          "type": [
            "string",
            "null"
          ],
          "description": "Tax amount"
        },
        "total": {
          "type": "string",
          "description": "Total price"
        }
      }
    },
    "ProductReview": {
      "type": "object",
      "description": "A single product review taken from the sources",
      "properties": {
        "source": {
          "type": "string",
          "description": "Review source"
        },
        "theme": {
          "type": "string",
          "description": "Aspect or theme the review covers"
        },
        "summary": {
          "type": "string",
          "description": "Text summarizing the reviews"
        },
        "sentiment": {
          "type": "string",
          "description": "Review sentiment",
          "enum": [
            "positive",
            "neutral",
            "negative"
          ]
        },
        "cite": {
          "type": [
            "string",
            "null"
          ],
          "description": "Citation reference"
        },
        "rating": {
          "type": [
            "number",
            "null"
          ],
          "description": "Source rating"
        },
        "num_reviews": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Review count reported by the source"
        },
        "cite_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "Citation URL"
        }
      }
    },
    "RatingGroupedCitation": {
      "type": "object",
      "description": "Details about where the rating comes from, including supporting websites",
      "properties": {
        "title": {
          "type": "string",
          "description": "Source title"
        },
        "url": {
          "type": "string",
          "description": "Source URL"
        },
        "supporting_websites": {
          "type": "array",
          "description": "Websites cited in support",
          "items": {
            "type": "object"
          }
        }
      }
    },
    "ShoppingOffer": {
      "type": "object",
      "description": "Offer from one specific merchant, with price details",
      "properties": {
        "merchant_name": {
          "type": "string",
          "description": "Merchant name"
        },
        "merchant_subtitle": {
          "type": [
            "string",
            "null"
          ],
          "description": "Subtitle or extra details for the merchant"
        },
        "product_name": {
          "type": "string",
          "description": "Product title as the merchant lists it"
        },
        "url": {
          "type": "string",
          "description": "Offer link carrying attribution"
        },
        "price": {
          "type": "string",
          "description": "Offer price"
        },
        "details": {
          "type": "string",
          "description": "Availability and delivery details"
        },
        "original_price": {
          "type": [
            "string",
            "null"
          ],
          "description": "Pre-discount price"
        },
        "available": {
          "type": "boolean",
          "description": "Product availability flag"
        },
        "checkoutable": {
          "type": "boolean",
          "description": "True if the product supports direct checkout"
        },
        "is_digital": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "True for digital goods"
        },
        "checkout_payload": {
          "type": [
            "string",
            "null"
          ],
          "description": "Data carried in the checkout payload"
        },
        "checkout_image_urls": {
          "type": [
            "array",
            "null"
          ],
          "description": "URLs of images shown at checkout",
          "items": {
            "type": "string"
          }
        },
        "shop_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Shop identifier"
        },
        "provider": {
          "type": "string",
          "description": "Identifier of the engine's source for this product"
        },
        "price_details": {
          "$ref": "#/$defs/PriceDetails"
        },
        "tag": {
          "$ref": "#/$defs/OfferTag"
        }
      }
    },
    "ShoppingProduct": {
      "type": "object",
      "description": "Details for a single product",
      "properties": {
        "title": {
          "type": "string",
          "description": "Product name"
        },
        "position": {
          "type": "integer",
          "description": "Rank starting at 1, counted over every product in every shopping card of the response (one continuous sequence that does not restart for each card)."
        },
        "url": {
          "type": "string",
          "description": "URL of the product page"
        },
        "description": {
          "type": "string",
          "description": "Product description"
        },
        "price": {
          "type": "string",
          "description": "Current price"
        },
        "featured_tag": {
          "type": "string",
          "description": "Style or category tag for the product"
        },
        "rating": {
          "type": "number",
          "description": "Rating of the product (0-5)"
        },
        "num_reviews": {
          "type": "integer",
          "description": "Review count"
        },
        "image_urls": {
          "type": "array",
          "description": "URLs of the product images",
          "items": {
            "type": "string"
          }
        },
        "id": {
          "type": "string",
          "description": "Product identifier"
        },
        "variants": {
          "description": "Variants of the product (e.g. size or color)"
        },
        "offers": {
          "type": "array",
          "description": "Offers from several merchants, each with price details",
          "items": {
            "$ref": "#/$defs/ShoppingOffer"
          }
        },
        "rating_grouped_citation": {
          "$ref": "#/$defs/RatingGroupedCitation"
        },
        "provider": {
          "type": "string",
          "description": "Identifier of the engine's source for this product"
        },
        "providers": {
          "type": "array",
          "description": "The engine's sources for this product",
          "items": {
            "type": "string"
          }
        },
        "product_lookup_key": {
          "type": "object",
          "description": "Lookup key for fetching product updates",
          "properties": {
            "data": {
              "type": "string",
              "description": "Product lookup data, encoded as JSON"
            }
          }
        },
        "product_lookup_data": {
          "type": "object",
          "description": "Query data for a structured product lookup",
          "properties": {
            "request_query": {
              "type": "string",
              "description": "Query used to search for this product"
            },
            "all_ids": {
              "type": "object",
              "description": "Provider-to-ID mapping",
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "metadata_sources": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "showcase_metadata": {
          "$ref": "#/$defs/ShowcaseMetadata"
        },
        "show_price_disclosure": {
          "type": "boolean",
          "description": "Indicates if a price disclosure should be displayed"
        },
        "analytics_meta": {
          "type": "object",
          "description": "Analytics metadata",
          "properties": {
            "product_event_uuid": {
              "type": "string",
              "description": "Product analytics event UUID"
            }
          }
        },
        "metadata_sources": {
          "type": "array",
          "description": "Where the product metadata comes from",
          "items": {
            "type": "string"
          }
        },
        "product_event_uuid": {
          "type": "string",
          "description": "UUID used to track product events"
        },
        "generatedProductQuery": {
          "type": "string",
          "description": "General shopping query that ChatGPT created for this product (taken from product_lookup_key.data). Shows the search intent that led to the recommendation."
        }
      }
    },
    "ShowcaseBackground": {
      "type": "object",
      "description": "Background style applied to a product showcase",
      "properties": {
        "type": {
          "type": "string"
        },
        "primary": {
          "type": "string"
        },
        "secondary": {
          "type": "string"
        }
      }
    },
    "ShowcaseImage": {
      "type": "object",
      "description": "Main image displayed at the top of a product showcase",
      "properties": {
        "url": {
          "type": "string"
        },
        "width": {
          "type": "number"
        },
        "height": {
          "type": "number"
        }
      },
      "required": [
        "url"
      ]
    },
    "ShowcaseMetadata": {
      "type": "object",
      "description": "Metadata for the visual display of a shopping product: its image, background, and placement in each slot.",
      "properties": {
        "image": {
          "$ref": "#/$defs/ShowcaseImage"
        },
        "background": {
          "$ref": "#/$defs/ShowcaseBackground"
        },
        "slots": {
          "type": "object",
          "description": "Map of slots, keyed by slot ID",
          "additionalProperties": {
            "$ref": "#/$defs/ShowcaseSlot"
          }
        },
        "debug": {
          "type": "object",
          "description": "Unstructured debug metadata; clients should not parse it",
          "additionalProperties": true
        }
      }
    },
    "ShowcaseSlot": {
      "type": "object",
      "description": "One visual slot within a product showcase",
      "properties": {
        "fit": {
          "type": "string"
        },
        "position": {
          "$ref": "#/$defs/ImagePosition"
        },
        "zoom": {
          "type": "number"
        },
        "placement": {
          "$ref": "#/$defs/SlotPlacement"
        },
        "imageBlendMode": {
          "type": "string"
        }
      }
    },
    "SlotPlacement": {
      "type": "object",
      "description": "Where a showcase slot sits inside its container, in percentages",
      "properties": {
        "leftPercent": {
          "type": "number"
        },
        "topPercent": {
          "type": "number"
        },
        "widthPercent": {
          "type": "number"
        },
        "heightPercent": {
          "type": "number"
        }
      }
    }
  }
}