{"openapi":"3.1.0","info":{"title":"Tailor.ai","summary":"Fashion search across retailers' South African, UK and US shops (H&M, Cotton On, Zara, Mango), for AI assistants.","description":"Start at GET /api/schema. Each product is priced in its own shop's currency: za → ZAR, us → USD, gb → GBP.","version":"1.0.0"},"servers":[{"url":"https://www.tailor.ai"}],"paths":{"/api/search":{"get":{"tags":["agent"],"summary":"Search products by text and/or photo, or browse by filters","description":"The main entry point. One garment per call — for an outfit, search once per piece.","operationId":"search_api_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Describe ONE garment the way a product page would: colour, cut, fabric, pattern, type, vibe. E.g. \"black high-waisted wide-leg linen trousers\". Omit to browse newest items matching the filters.","title":"Q"},"description":"Describe ONE garment the way a product page would: colour, cut, fabric, pattern, type, vibe. E.g. \"black high-waisted wide-leg linen trousers\". Omit to browse newest items matching the filters."},{"name":"image","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"image_id of a photo uploaded to tailor.ai (from /upload or POST /api/images). Finds products that look like it; add q to steer it (\"same but in red\").","title":"Image"},"description":"image_id of a photo uploaded to tailor.ai (from /upload or POST /api/images). Finds products that look like it; add q to steer it (\"same but in red\")."},{"name":"image_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Public URL of a photo to search by. It is stored and the response's links switch to its image id.","title":"Image Url"},"description":"Public URL of a photo to search by. It is stored and the response's links switch to its image id."},{"name":"weight","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"With image + q: how much q steers vs. the photo. ~0.3 subtle, 0.5 balanced, ~0.7 big change.","default":0.5,"title":"Weight"},"description":"With image + q: how much q steers vs. the photo. ~0.3 subtle, 0.5 balanced, ~0.7 big change."},{"name":"mode","in":"query","required":false,"schema":{"enum":["hybrid","semantic","lexical"],"type":"string","description":"hybrid = meaning + keywords (default). semantic = look/meaning only. lexical = exact words only (names, '100% linen').","default":"hybrid","title":"Mode"},"description":"hybrid = meaning + keywords (default). semantic = look/meaning only. lexical = exact words only (names, '100% linen')."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"enum":["za","us","gb"],"type":"string"},{"type":"null"}],"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it.","title":"Country"},"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it."},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"enum":["women","men","kids","baby"],"type":"string"},{"type":"null"}],"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix.","title":"Department"},"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix."},{"name":"store","in":"query","required":false,"schema":{"anyOf":[{"enum":["hm","co","zara","mango"],"type":"string"},{"type":"null"}],"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all.","title":"Store"},"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["tops","t-shirts","shirts-blouses","knitwear","hoodies-sweats","coats-jackets","suits-blazers","dresses","jumpsuits","skirts","jeans","trousers","shorts","activewear","swimwear","sleepwear","underwear","socks-tights","shoes","bags","accessories"],"type":"string"},{"type":"null"}],"description":"Hard filter on garment type. Optional — the query text usually suffices.","title":"Type"},"description":"Hard filter on garment type. Optional — the query text usually suffices."},{"name":"colour","in":"query","required":false,"schema":{"anyOf":[{"enum":["black","white","grey","blue","green","red","pink","purple","yellow","orange","brown","beige","multi"],"type":"string"},{"type":"null"}],"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead.","title":"Colour"},"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead."},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog.","title":"Brand"},"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog."},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum price, in the country's currency (needs country)","title":"Price Min"},"description":"Minimum price, in the country's currency (needs country)"},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum price (budget), in the country's currency (needs country)","title":"Price Max"},"description":"Maximum price (budget), in the country's currency (needs country)"},{"name":"on_sale","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true → only discounted products","title":"On Sale"},"description":"true → only discounted products"},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only products listing this size as available, e.g. 'M', '10', '32'","title":"Size"},"description":"Only products listing this size as available, e.g. 'M', '10', '32'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Products to return","default":8,"title":"Limit"},"description":"Products to return"},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated product_ids to leave out (already shown or rejected)","title":"Exclude"},"description":"Comma-separated product_ids to leave out (already shown or rejected)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/similar":{"get":{"tags":["agent"],"summary":"Products that look like a given product","description":"Visual neighbours. Stays in the product's country and department unless given.\nAdd price_max for cheaper look-alikes, store for the same look at another retailer.","operationId":"similar_api_products__product_id__similar_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","description":"product_id from a previous result, e.g. 'hm:1757988'","title":"Product Id"},"description":"product_id from a previous result, e.g. 'hm:1757988'"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"enum":["za","us","gb"],"type":"string"},{"type":"null"}],"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it.","title":"Country"},"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it."},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"enum":["women","men","kids","baby"],"type":"string"},{"type":"null"}],"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix.","title":"Department"},"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix."},{"name":"store","in":"query","required":false,"schema":{"anyOf":[{"enum":["hm","co","zara","mango"],"type":"string"},{"type":"null"}],"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all.","title":"Store"},"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["tops","t-shirts","shirts-blouses","knitwear","hoodies-sweats","coats-jackets","suits-blazers","dresses","jumpsuits","skirts","jeans","trousers","shorts","activewear","swimwear","sleepwear","underwear","socks-tights","shoes","bags","accessories"],"type":"string"},{"type":"null"}],"description":"Hard filter on garment type. Optional — the query text usually suffices.","title":"Type"},"description":"Hard filter on garment type. Optional — the query text usually suffices."},{"name":"colour","in":"query","required":false,"schema":{"anyOf":[{"enum":["black","white","grey","blue","green","red","pink","purple","yellow","orange","brown","beige","multi"],"type":"string"},{"type":"null"}],"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead.","title":"Colour"},"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead."},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog.","title":"Brand"},"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog."},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum price, in the country's currency (needs country)","title":"Price Min"},"description":"Minimum price, in the country's currency (needs country)"},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum price (budget), in the country's currency (needs country)","title":"Price Max"},"description":"Maximum price (budget), in the country's currency (needs country)"},{"name":"on_sale","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true → only discounted products","title":"On Sale"},"description":"true → only discounted products"},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only products listing this size as available, e.g. 'M', '10', '32'","title":"Size"},"description":"Only products listing this size as available, e.g. 'M', '10', '32'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Products to return","default":8,"title":"Limit"},"description":"Products to return"},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated product_ids to leave out (already shown or rejected)","title":"Exclude"},"description":"Comma-separated product_ids to leave out (already shown or rejected)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tailor":{"get":{"tags":["agent"],"summary":"A product, altered: 'same but longer / in green / in linen'","description":"Blends the chosen product's embedding with the text of `change`.","operationId":"tailor_api_products__product_id__tailor_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","description":"product_id from a previous result, e.g. 'hm:1757988'","title":"Product Id"},"description":"product_id from a previous result, e.g. 'hm:1757988'"},{"name":"change","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Describe the desired RESULT, not just the delta: \"navy blue slim-fit chinos\" beats \"make it navy\".","title":"Change"},"description":"Describe the desired RESULT, not just the delta: \"navy blue slim-fit chinos\" beats \"make it navy\"."},{"name":"weight","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"How much `change` steers vs. the original's look. ~0.3 subtle, 0.5 balanced, ~0.65 colour/pattern, ~0.8 different style. Raise it if results ignore the change; lower it if they drift.","default":0.6,"title":"Weight"},"description":"How much `change` steers vs. the original's look. ~0.3 subtle, 0.5 balanced, ~0.65 colour/pattern, ~0.8 different style. Raise it if results ignore the change; lower it if they drift."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"enum":["za","us","gb"],"type":"string"},{"type":"null"}],"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it.","title":"Country"},"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it."},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"enum":["women","men","kids","baby"],"type":"string"},{"type":"null"}],"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix.","title":"Department"},"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix."},{"name":"store","in":"query","required":false,"schema":{"anyOf":[{"enum":["hm","co","zara","mango"],"type":"string"},{"type":"null"}],"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all.","title":"Store"},"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["tops","t-shirts","shirts-blouses","knitwear","hoodies-sweats","coats-jackets","suits-blazers","dresses","jumpsuits","skirts","jeans","trousers","shorts","activewear","swimwear","sleepwear","underwear","socks-tights","shoes","bags","accessories"],"type":"string"},{"type":"null"}],"description":"Hard filter on garment type. Optional — the query text usually suffices.","title":"Type"},"description":"Hard filter on garment type. Optional — the query text usually suffices."},{"name":"colour","in":"query","required":false,"schema":{"anyOf":[{"enum":["black","white","grey","blue","green","red","pink","purple","yellow","orange","brown","beige","multi"],"type":"string"},{"type":"null"}],"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead.","title":"Colour"},"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead."},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog.","title":"Brand"},"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog."},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum price, in the country's currency (needs country)","title":"Price Min"},"description":"Minimum price, in the country's currency (needs country)"},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum price (budget), in the country's currency (needs country)","title":"Price Max"},"description":"Maximum price (budget), in the country's currency (needs country)"},{"name":"on_sale","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true → only discounted products","title":"On Sale"},"description":"true → only discounted products"},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only products listing this size as available, e.g. 'M', '10', '32'","title":"Size"},"description":"Only products listing this size as available, e.g. 'M', '10', '32'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Products to return","default":8,"title":"Limit"},"description":"Products to return"},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated product_ids to leave out (already shown or rejected)","title":"Exclude"},"description":"Comma-separated product_ids to leave out (already shown or rejected)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}":{"get":{"tags":["agent"],"summary":"One product plus its closest alternatives","operationId":"get_product_api_products__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","description":"product_id from a previous result, e.g. 'hm:1757988'","title":"Product Id"},"description":"product_id from a previous result, e.g. 'hm:1757988'"},{"name":"similar","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":0,"description":"How many look-alikes to include","default":5,"title":"Similar"},"description":"How many look-alikes to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetails"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/catalog":{"get":{"tags":["agent"],"summary":"What is in stock: counts per department, store, type, brand, colour; price range","description":"Valid filter values with counts, under any filter combination.","operationId":"catalog_api_catalog_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"enum":["za","us","gb"],"type":"string"},{"type":"null"}],"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it.","title":"Country"},"description":"The shop the person buys from: za = South Africa (prices in ZAR), us = United States (USD), gb = United Kingdom (GBP). Required for search; prices, sizes and delivery follow it."},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"enum":["women","men","kids","baby"],"type":"string"},{"type":"null"}],"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix.","title":"Department"},"description":"Who it is for — gender / age group. Strongly recommended: without it departments mix."},{"name":"store","in":"query","required":false,"schema":{"anyOf":[{"enum":["hm","co","zara","mango"],"type":"string"},{"type":"null"}],"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all.","title":"Store"},"description":"One retailer: hm = H&M, co = Cotton On, zara = Zara, mango = Mango. Omit for all."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["tops","t-shirts","shirts-blouses","knitwear","hoodies-sweats","coats-jackets","suits-blazers","dresses","jumpsuits","skirts","jeans","trousers","shorts","activewear","swimwear","sleepwear","underwear","socks-tights","shoes","bags","accessories"],"type":"string"},{"type":"null"}],"description":"Hard filter on garment type. Optional — the query text usually suffices.","title":"Type"},"description":"Hard filter on garment type. Optional — the query text usually suffices."},{"name":"colour","in":"query","required":false,"schema":{"anyOf":[{"enum":["black","white","grey","blue","green","red","pink","purple","yellow","orange","brown","beige","multi"],"type":"string"},{"type":"null"}],"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead.","title":"Colour"},"description":"Hard filter on basic colour. For nuanced colours ('sage', 'rust') put them in q instead."},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog.","title":"Brand"},"description":"Exact brand, e.g. 'H&M', 'ZARA', 'MANGO', 'Cotton On Women', 'Factorie'. See /api/catalog."},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum price, in the country's currency (needs country)","title":"Price Min"},"description":"Minimum price, in the country's currency (needs country)"},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum price (budget), in the country's currency (needs country)","title":"Price Max"},"description":"Maximum price (budget), in the country's currency (needs country)"},{"name":"on_sale","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true → only discounted products","title":"On Sale"},"description":"true → only discounted products"},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only products listing this size as available, e.g. 'M', '10', '32'","title":"Size"},"description":"Only products listing this size as available, e.g. 'M', '10', '32'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Catalog Api Catalog Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/images":{"post":{"tags":["agent"],"summary":"Upload a photo to search by (multipart field 'file')","operationId":"upload_image_api_images_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_images_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Image Api Images Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/schema":{"get":{"tags":["agent"],"summary":"Everything an agent needs: endpoints, parameters, enums, fields, live catalogue counts","operationId":"schema_api_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Schema Api Schema Get"}}}}}}}},"components":{"schemas":{"Body_upload_image_api_images_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"JPEG/PNG/WebP photo of a garment or outfit, max 5 MB"}},"type":"object","required":["file"],"title":"Body_upload_image_api_images_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Product":{"properties":{"product_id":{"type":"string","title":"Product Id","description":"Stable id '<store>:<sku>' (ZA) or '<store>-<country>:<sku>' ('zara-us:…'). Use it in /api/products/{product_id}[/similar|/tailor] and in exclude"},"title":{"type":"string","title":"Title"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"store":{"type":"string","title":"Store","description":"Retailer name, e.g. 'H&M'"},"store_code":{"type":"string","title":"Store Code","description":"hm | co | zara | mango"},"country":{"type":"string","title":"Country","description":"za | us | gb — which country's shop sells it (and ships within that country)","default":"za"},"currency":{"type":"string","title":"Currency","description":"ZAR | USD | GBP — every price of this product is in it","default":"ZAR"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department","description":"Gender / age group: women | men | kids | baby"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"colour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Colour","description":"Retailer's colour name"},"colour_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Colour Family"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price","description":"Current price, in `currency`"},"price_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Display","description":"Price formatted for people, e.g. 'R1 299', '$49.90', '£25.99'"},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Price","description":"Pre-discount price when on sale"},"on_sale":{"type":"boolean","title":"On Sale","default":false},"discount_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount Pct"},"sizes":{"items":{"type":"string"},"type":"array","title":"Sizes","description":"Sizes listed as available when last checked"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"materials":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Materials"},"image_url":{"type":"string","title":"Image Url"},"tailor_url":{"type":"string","title":"Tailor Url","description":"The link to show people: tailor.ai page with a link to the store and 5 alternatives"},"store_url":{"type":"string","title":"Store Url","description":"Link to the retailer's product page, via tailor.ai/go (logged, then redirected)"},"links":{"$ref":"#/components/schemas/ProductLinks"},"card_markdown":{"type":"string","title":"Card Markdown","description":"Ready-to-paste markdown card for chat replies"}},"type":"object","required":["product_id","title","store","store_code","image_url","tailor_url","store_url","links","card_markdown"],"title":"Product"},"ProductDetails":{"properties":{"product":{"$ref":"#/components/schemas/Product"},"similar":{"items":{"$ref":"#/components/schemas/Product"},"type":"array","title":"Similar","description":"The closest alternatives by look (same department)"},"display":{"type":"string","title":"Display","default":"Show every product you recommend as its card_markdown (or the same facts): image, title linked to tailor_url, price_display (the shop's own currency), store, department (gender), available sizes and a one-line description. Link tailor_url, never store_url — the tailor.ai page links on to the store and shows the 5 closest alternatives. Keep product_ids you have shown; pass them as exclude for fresh results."}},"type":"object","required":["product","similar"],"title":"ProductDetails"},"ProductLinks":{"properties":{"page":{"type":"string","title":"Page","description":"tailor.ai product page (HTML) — same as tailor_url"},"details":{"type":"string","title":"Details","description":"JSON: this product plus its 5 closest alternatives"},"similar":{"type":"string","title":"Similar","description":"JSON: more products that look like this one"},"cheaper":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cheaper","description":"JSON: look-alikes at no more than ~75% of this price"},"recolour":{"additionalProperties":{"type":"string"},"type":"object","title":"Recolour","description":"JSON: this product tailored into another colour, keyed by colour"}},"type":"object","required":["page","details","similar"],"title":"ProductLinks"},"Refinement":{"properties":{"value":{"title":"Value"},"label":{"type":"string","title":"Label"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"Products in the catalogue with this value under the current filters (ignores the query text)"},"url":{"type":"string","title":"Url"}},"type":"object","required":["value","label","url"],"title":"Refinement"},"SearchResponse":{"properties":{"kind":{"type":"string","title":"Kind","description":"search | image | browse | similar | tailor"},"query":{"type":"string","title":"Query","description":"What was searched for, in words"},"applied":{"additionalProperties":true,"type":"object","title":"Applied","description":"Parameters that shaped this result"},"count":{"type":"integer","title":"Count"},"products":{"items":{"$ref":"#/components/schemas/Product"},"type":"array","title":"Products"},"more_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"More Url","description":"Same request, excluding everything shown so far"},"refine":{"additionalProperties":{"items":{"$ref":"#/components/schemas/Refinement"},"type":"array"},"type":"object","title":"Refine","description":"Ready-made narrower searches"},"image":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Image","description":"The query photo, when searching by image"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"display":{"type":"string","title":"Display","default":"Show every product you recommend as its card_markdown (or the same facts): image, title linked to tailor_url, price_display (the shop's own currency), store, department (gender), available sizes and a one-line description. Link tailor_url, never store_url — the tailor.ai page links on to the store and shows the 5 closest alternatives. Keep product_ids you have shown; pass them as exclude for fresh results."}},"type":"object","required":["kind","query","applied","count","products"],"title":"SearchResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}