caty_render_product_cards
Search products matching the user query and render them as an interactive carousel in the chat widget. Use this tool when the conversation is about products, prices, availability, or recommendations, because clickable cards are more useful than a plain text list. Returns a UI action payload the frontend renders as clickable product cards. For follow-up refinements: when the user sends a short message (1-2 words) like "handmade", "negru", "ieftin" after a product query, this is a refinement — combine it with the previous product context. Example: user asks "frunze decorative" then says "handmade" — query should be "frunze decorative handmade", not just "handmade". Check conversation history for product context. RESPONSE: UI action payload rendered by the chat frontend as an interactive product carousel. Do not re-list the products in text after calling this tool — the cards are already visible to the user.
Input Schema
{
"type": "object",
"required": [
"widget_id",
"query"
],
"properties": {
"brand": {
"type": "string",
"description": "DEPRECATED alias of `product_brand` (kept for backward compatibility). Use `product_brand` instead."
},
"limit": {
"type": "number",
"description": "Max products to return. Default 10."
},
"query": {
"type": "string",
"description": "Search terms \u2014 MUST include previous product context for follow-up refinements. Example: \"frunze decorative\" \u2192 \"handmade\" becomes \"frunze decorative handmade\"."
},
"budget": {
"type": "number",
"description": "Max price filter in widget currency. Omit if user did not specify a budget."
},
"age_group": {
"enum": [
"infant",
"toddler",
"preschool",
"elementary",
"middle_school",
"high_school",
"adult"
],
"type": "string",
"description": "Age group filter for school/kids products."
},
"widget_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Widget UUID (passed by orchestrator). Array = multi-catalog search scopes."
},
"product_brand": {
"type": "string",
"description": "Product brand filter (e.g., \"nike\", \"adidas\", \"chanel\"). Filters by the manufacturer brand of the product, NOT by the selling merchant."
},
"product_color": {
"type": "string",
"description": "Color filter (e.g., \"negru\", \"alb\", \"rosu\")."
},
"previous_query": {
"type": "string",
"description": "The previous product query from conversation history. Use this to build context-aware searches for follow-up refinements."
},
"product_gender": {
"enum": [
"male",
"female",
"unisex"
],
"type": "string",
"description": "Gender filter: \"male\" for b\u0103rba\u021bi/men, \"female\" for femei/women, \"unisex\" for gender-neutral products (any age). For children's products use `age_group`, NOT this field."
},
"product_category_hint": {
"type": "string",
"description": "Category hint (e.g., \"parfum\", \"cosmetics\", \"footwear\")."
}
},
"additionalProperties": false
}
Stores exposing the caty_render_product_cards tool
Get the agentic commerce digest every Monday
Real adoption data, ecosystem trends, new spec versions, and the stores that broke or recovered this week. Read by founders and engineers building the next generation of commerce.
