What this MCP does
Searches Greek products, compares merchant offers and delivered costs, evaluates price history, and provides read-only shopping recommendations.
Tools
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 10, 'minimum': 1, 'description': 'Maximum number of current merchant offers to return, from 1 to 10.'}, 'objective': {'enum': ['lowest_total_cost', 'lowest_item_price', 'merchant_rating'], 'type': 'string', 'description': 'How to rank offers. When omitted: lowest_total_cost if postal_code is given, otherwise lowest_item_price. lowest_total_cost includes known shipping and requires postal_code.'}, 'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$', 'description': 'Exact grouped BestPrice product id returned by search_products, in bp_<id> form.'}, 'postal_code': {'type': 'string', 'pattern': '^(?:[1-7][0-9]{4}|8[0-5][0-9]{3})$', 'description': 'Greek delivery postcode (five digits, 10000 to 85999) used to calculate shipping and total cost. Required for lowest_total_cost; optional for lowest_item_price and merchant_rating.'}, 'in_stock_only': {'type': 'boolean', 'default': False, 'description': 'false (default): every buyable offer, whatever its delivery estimate (availability unknown stays marked unknown). true: only offers available now or delivered in 1 to 3 days; slower ones are held back and named in a warning. Leave false unless the shopper explicitly asks for fast delivery: an offer that ships in 4 to 10 days is still available and buyable, and true hides it, which can hide the cheapest price. Out-of-stock offers are never returned.'}, 'minimum_merchant_rating': {'type': 'number', 'default': 0, 'maximum': 5, 'minimum': 0, 'description': 'Optional minimum merchant rating on a 0 to 5 scale.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$defs': {'__schema0': {'type': 'string', 'pattern': '^[1-9][0-9]*\\.[0-9]+$', 'description': 'Result schema version. Currently 2.0; a later <major>.<minor> is returned without a tools/list change.'}, '__schema1': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, '__schema2': {'type': 'string', 'const': 'EUR'}, '__schema3': {'type': 'string', 'const': 'el-GR'}, '__schema4': {'type': 'array', 'items': {'$ref': '#/$defs/__schema5'}, 'maxItems': 20}, '__schema5': {'type': 'string', 'maxLength': 240, 'minLength': 1}, '__schema6': {'type': 'object', 'required': ['product_id', 'title', 'brand', 'model', 'variant', 'decision_id', 'bestprice_url'], 'properties': {'brand': {'anyOf': [{'type': 'string', 'maxLength': 80, 'minLength': 1}, {'type': 'null'}]}, 'model': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'title': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'variant': {'anyOf': [{'type': 'string', 'maxLength': 180, 'minLength': 1}, {'type': 'null'}]}, 'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, 'decision_id': {'type': 'string', 'pattern': '^d1\\.[a-f0-9]{32}\\.[A-Za-z0-9_-]{43}$', 'description': 'Signed, anonymous id joining this recommendation to its BestPrice landing and outbound-click telemetry.'}, 'bestprice_url': {'type': 'string', 'format': 'uri'}}}, '__schema7': {'anyOf': [{'type': 'string', 'pattern': '^(?:[1-7][0-9]{4}|8[0-5][0-9]{3})$'}, {'type': 'null'}]}, '__schema8': {'enum': ['lowest_total_cost', 'lowest_item_price', 'merchant_rating'], 'type': 'string', 'description': 'The ranking actually applied, including the one resolved when the request omitted objective.'}, '__schema9': {'$ref': '#/$defs/__schema11', 'description': 'Catalog lowest listed item price in EUR before shipping. Same identity as search_products.price_from. Not a buyable quote.'}, '__schema10': {'type': 'number', 'maximum': 10000000, 'minimum': 0}, '__schema11': {'anyOf': [{'$ref': '#/$defs/__schema10'}, {'type': 'null'}]}, '__schema12': {'$ref': '#/$defs/__schema11', 'description': 'Lowest item_price among the returned offers after public filters. Use this, not catalog_price_from, as a quoted item price.'}, '__schema13': {'$ref': '#/$defs/__schema11', 'description': 'Lowest delivered total among returned offers with known shipping; null when none are known.'}, '__schema14': {'anyOf': [{'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Why catalog_price_from is absent from the returned page. Null when the catalog min is quoted or the page is cheaper. Known values: promoted, not_in_stock, missing_merchant, filtered, not_on_page, omitted_from_offer_list, no_catalog_price. New values are added without a tools/list change.'}, {'type': 'null'}]}, '__schema15': {'type': 'array', 'items': {'$ref': '#/$defs/__schema16'}, 'maxItems': 10}, '__schema16': {'type': 'object', 'required': ['offer_id', 'merchant_id', 'merchant_name', 'merchant_rating', 'merchant_rating_count', 'verified_merchant', 'offer_title', 'variant', 'item_price', 'shipping_price', 'shipping_status', 'total_price', 'availability', 'condition', 'bundle_status', 'delivery_estimate', 'ranking_reason', 'price_checked_at'], 'properties': {'variant': {'anyOf': [{'type': 'string', 'maxLength': 180, 'minLength': 1}, {'type': 'null'}]}, 'offer_id': {'type': 'string', 'pattern': '^bp_offer_[0-9]+$'}, 'condition': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Item condition; treat an unrecognized value as unknown. Known values: new, refurbished, used, open_box, unknown. New values are added without a tools/list change.'}, 'item_price': {'$ref': '#/$defs/__schema10', 'description': 'Current item price in EUR before shipping.'}, 'merchant_id': {'type': 'string', 'pattern': '^bp_merchant_[0-9]+$'}, 'offer_title': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'total_price': {'$ref': '#/$defs/__schema11', 'description': 'Item price plus published shipping in EUR; null whenever shipping is unknown. Floor delivery, installation, old-appliance removal, payment fees and additional remote-area charges are not verified by this quote.'}, 'availability': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Offer availability; treat an unrecognized value as unknown. Known values: in_stock, delivery_1_3_days, delivery_4_7_days, delivery_4_10_days, delivery_8_14_days, by_order, to_order, preorder, out_of_stock, unknown. New values are added without a tools/list change.'}, 'bundle_status': {'enum': ['single', 'bundle', 'unknown'], 'type': 'string'}, 'merchant_name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Sanitized public BestPrice store name.'}, 'price_anomaly': {'$ref': '#/$defs/__schema19', 'description': 'below_peer_price_range: item price is below 40% of the median of at least two other eligible offers. This listing remains inspectable but requires verification and is excluded from recommendations. Null means this peer-price check did not flag it; it is not a guarantee of price accuracy.'}, 'ranking_reason': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'shipping_price': {'$ref': '#/$defs/__schema11', 'description': 'Known or estimated shipping price in EUR; null means unknown.'}, 'merchant_rating': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0}, {'type': 'null'}]}, 'shipping_status': {'enum': ['known', 'estimated', 'unknown'], 'type': 'string'}, 'price_checked_at': {'$ref': '#/$defs/__schema1', 'description': 'When BestPrice retrieved this quote, not the merchant feed update time or a guarantee that the merchant price has not changed.'}, 'delivery_estimate': {'anyOf': [{'type': 'string', 'maxLength': 80, 'minLength': 1}, {'type': 'null'}]}, 'merchant_logo_url': {'$ref': '#/$defs/__schema17', 'description': 'BestPrice CDN logo of the store; null when the store has none.'}, 'verified_merchant': {'type': 'boolean', 'description': 'True when this is a BestPrice-certified store (Î\xa0ιÏ\x83Ï\x84οÏ\x80οιημÎ\xadνο καÏ\x84άÏ\x83Ï\x84ημα).'}, 'certification_level': {'$ref': '#/$defs/__schema18', 'description': 'BestPrice certification tier of the store (php/classes/Merchant.php verification_level 1..4); null when not certified.'}, 'merchant_rating_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'shipping_unknown_cause': {'$ref': '#/$defs/__schema20', 'description': 'Why shipping is unknown: missing when the store published no usable shipping cost, invalid when it published one this service refuses to trust. Null whenever shipping_status is known or estimated.'}}}, '__schema17': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, '__schema18': {'anyOf': [{'enum': ['bronze', 'silver', 'gold', 'platinum'], 'type': 'string'}, {'type': 'null'}]}, '__schema19': {'anyOf': [{'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Non-null anomaly codes require verification and exclude the listing from recommendations; treat unknown codes conservatively. Known values: below_peer_price_range. New values are added without a tools/list change.'}, {'type': 'null'}]}, '__schema20': {'anyOf': [{'enum': ['missing', 'invalid'], 'type': 'string'}, {'type': 'null'}]}}, 'anyOf': [{'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'product', 'postal_code', 'objective', 'catalog_price_from', 'quoted_lowest_item_price', 'quoted_lowest_total_price', 'catalog_min_unquoted_reason', 'offers'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'locale': {'$ref': '#/$defs/__schema3'}, 'offers': {'$ref': '#/$defs/__schema15'}, 'product': {'$ref': '#/$defs/__schema6'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'objective': {'$ref': '#/$defs/__schema8'}, 'postal_code': {'$ref': '#/$defs/__schema7'}, 'schema_version': {'$ref': '#/$defs/__schema0'}, 'catalog_price_from': {'$ref': '#/$defs/__schema9'}, 'quoted_lowest_item_price': {'$ref': '#/$defs/__schema12'}, 'quoted_lowest_total_price': {'$ref': '#/$defs/__schema13'}, 'catalog_min_unquoted_reason': {'$ref': '#/$defs/__schema14'}}}, {'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'error'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'error': {'type': 'object', 'required': ['code', 'message', 'retryable'], 'properties': {'code': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]{2,63}$'}, 'message': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'retryable': {'type': 'boolean'}}}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'schema_version': {'$ref': '#/$defs/__schema0'}}}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id'], 'properties': {'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$', 'description': 'Exact grouped BestPrice product id returned by search_products, in bp_<id> form.'}, 'period_days': {'enum': [30, 90, 180], 'type': 'number', 'default': 180, 'description': 'Requested history window in days for series and data_gaps. deal_classification and price_delta_vs_180d_median_pct always compare with the 180-day median; window_stats always carries the 30-, 90- and 180-day statistics. Use 180 unless the user asks otherwise.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$defs': {'__schema0': {'type': 'string', 'pattern': '^[1-9][0-9]*\\.[0-9]+$', 'description': 'Result schema version. Currently 2.0; a later <major>.<minor> is returned without a tools/list change.'}, '__schema1': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, '__schema2': {'type': 'string', 'const': 'EUR'}, '__schema3': {'type': 'string', 'const': 'el-GR'}, '__schema4': {'type': 'array', 'items': {'$ref': '#/$defs/__schema5'}, 'maxItems': 20}, '__schema5': {'type': 'string', 'maxLength': 240, 'minLength': 1}, '__schema6': {'anyOf': [{'$ref': '#/$defs/__schema7'}, {'type': 'null'}]}, '__schema7': {'type': 'number', 'maximum': 10000000, 'minimum': 0}, '__schema8': {'type': 'object', 'required': ['days', 'minimum_price', 'median_price', 'observations', 'coverage_pct'], 'properties': {'days': {'anyOf': [{'type': 'number', 'const': 30}, {'type': 'number', 'const': 90}, {'type': 'number', 'const': 180}]}, 'coverage_pct': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'median_price': {'$ref': '#/$defs/__schema6'}, 'observations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'minimum_price': {'$ref': '#/$defs/__schema6'}, 'longest_gap_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, '__schema9': {'type': 'number'}, '__schema10': {'enum': ['record_low', 'excellent_price', 'good_price', 'typical_price', 'above_typical', 'insufficient_data', 'unavailable'], 'type': 'string'}, '__schema11': {'type': 'object', 'required': ['date', 'price', 'merchant_count'], 'properties': {'date': {'type': 'string', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$'}, 'price': {'$ref': '#/$defs/__schema7'}, 'merchant_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}}, 'anyOf': [{'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'product_id', 'product_title', 'decision_id', 'bestprice_url', 'period_days', 'current_price', 'current_price_source', 'source_last_observed_at', 'window_stats', 'price_delta_vs_180d_median_pct', 'deal_classification', 'methodology_id', 'data_gaps', 'series'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'locale': {'$ref': '#/$defs/__schema3'}, 'series': {'type': 'array', 'items': {'$ref': '#/$defs/__schema11'}, 'maxItems': 64}, 'quality': {'type': 'object', 'required': ['cluster_continuity', 'outlier_status'], 'properties': {'outlier_status': {'enum': ['protected', 'unsafe', 'unknown'], 'type': 'string'}, 'cluster_continuity': {'enum': ['same_cluster', 'discontinuous', 'unknown'], 'type': 'string'}}}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'data_gaps': {'type': 'object', 'required': ['missing_days', 'longest_gap_days', 'stale_days', 'coverage_note'], 'properties': {'stale_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'missing_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'coverage_note': {'type': 'string', 'maxLength': 180, 'minLength': 1}, 'longest_gap_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, 'decision_id': {'type': 'string', 'pattern': '^d1\\.[a-f0-9]{32}\\.[A-Za-z0-9_-]{43}$', 'description': 'Signed, anonymous id joining this recommendation to its BestPrice landing and outbound-click telemetry.'}, 'period_days': {'enum': [30, 90, 180], 'type': 'number'}, 'window_stats': {'type': 'array', 'items': {'$ref': '#/$defs/__schema8'}, 'maxItems': 3, 'description': 'Minimum and median statistics for the 30-, 90- and 180-day windows, whatever period_days was requested. The canonical result remains available to the model and card; an empty array supplies no window statistics.'}, 'bestprice_url': {'type': 'string', 'format': 'uri'}, 'current_price': {'$ref': '#/$defs/__schema6'}, 'product_title': {'anyOf': [{'type': 'string', 'maxLength': 220, 'minLength': 1}, {'type': 'null'}]}, 'methodology_id': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*_v[1-9][0-9]*$', 'maxLength': 100, 'description': 'Price-history method. Currently bestprice_daily_min_v1; a revised method is returned as a new <name>_v<N> id without a tools/list change.'}, 'schema_version': {'$ref': '#/$defs/__schema0'}, 'deal_classification': {'anyOf': [{'$ref': '#/$defs/__schema10'}, {'type': 'null'}], 'description': 'Classification against the 180-day window statistics, independent of period_days. insufficient_data and unavailable describe evidence limitations; a compatible null supplies no classification.'}, 'current_price_source': {'enum': ['live_offer_minimum', 'latest_daily_history', 'unavailable'], 'type': 'string'}, 'source_last_observed_at': {'anyOf': [{'$ref': '#/$defs/__schema1'}, {'type': 'null'}]}, 'price_delta_vs_180d_median_pct': {'anyOf': [{'$ref': '#/$defs/__schema9'}, {'type': 'null'}], 'description': 'Current price versus the 180-day median, in percent. Always 180 days, independent of period_days.'}}}, {'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'error'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'error': {'type': 'object', 'required': ['code', 'message', 'retryable'], 'properties': {'code': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]{2,63}$'}, 'message': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'retryable': {'type': 'boolean'}}}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'schema_version': {'$ref': '#/$defs/__schema0'}}}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Input schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'A concise current shopping request with only relevant budget, required specifications and user corrections. No chat transcripts or unrelated personal data. Greek and English are accepted.'}, 'postal_code': {'type': 'string', 'pattern': '^(?:[1-7][0-9]{4}|8[0-5][0-9]{3})$', 'description': 'Optional Greek delivery postcode (five digits, 10000 to 85999) supplied by the user. It is required for basket plans; without it, shipping and delivered totals remain unknown.'}, 'evidence_detail': {'enum': ['summary', 'full'], 'type': 'string', 'default': 'summary', 'description': "Optional evidence depth. 'summary' (default) returns only the claims this result cites by id (typed attributes, price history), the claims they are derived from and the sources they cite, and counts what it omits. 'full' returns every returned-product claim and source, including each offer's field receipts, complete spec sheets and ranking inputs; it is several times larger."}}, 'additionalProperties': False}, {'type': 'object', 'properties': {}, 'additionalProperties': False}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Output schema
{'type': 'object', '$defs': {'__schema0': {'type': 'string', 'pattern': '^[1-9][0-9]*\\.[0-9]+$', 'description': 'Result schema version. Currently 2.0; a later <major>.<minor> is returned without a tools/list change.'}, '__schema1': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, '__schema2': {'type': 'string', 'const': 'EUR'}, '__schema3': {'type': 'string', 'const': 'el-GR'}, '__schema4': {'type': 'array', 'items': {'$ref': '#/$defs/__schema5'}, 'maxItems': 20}, '__schema5': {'type': 'string', 'maxLength': 240, 'minLength': 1}, '__schema6': {'type': 'string', 'maxLength': 200}, '__schema7': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, '__schema8': {'type': 'object', 'required': ['product_id', 'label', 'tradeoff', 'requires_constraint_change', 'offer_summary'], 'properties': {'label': {'type': 'string', 'maxLength': 240}, 'tradeoff': {'anyOf': [{'type': 'string', 'maxLength': 500}, {'type': 'null'}]}, 'product_id': {'$ref': '#/$defs/__schema7'}, 'offer_summary': {'$ref': '#/$defs/__schema9'}, 'requires_constraint_change': {'type': 'boolean'}}}, '__schema9': {'anyOf': [{'type': 'object', 'required': ['postal_code', 'price_basis', 'recommended', 'cheapest', 'same_offer', 'recommendation_reason', 'budget_eur', 'recommended_within_budget', 'cheapest_within_budget', 'compared_offer_count', 'unknown_shipping_count'], 'properties': {'cheapest': {'anyOf': [{'$ref': '#/$defs/__schema11'}, {'type': 'null'}]}, 'budget_eur': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}]}, 'same_offer': {'type': 'boolean'}, 'offer_scope': {'type': 'string', 'const': 'returned_sample'}, 'postal_code': {'anyOf': [{'$ref': '#/$defs/__schema10'}, {'type': 'null'}]}, 'price_basis': {'enum': ['item_price', 'delivered_total'], 'type': 'string'}, 'recommended': {'anyOf': [{'$ref': '#/$defs/__schema11'}, {'type': 'null'}]}, 'affordability': {'enum': ['unknown', 'not_requested', 'over_budget', 'within_delivered_budget', 'within_item_budget_delivery_unknown'], 'type': 'string'}, 'compared_offer_count': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'recommendation_reason': {'anyOf': [{'type': 'string', 'maxLength': 240}, {'type': 'null'}]}, 'cheapest_within_budget': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'unknown_shipping_count': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'recommended_within_budget': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'delivery_affordability_proven': {'type': 'boolean'}}}, {'type': 'null'}]}, '__schema10': {'type': 'string', 'pattern': '^(?:[1-7][0-9]{4}|8[0-5][0-9]{3})$'}, '__schema11': {'type': 'object', 'required': ['offer_id', 'merchant_id', 'merchant_name', 'merchant_rating', 'merchant_rating_count', 'verified_merchant', 'item_price', 'shipping_price', 'shipping_status', 'total_price', 'availability', 'condition', 'bundle_status', 'delivery_estimate', 'price_checked_at'], 'properties': {'offer_id': {'type': 'string', 'pattern': '^bp_offer_[0-9]+$'}, 'condition': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Item condition; treat an unrecognized value as unknown. Known values: new, refurbished, used, open_box, unknown. New values are added without a tools/list change.'}, 'item_price': {'$ref': '#/$defs/__schema19'}, 'merchant_id': {'anyOf': [{'type': 'string', 'pattern': '^bp_merchant_[0-9]+$'}, {'type': 'null'}]}, 'total_price': {'$ref': '#/$defs/__schema26'}, 'availability': {'$ref': '#/$defs/__schema27'}, 'bundle_status': {'enum': ['single', 'bundle', 'unknown'], 'type': 'string'}, 'merchant_name': {'$ref': '#/$defs/__schema12'}, 'price_anomaly': {'$ref': '#/$defs/__schema21', 'description': 'below_peer_price_range: item price is below 40% of the median of at least two other eligible offers. This listing remains inspectable but requires verification and is excluded from recommendations. Null means this peer-price check did not flag it; it is not a guarantee of price accuracy.'}, 'shipping_price': {'$ref': '#/$defs/__schema22'}, 'merchant_rating': {'$ref': '#/$defs/__schema14'}, 'shipping_status': {'$ref': '#/$defs/__schema24'}, 'price_checked_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, {'type': 'null'}]}, 'delivery_estimate': {'$ref': '#/$defs/__schema28'}, 'merchant_logo_url': {'$ref': '#/$defs/__schema13', 'description': 'BestPrice CDN logo of the store; null when the store has none.'}, 'verified_merchant': {'$ref': '#/$defs/__schema16'}, 'certification_level': {'$ref': '#/$defs/__schema17'}, 'merchant_rating_count': {'$ref': '#/$defs/__schema15'}, 'shipping_unknown_cause': {'$ref': '#/$defs/__schema25', 'description': 'Why shipping is unknown: missing when the store published no usable shipping cost, invalid when it published one this service refuses to trust. Null whenever shipping_status is known or estimated.'}}}, '__schema12': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Sanitized public BestPrice store name.'}, '__schema13': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, '__schema14': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0}, {'type': 'null'}]}, '__schema15': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, '__schema16': {'type': 'boolean', 'description': 'True when this is a BestPrice-certified store (Î\xa0ιÏ\x83Ï\x84οÏ\x80οιημÎ\xadνο καÏ\x84άÏ\x83Ï\x84ημα).'}, '__schema17': {'$ref': '#/$defs/__schema18', 'description': 'BestPrice certification tier of the store (php/classes/Merchant.php verification_level 1..4); null when not certified.'}, '__schema18': {'anyOf': [{'enum': ['bronze', 'silver', 'gold', 'platinum'], 'type': 'string'}, {'type': 'null'}]}, '__schema19': {'$ref': '#/$defs/__schema20', 'description': 'Current item price in EUR before shipping.'}, '__schema20': {'type': 'number', 'maximum': 10000000, 'minimum': 0}, '__schema21': {'anyOf': [{'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Non-null anomaly codes require verification and exclude the listing from recommendations; treat unknown codes conservatively. Known values: below_peer_price_range. New values are added without a tools/list change.'}, {'type': 'null'}]}, '__schema22': {'$ref': '#/$defs/__schema23', 'description': 'Known or estimated shipping price in EUR; null means unknown.'}, '__schema23': {'anyOf': [{'$ref': '#/$defs/__schema20'}, {'type': 'null'}]}, '__schema24': {'enum': ['known', 'estimated', 'unknown'], 'type': 'string'}, '__schema25': {'anyOf': [{'enum': ['missing', 'invalid'], 'type': 'string'}, {'type': 'null'}]}, '__schema26': {'$ref': '#/$defs/__schema23', 'description': 'Item price plus published shipping in EUR; null whenever shipping is unknown. Floor delivery, installation, old-appliance removal, payment fees and additional remote-area charges are not verified by this quote.'}, '__schema27': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Offer availability; treat an unrecognized value as unknown. Known values: in_stock, delivery_1_3_days, delivery_4_7_days, delivery_4_10_days, delivery_8_14_days, by_order, to_order, preorder, out_of_stock, unknown. New values are added without a tools/list change.'}, '__schema28': {'anyOf': [{'type': 'string', 'maxLength': 80, 'minLength': 1}, {'type': 'null'}]}, '__schema29': {'type': 'object', 'required': ['product_id', 'title', 'brand', 'category_title', 'price_from', 'decision_id', 'bestprice_url', 'image_url'], 'properties': {'brand': {'$ref': '#/$defs/__schema31'}, 'title': {'$ref': '#/$defs/__schema30'}, 'image_url': {'$ref': '#/$defs/__schema36'}, 'price_from': {'$ref': '#/$defs/__schema33'}, 'product_id': {'$ref': '#/$defs/__schema7'}, 'decision_id': {'$ref': '#/$defs/__schema34'}, 'bestprice_url': {'$ref': '#/$defs/__schema35'}, 'category_title': {'$ref': '#/$defs/__schema32'}}}, '__schema30': {'type': 'string', 'maxLength': 220, 'minLength': 1}, '__schema31': {'anyOf': [{'type': 'string', 'maxLength': 80, 'minLength': 1}, {'type': 'null'}]}, '__schema32': {'anyOf': [{'type': 'string', 'maxLength': 100, 'minLength': 1}, {'type': 'null'}]}, '__schema33': {'$ref': '#/$defs/__schema23', 'description': 'Catalog lowest listed item price in EUR before shipping. Same identity as compare_offers.catalog_price_from. Not a buyable quote; it may be a promoted, out-of-stock, or filtered offer that compare_offers omits. Never subtract this from another product compare_offers item_price.'}, '__schema34': {'type': 'string', 'pattern': '^d1\\.[a-f0-9]{32}\\.[A-Za-z0-9_-]{43}$', 'description': 'Signed, anonymous id joining this recommendation to its BestPrice landing and outbound-click telemetry.'}, '__schema35': {'type': 'string', 'format': 'uri'}, '__schema36': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, '__schema37': {'type': 'string'}, '__schema38': {}, '__schema39': {'type': 'string'}, '__schema40': {'type': 'string'}, '__schema41': {'type': 'object', 'required': ['product_id', 'badges', 'delivered_offer'], 'properties': {'badges': {'type': 'array', 'items': {'$ref': '#/$defs/__schema42'}, 'maxItems': 4}, 'product_id': {'$ref': '#/$defs/__schema7'}, 'delivered_offer': {'anyOf': [{'type': 'object', 'required': ['merchant_name', 'merchant_rating', 'merchant_rating_count', 'verified_merchant', 'item_price', 'shipping_price', 'shipping_status', 'total_price', 'availability', 'delivery_estimate', 'postal_code'], 'properties': {'item_price': {'$ref': '#/$defs/__schema19'}, 'postal_code': {'anyOf': [{'$ref': '#/$defs/__schema10'}, {'type': 'null'}]}, 'total_price': {'$ref': '#/$defs/__schema26'}, 'availability': {'$ref': '#/$defs/__schema27'}, 'merchant_name': {'$ref': '#/$defs/__schema12'}, 'shipping_price': {'$ref': '#/$defs/__schema22'}, 'merchant_rating': {'$ref': '#/$defs/__schema14'}, 'shipping_status': {'$ref': '#/$defs/__schema24'}, 'delivery_estimate': {'$ref': '#/$defs/__schema28'}, 'verified_merchant': {'$ref': '#/$defs/__schema16'}, 'certification_level': {'$ref': '#/$defs/__schema17'}, 'merchant_rating_count': {'$ref': '#/$defs/__schema15'}}}, {'type': 'null'}]}}}, '__schema42': {'type': 'string', 'maxLength': 100}, '__schema43': {'type': 'object', 'required': ['id', 'label', 'group', 'values', 'differs'], 'properties': {'id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'group': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}]}, 'label': {'type': 'string', 'maxLength': 100}, 'values': {'type': 'array', 'items': {'$ref': '#/$defs/__schema44'}, 'maxItems': 4}, 'differs': {'type': 'boolean'}}}, '__schema44': {'type': 'object', 'required': ['product_id', 'value'], 'properties': {'value': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}]}, 'product_id': {'$ref': '#/$defs/__schema7'}}}, '__schema45': {'type': 'object', 'required': ['plan_type', 'merchant_count', 'item_subtotal', 'shipping_total', 'shipping_status', 'total_price', 'reliability_score', 'ranking_reason', 'merchants'], 'properties': {'merchants': {'type': 'array', 'items': {'$ref': '#/$defs/__schema46'}, 'maxItems': 8, 'minItems': 1}, 'plan_type': {'enum': ['cheapest', 'fewer_merchants', 'balanced'], 'type': 'string'}, 'total_price': {'$ref': '#/$defs/__schema23'}, 'item_subtotal': {'$ref': '#/$defs/__schema20'}, 'merchant_count': {'type': 'integer', 'maximum': 8, 'exclusiveMinimum': 0}, 'ranking_reason': {'type': 'string', 'maxLength': 180, 'minLength': 1}, 'shipping_total': {'$ref': '#/$defs/__schema23'}, 'shipping_status': {'enum': ['known', 'estimated', 'unknown', 'mixed'], 'type': 'string'}, 'reliability_score': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0}, {'type': 'null'}]}}}, '__schema46': {'type': 'object', 'required': ['merchant_id', 'merchant_name', 'merchant_rating', 'verified_merchant', 'item_subtotal', 'shipping_price', 'shipping_status', 'total_price', 'reason', 'items'], 'properties': {'items': {'type': 'array', 'items': {'$ref': '#/$defs/__schema48'}, 'maxItems': 20, 'minItems': 1}, 'reason': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'merchant_id': {'type': 'string', 'pattern': '^bp_merchant_[0-9]+$'}, 'total_price': {'$ref': '#/$defs/__schema23'}, 'item_subtotal': {'$ref': '#/$defs/__schema20'}, 'merchant_name': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'shipping_price': {'$ref': '#/$defs/__schema23'}, 'merchant_rating': {'anyOf': [{'type': 'number', 'maximum': 5, 'minimum': 0}, {'type': 'null'}]}, 'shipping_status': {'enum': ['known', 'estimated', 'unknown'], 'type': 'string'}, 'verified_merchant': {'type': 'boolean', 'description': 'True when this is a BestPrice-certified store (Î\xa0ιÏ\x83Ï\x84οÏ\x80οιημÎ\xadνο καÏ\x84άÏ\x83Ï\x84ημα).'}, 'certification_level': {'$ref': '#/$defs/__schema47', 'description': 'BestPrice certification tier of the store (php/classes/Merchant.php verification_level 1..4); null when not certified.'}}}, '__schema47': {'anyOf': [{'enum': ['bronze', 'silver', 'gold', 'platinum'], 'type': 'string'}, {'type': 'null'}]}, '__schema48': {'type': 'object', 'required': ['product_id', 'title', 'quantity', 'unit_price', 'line_total', 'decision_id', 'bestprice_url'], 'properties': {'title': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'quantity': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'line_total': {'$ref': '#/$defs/__schema20'}, 'product_id': {'$ref': '#/$defs/__schema7'}, 'unit_price': {'$ref': '#/$defs/__schema20'}, 'decision_id': {'$ref': '#/$defs/__schema34'}, 'bestprice_url': {'$ref': '#/$defs/__schema35'}}}, '__schema49': {'type': 'object', 'required': ['slot_id', 'family', 'label', 'quantity', 'requirements'], 'properties': {'label': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'family': {'$ref': '#/$defs/__schema50'}, 'slot_id': {'type': 'string', 'pattern': '^slot_[1-9][0-9]?$'}, 'quantity': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'requirements': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}, '__schema50': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Ask product family of the basket slot. Known values: smartwatch, powerbank, air_fryer, air_conditioner, dishwasher, washer, refrigerator, robot_vacuum, wet_dry_vacuum, stick_vacuum, vacuum, headphones, mouse, chair, filter_coffee, espresso, monitor, tv, router, printer, laptop, tablet, phone, accessories, peripherals, washer_dryer, greek_coffee, clothes_dryer, consoles, projector, drone, scanner, egg_boiler, kettle, toaster, bicycle, fan, foldable_phone, tv_remote, blender, mixer, kitchen_machine, microwave, robot_chef, mini_oven, oven, bread_maker, rice_cooker, steamer, grill, teppanyaki, hob, deep_fryer, juicer, waffle, ice_cream_maker, citrus_press, sandwich_maker, crepe_maker, chocolate_fountain, popcorn_maker, donut_maker, sewing_machine, ice_maker, water_cooler, dehumidifier, humidifier, ionizer, fireplace, wood_stove, pellet_stove, air_curtain, fan_heater, water_heater, halogen_stove, convector, gas_stove, oil_stove, outdoor_stove, infrared_panel, speakers, desktop, freezer, software, ereader, games, shoes, books, power_tool, clothing, beauty, baby_transport, unknown. New values are added without a tools/list change.'}, '__schema51': {'type': 'object', 'required': ['slot_id', 'family', 'label', 'quantity', 'product_id', 'catalog_price_eur', 'selection_reason'], 'properties': {'label': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'family': {'$ref': '#/$defs/__schema50'}, 'slot_id': {'type': 'string', 'pattern': '^slot_[1-9][0-9]?$'}, 'quantity': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'product_id': {'$ref': '#/$defs/__schema52'}, 'selection_reason': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'catalog_price_eur': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}]}}}, '__schema52': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, '__schema53': {'type': 'object', 'required': ['slot_id', 'family', 'label', 'quantity', 'reason'], 'properties': {'label': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'family': {'$ref': '#/$defs/__schema50'}, 'reason': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'slot_id': {'type': 'string', 'pattern': '^slot_[1-9][0-9]?$'}, 'quantity': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'candidate_product_id': {'$ref': '#/$defs/__schema52'}}}, '__schema54': {'type': 'object', 'required': ['question', 'reason'], 'properties': {'reason': {'type': 'string', 'maxLength': 100}, 'question': {'type': 'string', 'maxLength': 2000}}}, '__schema55': {'type': 'string'}, '__schema56': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, '__schema57': {'type': 'object', 'required': ['product_id', 'family', 'attributes'], 'properties': {'family': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Catalog attribute family of the product. Known values: laptops, phones, televisions, air_conditioners, air_fryers, espresso_machines, headphones, monitors, mice, refrigerators, vacuums, washing_machines, dishwashers, chairs, tablets, power_banks, smartwatches, printers, routers, desktops, freezers, microwaves, kettles, fans, bicycles, unknown. New values are added without a tools/list change.'}, 'attributes': {'type': 'array', 'items': {'$ref': '#/$defs/__schema58'}, 'maxItems': 12}, 'product_id': {'$ref': '#/$defs/__schema52'}}}, '__schema58': {'type': 'object', 'required': ['key', 'unit', 'status', 'value', 'claim_ids', 'source_ids'], 'properties': {'key': {'type': 'string', 'maxLength': 64}, 'unit': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}, 'value': {'$ref': '#/$defs/__schema59'}, 'status': {'enum': ['known', 'unknown', 'conflicting'], 'type': 'string'}, 'claim_ids': {'type': 'array', 'items': {'$ref': '#/$defs/__schema60'}, 'maxItems': 96}, 'source_ids': {'type': 'array', 'items': {'$ref': '#/$defs/__schema61'}, 'maxItems': 32}}}, '__schema59': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'null'}]}, '__schema60': {'type': 'string', 'maxLength': 160}, '__schema61': {'type': 'string', 'maxLength': 160}, '__schema62': {'type': 'object', 'required': ['product_id', 'offers', 'history', 'not_collected', 'compatibility'], 'properties': {'offers': {'type': 'object', 'required': ['status', 'scope', 'offer_count', 'merchant_count', 'merchant_identity_unknown_count', 'explicitly_in_stock_count', 'shipping', 'item_price', 'known_delivered_price', 'estimated_delivered_price', 'source_ids'], 'properties': {'scope': {'type': 'string', 'const': 'bounded_returned_offers'}, 'status': {'enum': ['available', 'unavailable', 'not_checked', 'stale', 'unverified'], 'type': 'string'}, 'shipping': {'type': 'object', 'required': ['known', 'estimated', 'unknown'], 'properties': {'known': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'unknown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'estimated': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'claim_ids': {'$ref': '#/$defs/__schema64'}, 'item_price': {'$ref': '#/$defs/__schema63'}, 'source_ids': {'$ref': '#/$defs/__schema64'}, 'claim_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'offer_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'source_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'merchant_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'known_delivered_price': {'$ref': '#/$defs/__schema63'}, 'estimated_delivered_price': {'$ref': '#/$defs/__schema63'}, 'explicitly_in_stock_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'merchant_identity_unknown_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'history': {'type': 'object', 'required': ['status', 'basis', 'windows', 'source_ids', 'claim_ids'], 'properties': {'basis': {'type': 'string', 'const': 'daily_item_minimum'}, 'status': {'enum': ['available', 'unavailable', 'not_checked', 'stale', 'unverified'], 'type': 'string'}, 'windows': {'type': 'array', 'items': {'$ref': '#/$defs/__schema65'}, 'maxItems': 3}, 'claim_ids': {'$ref': '#/$defs/__schema64'}, 'source_ids': {'$ref': '#/$defs/__schema64'}}}, 'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, 'compatibility': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Product compatibility assessment. Known values: not_assessed. New values are added without a tools/list change.'}, 'not_collected': {'type': 'array', 'items': {'$ref': '#/$defs/__schema67'}, 'maxItems': 32, 'description': 'Offer facts BestPrice does not collect: currently returns_policy, warranty, payment_fees, pickup, merchant_feed_updated_at, guaranteed_postcode_delivery. The list changes as facts are collected, without a tools/list change.'}}}, '__schema63': {'anyOf': [{'type': 'object', 'required': ['minimum', 'median', 'maximum', 'count'], 'properties': {'count': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'median': {'type': 'number', 'minimum': 0}, 'maximum': {'type': 'number', 'minimum': 0}, 'minimum': {'type': 'number', 'minimum': 0}}}, {'type': 'null'}]}, '__schema64': {'type': 'array', 'items': {'type': 'string', 'maxLength': 160}}, '__schema65': {'type': 'object', 'required': ['days', 'minimum_price', 'median_price', 'observations', 'coverage_pct', 'claim_ids'], 'properties': {'days': {'anyOf': [{'type': 'number', 'const': 30}, {'type': 'number', 'const': 90}, {'type': 'number', 'const': 180}]}, 'claim_ids': {'$ref': '#/$defs/__schema64'}, 'coverage_pct': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'median_price': {'$ref': '#/$defs/__schema66'}, 'observations': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'minimum_price': {'$ref': '#/$defs/__schema66'}}}, '__schema66': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}]}, '__schema67': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100}, '__schema68': {'type': 'string', 'const': 'catalog_search_unranked'}, '__schema69': {'type': 'string', 'maxLength': 400}, '__schema70': {'type': 'string', 'maxLength': 200, 'minLength': 2}, '__schema71': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}]}, '__schema72': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}]}, '__schema73': {'type': 'array', 'items': {'$ref': '#/$defs/__schema74'}, 'maxItems': 4, 'minItems': 1}, '__schema74': {'type': 'object', 'required': ['product_id', 'title', 'brand', 'category_title', 'price_from', 'availability', 'offer_count', 'rating', 'decision_id', 'bestprice_url', 'image_url'], 'properties': {'brand': {'$ref': '#/$defs/__schema31'}, 'title': {'$ref': '#/$defs/__schema30'}, 'rating': {'anyOf': [{'$ref': '#/$defs/__schema75'}, {'type': 'null'}], 'description': 'BestPrice shopper rating for this product: average of count first-party ratings. Null when the product has none.'}, 'image_url': {'$ref': '#/$defs/__schema36'}, 'price_from': {'$ref': '#/$defs/__schema33'}, 'product_id': {'$ref': '#/$defs/__schema7'}, 'decision_id': {'$ref': '#/$defs/__schema34'}, 'offer_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'availability': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string'}, 'bestprice_url': {'$ref': '#/$defs/__schema35'}, 'category_title': {'$ref': '#/$defs/__schema32'}}}, '__schema75': {'type': 'object', 'required': ['average', 'count'], 'properties': {'count': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'average': {'type': 'number', 'maximum': 5, 'minimum': 0}}}, '__schema76': {'type': 'object', 'required': ['source_id', 'kind', 'record_id', 'product_id', 'scope', 'capability', 'checked_at', 'source_observed_at', 'freshness', 'max_age_seconds'], 'properties': {'kind': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Evidence source kind. Known values: catalog_snapshot, merchant_offer, basket_quote, price_history, review_sample, decision_policy. New values are added without a tools/list change.'}, 'scope': {'enum': ['cluster', 'offer', 'product_family'], 'type': 'string'}, 'freshness': {'enum': ['fresh', 'stale', 'unknown'], 'type': 'string'}, 'record_id': {'type': 'string', 'maxLength': 160}, 'source_id': {'type': 'string', 'maxLength': 160}, 'capability': {'type': 'string', 'maxLength': 40}, 'checked_at': {'$ref': '#/$defs/__schema56'}, 'product_id': {'$ref': '#/$defs/__schema52'}, 'max_age_seconds': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'source_observed_at': {'anyOf': [{'$ref': '#/$defs/__schema56'}, {'type': 'null'}]}}}, '__schema77': {'type': 'object', 'required': ['claim_id', 'product_id', 'field', 'value', 'kind', 'source_ids', 'validation'], 'properties': {'kind': {'enum': ['observed', 'derived'], 'type': 'string'}, 'field': {'type': 'string', 'maxLength': 100}, 'value': {'$ref': '#/$defs/__schema59'}, 'feature': {'type': 'object', 'required': ['id', 'label', 'group'], 'properties': {'id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'group': {'type': 'string', 'maxLength': 80}, 'label': {'type': 'string', 'maxLength': 100}}}, 'claim_id': {'type': 'string', 'maxLength': 160}, 'product_id': {'$ref': '#/$defs/__schema52'}, 'source_ids': {'type': 'array', 'items': {'$ref': '#/$defs/__schema78'}, 'maxItems': 32, 'minItems': 1}, 'validation': {'type': 'string', 'maxLength': 100}, 'supporting_claim_ids': {'type': 'array', 'items': {'$ref': '#/$defs/__schema79'}, 'maxItems': 8, 'minItems': 1}}}, '__schema78': {'type': 'string', 'maxLength': 160}, '__schema79': {'type': 'string', 'maxLength': 160}, '__schema80': {'type': 'object', 'required': ['code', 'product_id', 'message'], 'properties': {'code': {'type': 'string', 'maxLength': 100}, 'message': {'type': 'string', 'maxLength': 500}, 'product_id': {'anyOf': [{'$ref': '#/$defs/__schema52'}, {'type': 'null'}]}}}}, 'anyOf': [{'anyOf': [{'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'brain', 'outcome', 'status', 'answer', 'reason', 'message', 'blocking_constraints', 'recommended_product_id', 'alternatives', 'products', 'constraints', 'reasons', 'tradeoffs', 'offer_summary', 'comparison', 'basket', 'basket_request', 'clarifications', 'price_verdict', 'next_action', 'ranking_policy', 'retrieval', 'shopping_context', 'evidence', 'uncertainty'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'brain': {'type': 'object', 'required': ['projection_version', 'decision_version', 'decision_id', 'evidence_fingerprint'], 'properties': {'decision_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'decision_version': {'type': 'string', 'pattern': '^bestprice_decision_v[1-9][0-9]*$', 'description': 'Shopping Brain decision contract version. Currently bestprice_decision_v1; a later bestprice_decision_v<N> is returned without a tools/list change.'}, 'projection_version': {'type': 'string', 'pattern': '^bestprice_mcp_decision_v[1-9][0-9]*$', 'description': 'Version of this MCP projection of the decision. Currently bestprice_mcp_decision_v1; a later bestprice_mcp_decision_v<N> is returned without a tools/list change.'}, 'evidence_fingerprint': {'type': 'string', 'pattern': '^[a-f0-9]{64}$', 'description': 'Fingerprint of the original, unmodified Brain evidence; the public evidence below is a returned-product subset.'}}}, 'answer': {'type': 'string', 'maxLength': 8000}, 'basket': {'anyOf': [{'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'preferred_plan', 'methodology_id', 'plans', 'unavailable_items'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'plans': {'type': 'array', 'items': {'$ref': '#/$defs/__schema45'}, 'maxItems': 3}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'methodology_id': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*_v[1-9][0-9]*$', 'maxLength': 100, 'description': 'Basket planning method. Currently bestprice_basket_bounded_v1; a revised method is returned as a new <name>_v<N> id without a tools/list change.'}, 'preferred_plan': {'anyOf': [{'enum': ['cheapest', 'fewer_merchants', 'balanced'], 'type': 'string'}, {'type': 'null'}]}, 'schema_version': {'$ref': '#/$defs/__schema0'}, 'unavailable_items': {'type': 'array', 'items': {'$ref': '#/$defs/__schema7'}, 'maxItems': 20}}}, {'type': 'null'}]}, 'locale': {'$ref': '#/$defs/__schema3'}, 'reason': {'anyOf': [{'type': 'string', 'maxLength': 160}, {'type': 'null'}]}, 'status': {'enum': ['ready', 'no_match', 'needs_input'], 'type': 'string'}, 'message': {'anyOf': [{'type': 'string', 'maxLength': 8000}, {'type': 'null'}]}, 'outcome': {'enum': ['recommendation', 'no_match', 'clarification', 'answer', 'comparison', 'basket'], 'type': 'string'}, 'reasons': {'type': 'array', 'items': {'$ref': '#/$defs/__schema39'}, 'maxItems': 24}, 'currency': {'$ref': '#/$defs/__schema2'}, 'evidence': {'type': 'object', 'required': ['scope', 'sources', 'claims'], 'properties': {'note': {'type': 'string', 'maxLength': 400}, 'scope': {'type': 'string', 'const': 'returned_products'}, 'claims': {'type': 'array', 'items': {'$ref': '#/$defs/__schema77'}, 'maxItems': 2048}, 'detail': {'type': 'string', 'const': 'summary'}, 'sources': {'type': 'array', 'items': {'$ref': '#/$defs/__schema76'}, 'maxItems': 256}, 'omitted_claim_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'omitted_source_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'products': {'type': 'array', 'items': {'$ref': '#/$defs/__schema29'}, 'maxItems': 4}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'near_miss': {'type': 'object', 'required': ['over_by_eur'], 'properties': {'over_by_eur': {'type': 'number'}}}, 'retrieval': {'type': 'object', 'required': ['scope', 'candidate_count', 'complete_catalog', 'search_calls', 'receipt'], 'properties': {'scope': {'enum': ['returned_page', 'exact_products', 'not_searched'], 'type': 'string'}, 'receipt': {'anyOf': [{'type': 'object', 'required': ['version', 'policy', 'backend', 'checked_at', 'source_observed_at', 'search_calls', 'trinity_calls', 'page', 'page_size', 'catalog_total', 'candidate_count', 'eligible_count', 'returned_count', 'category_id', 'protected_term_mismatch', 'ranking_scope'], 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'policy': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*_v[1-9][0-9]*$', 'maxLength': 100, 'description': 'Catalog retrieval policy. Currently single_catalog_page_v1; a revised method is returned as a new <name>_v<N> id without a tools/list change.'}, 'backend': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*(?:\\.[a-z][a-z0-9_-]*)*$', 'maxLength': 100, 'description': 'Catalog search backend that served the page. Known values: n.products.search, bp.search. New values are added without a tools/list change.'}, 'version': {'type': 'string', 'pattern': '^bestprice_retrieval_v[1-9][0-9]*$', 'description': 'Retrieval receipt version. Currently bestprice_retrieval_v1; a later bestprice_retrieval_v<N> is returned without a tools/list change.'}, 'page_size': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'checked_at': {'$ref': '#/$defs/__schema56'}, 'category_id': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, {'type': 'null'}]}, 'search_calls': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Catalog searches the retrieval policy made; currently always 1.', 'exclusiveMinimum': 0}, 'catalog_total': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'ranking_scope': {'type': 'string', 'const': 'returned_page'}, 'trinity_calls': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'eligible_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'returned_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'candidate_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'source_observed_at': {'anyOf': [{'$ref': '#/$defs/__schema56'}, {'type': 'null'}]}, 'protected_term_mismatch': {'type': 'boolean'}}}, {'type': 'null'}]}, 'search_calls': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'candidate_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'complete_catalog': {'type': 'boolean', 'const': False}}}, 'tradeoffs': {'type': 'array', 'items': {'$ref': '#/$defs/__schema40'}, 'maxItems': 24}, 'comparison': {'anyOf': [{'type': 'object', 'required': ['comparison_type', 'products', 'feature_rows', 'price_spread_eur', 'postal_code', 'warnings', 'as_of'], 'properties': {'as_of': {'anyOf': [{'$ref': '#/$defs/__schema1'}, {'type': 'null'}]}, 'products': {'type': 'array', 'items': {'$ref': '#/$defs/__schema41'}, 'maxItems': 4, 'minItems': 2}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'evaluation': {'enum': ['selected', 'no_eligible_compared_product', 'not_evaluated_budget', 'unavailable'], 'type': 'string'}, 'postal_code': {'anyOf': [{'$ref': '#/$defs/__schema10'}, {'type': 'null'}]}, 'feature_rows': {'type': 'array', 'items': {'$ref': '#/$defs/__schema43'}, 'maxItems': 12}, 'comparison_type': {'enum': ['specifications', 'delivered_cost'], 'type': 'string'}, 'price_spread_eur': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}]}}}, {'type': 'null'}]}, 'constraints': {'type': 'object', 'propertyNames': {'$ref': '#/$defs/__schema37'}, 'additionalProperties': {'$ref': '#/$defs/__schema38'}}, 'next_action': {'type': 'object', 'required': ['type', 'reason', 'requires_user_action', 'bestprice_url'], 'properties': {'type': {'enum': ['compare', 'create_alert', 'provide_context'], 'type': 'string', 'description': 'Advisory step for the shopper, never an action for the agent. compare: review current offers at bestprice_url. create_alert: the current price is above its typical 180-day price; the shopper may set a price alert on the BestPrice page at bestprice_url (no tool creates alerts). provide_context: the request needs a change or more detail from the shopper.'}, 'reason': {'type': 'string', 'maxLength': 100}, 'bestprice_url': {'anyOf': [{'$ref': '#/$defs/__schema35'}, {'type': 'null'}]}, 'requires_user_action': {'type': 'boolean', 'const': True}}}, 'uncertainty': {'type': 'array', 'items': {'$ref': '#/$defs/__schema80'}, 'maxItems': 64}, 'alternatives': {'type': 'array', 'items': {'$ref': '#/$defs/__schema8'}, 'maxItems': 2}, 'offer_summary': {'$ref': '#/$defs/__schema9'}, 'price_verdict': {'type': 'object', 'required': ['verdict', 'reason', 'source_ids', 'predicts_future_price'], 'properties': {'reason': {'type': 'string', 'maxLength': 100}, 'verdict': {'enum': ['good', 'typical', 'high', 'insufficient_evidence'], 'type': 'string'}, 'source_ids': {'type': 'array', 'items': {'$ref': '#/$defs/__schema55'}, 'maxItems': 32}, 'predicts_future_price': {'type': 'boolean', 'const': False}}}, 'basket_request': {'anyOf': [{'type': 'object', 'required': ['version', 'requested_slots', 'resolved_slots', 'unresolved_slots', 'total_budget_eur'], 'properties': {'version': {'type': 'string', 'pattern': '^bestprice_basket_request_v[1-9][0-9]*$', 'description': 'Basket request version. Currently bestprice_basket_request_v1; a later bestprice_basket_request_v<N> is returned without a tools/list change.'}, 'resolved_slots': {'type': 'array', 'items': {'$ref': '#/$defs/__schema51'}, 'maxItems': 20}, 'requested_slots': {'type': 'array', 'items': {'$ref': '#/$defs/__schema49'}, 'maxItems': 20}, 'total_budget_eur': {'anyOf': [{'type': 'number', 'maximum': 1000000, 'exclusiveMinimum': 0}, {'type': 'null'}]}, 'unresolved_slots': {'type': 'array', 'items': {'$ref': '#/$defs/__schema53'}, 'maxItems': 20}}}, {'type': 'null'}]}, 'clarifications': {'type': 'array', 'items': {'$ref': '#/$defs/__schema54'}, 'maxItems': 3}, 'ranking_policy': {'type': 'object', 'required': ['version', 'product', 'merchant', 'commercial_signals_used'], 'properties': {'product': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Product ranking rule. Known values: hard_constraints_then_fit_and_marginal_value. New values are added without a tools/list change.'}, 'version': {'type': 'string', 'pattern': '^bestprice_shopping_policy_v[1-9][0-9]*$', 'description': 'Ranking policy version. Currently bestprice_shopping_policy_v1; a later bestprice_shopping_policy_v<N> is returned without a tools/list change.'}, 'merchant': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Merchant ranking rule. Known values: lowest_known_comparable_cost, basket_objective. New values are added without a tools/list change.'}, 'commercial_signals_used': {'type': 'boolean', 'const': False}}}, 'schema_version': {'$ref': '#/$defs/__schema0'}, 'search_handoff': {'type': 'object', 'required': ['url', 'label'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'label': {'type': 'string', 'maxLength': 120, 'minLength': 1}}}, 'shopping_context': {'type': 'object', 'required': ['version', 'products', 'market'], 'properties': {'market': {'type': 'array', 'items': {'$ref': '#/$defs/__schema62'}, 'maxItems': 48}, 'version': {'type': 'string', 'pattern': '^bestprice_shopping_context_v[1-9][0-9]*$', 'description': 'Shopping-context projection version. Currently bestprice_shopping_context_v30; a later bestprice_shopping_context_v<N> is returned without a tools/list change.'}, 'products': {'type': 'array', 'items': {'$ref': '#/$defs/__schema57'}, 'maxItems': 48}}}, 'catalog_candidates': {'type': 'object', 'required': ['basis', 'note', 'query', 'price_min_eur', 'price_max_eur', 'products'], 'properties': {'note': {'$ref': '#/$defs/__schema69'}, 'basis': {'$ref': '#/$defs/__schema68'}, 'query': {'$ref': '#/$defs/__schema70'}, 'products': {'$ref': '#/$defs/__schema73'}, 'price_max_eur': {'$ref': '#/$defs/__schema72'}, 'price_min_eur': {'$ref': '#/$defs/__schema71'}}, 'description': 'Present only on a no_match that returns no product: one bounded BestPrice catalog search page for the request, with signed product links. Search results, not a recommendation; the Shopping Brain did not rank or verify them against the request.'}, 'blocking_constraints': {'type': 'array', 'items': {'$ref': '#/$defs/__schema6'}, 'maxItems': 24}, 'recommended_product_id': {'anyOf': [{'$ref': '#/$defs/__schema7'}, {'type': 'null'}]}}}, {'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'error'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'error': {'type': 'object', 'required': ['code', 'message', 'retryable'], 'properties': {'code': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]{2,63}$'}, 'message': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'retryable': {'type': 'boolean'}}}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'schema_version': {'$ref': '#/$defs/__schema0'}}}]}, {'type': 'object', 'required': ['bestprice_home'], 'properties': {'bestprice_home': {'type': 'boolean', 'const': True}}}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query'], 'properties': {'sort': {'enum': ['relevance', 'price_asc', 'price_desc'], 'type': 'string', 'default': 'relevance', 'description': 'Result order. Use relevance unless the user explicitly asks for cheapest or most expensive first.'}, 'limit': {'type': 'integer', 'default': 8, 'maximum': 8, 'minimum': 1, 'description': 'Maximum number of grouped products to return, from 1 to 8.'}, 'query': {'type': 'string', 'maxLength': 400, 'minLength': 2, 'description': 'Product name, model, barcode (GTIN/EAN), or category in Greek or English. A pasted merchant listing title is accepted; the search reduces it to the model it names. Use get_shopping_decision with the original request for recommendations based on needs, household size, or suitability; catalog search does not verify those requirements.'}, 'locale': {'type': 'string', 'const': 'el-GR', 'default': 'el-GR', 'description': 'Response locale. The current service supports el-GR.'}, 'country': {'type': 'string', 'const': 'GR', 'default': 'GR', 'description': 'Shopping market. The current service supports Greece (GR).'}, 'price_max': {'type': 'number', 'maximum': 1000000, 'description': 'Optional maximum product price in EUR, before shipping.', 'exclusiveMinimum': 0}, 'price_min': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': 'Optional minimum product price in EUR, before shipping.'}, 'required_features': {'type': 'array', 'items': {'type': 'string', 'maxLength': 50, 'minLength': 1}, 'default': [], 'maxItems': 10, 'description': 'Optional relevance hints such as OLED, Wi-Fi, or noise cancellation. They are not independently verified for every result; confirm them on the product page.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$defs': {'__schema0': {'type': 'string', 'pattern': '^[1-9][0-9]*\\.[0-9]+$', 'description': 'Result schema version. Currently 2.0; a later <major>.<minor> is returned without a tools/list change.'}, '__schema1': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, '__schema2': {'type': 'string', 'const': 'EUR'}, '__schema3': {'type': 'string', 'const': 'el-GR'}, '__schema4': {'type': 'array', 'items': {'$ref': '#/$defs/__schema5'}, 'maxItems': 20}, '__schema5': {'type': 'string', 'maxLength': 240, 'minLength': 1}, '__schema6': {'anyOf': [{'$ref': '#/$defs/__schema7'}, {'type': 'null'}]}, '__schema7': {'type': 'number', 'maximum': 10000000, 'minimum': 0}, '__schema8': {'type': 'string', 'maxLength': 50, 'minLength': 1}, '__schema9': {'type': 'string', 'maxLength': 400, 'minLength': 1}, '__schema10': {'type': 'object', 'required': ['product_id', 'title', 'brand', 'model', 'variant', 'category_id', 'category_title', 'price_from', 'offer_count', 'availability', 'match_confidence', 'match_basis', 'rating', 'data_timestamp', 'decision_id', 'bestprice_url', 'image_url'], 'properties': {'brand': {'anyOf': [{'type': 'string', 'maxLength': 80, 'minLength': 1}, {'type': 'null'}]}, 'model': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'title': {'type': 'string', 'maxLength': 220, 'minLength': 1}, 'rating': {'anyOf': [{'$ref': '#/$defs/__schema11'}, {'type': 'null'}], 'description': 'BestPrice shopper rating for this product: average of count first-party ratings. Null when the product has none.'}, 'variant': {'anyOf': [{'type': 'string', 'maxLength': 160, 'minLength': 1}, {'type': 'null'}]}, 'image_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}]}, 'price_from': {'$ref': '#/$defs/__schema6', 'description': 'Catalog lowest listed item price in EUR before shipping. Same identity as compare_offers.catalog_price_from. Not a buyable quote; it may be a promoted, out-of-stock, or filtered offer that compare_offers omits. Never subtract this from another product compare_offers item_price.'}, 'product_id': {'type': 'string', 'pattern': '^bp_[0-9]{10}$'}, 'category_id': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, {'type': 'null'}]}, 'decision_id': {'type': 'string', 'pattern': '^d1\\.[a-f0-9]{32}\\.[A-Za-z0-9_-]{43}$', 'description': 'Signed, anonymous id joining this recommendation to its BestPrice landing and outbound-click telemetry.'}, 'match_basis': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*_v[1-9][0-9]*$', 'maxLength': 100, 'description': 'Relevance method behind match_confidence. Currently catalog_relevance_token_coverage_v1; a revised method is returned as a new <name>_v<N> id without a tools/list change.'}, 'offer_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}, 'availability': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string'}, 'bestprice_url': {'type': 'string', 'format': 'uri'}, 'category_title': {'anyOf': [{'type': 'string', 'maxLength': 100, 'minLength': 1}, {'type': 'null'}]}, 'data_timestamp': {'$ref': '#/$defs/__schema1'}, 'match_confidence': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Deterministic relative relevance hint based on token coverage and rank; not a probability or feature verification.'}, 'match_relationship': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'Deterministic relationship to a requested named model. exact_product covers requested identity tokens and variant qualifiers; it does not certify features. Unknown codes carry no identity assurance. Known values: exact_product, variant, accessory, related_product. New values are added without a tools/list change.'}}}, '__schema11': {'type': 'object', 'required': ['average', 'count'], 'properties': {'count': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'average': {'type': 'number', 'maximum': 5, 'minimum': 0}}}, '__schema12': {'type': 'object', 'required': ['category_id', 'title', 'url', 'listing_count'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'title': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'category_id': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'listing_count': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Ungrouped merchant offers BestPrice showed in this category for the search, within any price bounds.', 'exclusiveMinimum': 0}}}}, 'anyOf': [{'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'interpreted_query', 'total_matches', 'products'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'products': {'type': 'array', 'items': {'$ref': '#/$defs/__schema10'}, 'maxItems': 8, 'description': 'Grouped BestPrice products. For a barcode (GTIN) query the text search cannot find, at most the one grouped product that carries exactly that barcode, with a warning saying so; a barcode shared by several products returns none.'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'search_mode': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]*$', 'maxLength': 100, 'description': 'How the returned catalog page was retrieved. Known values: catalog_ranked, broadened_category. New values are added without a tools/list change.'}, 'total_matches': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of products returned after public scope, price, and result limits; not full catalog cardinality.'}, 'schema_version': {'$ref': '#/$defs/__schema0'}, 'applied_filters': {'type': 'object', 'required': ['price_min', 'price_max', 'sort', 'feature_hints', 'feature_hints_verified'], 'properties': {'sort': {'enum': ['relevance', 'price_asc', 'price_desc'], 'type': 'string'}, 'price_max': {'$ref': '#/$defs/__schema6'}, 'price_min': {'$ref': '#/$defs/__schema6'}, 'feature_hints': {'type': 'array', 'items': {'$ref': '#/$defs/__schema8'}, 'maxItems': 10}, 'feature_hints_verified': {'type': 'boolean', 'const': False}}}, 'requested_query': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'category_handoff': {'$ref': '#/$defs/__schema12', 'description': 'Present only when products is empty because the matched category holds merchant offers but no grouped BestPrice product yet. url is the plain public category page, not a product landing link. These offers are not comparable products: they have no product_id for compare_offers or get_price_history.'}, 'interpreted_query': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'suggested_queries': {'type': 'array', 'items': {'$ref': '#/$defs/__schema9'}, 'maxItems': 5}}}, {'type': 'object', 'required': ['schema_version', 'as_of', 'currency', 'locale', 'warnings', 'error'], 'properties': {'as_of': {'$ref': '#/$defs/__schema1'}, 'error': {'type': 'object', 'required': ['code', 'message', 'retryable'], 'properties': {'code': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]{2,63}$'}, 'message': {'type': 'string', 'maxLength': 240, 'minLength': 1}, 'retryable': {'type': 'boolean'}}}, 'locale': {'$ref': '#/$defs/__schema3'}, 'currency': {'$ref': '#/$defs/__schema2'}, 'warnings': {'$ref': '#/$defs/__schema4'}, 'schema_version': {'$ref': '#/$defs/__schema0'}}}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Recent tool changes
Similar MCP servers
AgentLot Marketplace
Enables agents and users to discover, bid on, purchase, deliver, and settle paid digital services and compute work.
apex-x1
Provides X1 and Arc token screening, liquidity and exit-risk checks, wallet and bridge data, non-custodial token operations, comm…
SpellBook Finance
Provides Magic: The Gathering and other trading-card market prices, buylist offers, arbitrage analysis, sealed-product EV, seller…
API Direct
Searches and retrieves data from social networks, news and Google services, while also providing Amazon product, seller, ranking,…
Digital Manager Guru
Provides Digital Manager Guru checkout, customer, transaction, subscription, affiliate, coupon, blocklist, and digital-product sa…
Pagar.me
Connects to Pagar.me to manage customers, cards, orders, charges, invoices, payment captures, confirmations, retries, refunds, an…
amazon-product-research-mcp
Researches Amazon products, brands, sellers, buy-box activity, sourcing profitability, category competition, and supplier opportu…
AgentLux
Operates an agent avatar marketplace with item generation, purchases, creator earnings, public profiles, social activity, and ERC…