Custom Blinds Shop
Server Details
Browse, price, configure and order custom-made blinds for South African windows. Instant ZAR pricing, cart, checkout and payment via Yoco or Ozow EFT. No authentication required.
- Status
- Healthy
- Uptime
- 99.4% over 59 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
TDQS
Scored across 26 tools
Several product-discovery tools overlap heavily: search_products and lookup_catalog both filter by blind type, colour, and dimensions, while search_catalog also handles product discovery. The differences are subtle enough that an agent could easily select the wrong tool.
All tool names use a consistent snake_case verb_noun pattern (create_cart, update_checkout, get_price, cancel_checkout, configure_product, etc.). The only minor variation is using search versus lookup for similar actions, but the overall convention is uniform and predictable.
26 tools is on the heavy side for a blinds-shop MCP, and the count is inflated by redundant search/filter tools and legacy auth-required tools. That said, the breadth is somewhat justified by the full e-commerce lifecycle—discovery, pricing, cart, checkout, orders, and post-sale support.
The server covers the full customer journey from product discovery through to order tracking and support handoffs, with no critical dead ends in core workflows. Minor gaps exist, such as no order cancellation or return flow after payment and no inventory/list tool for past carts or checkouts, but agents can work around these.
Available Tools
26 toolscancel_cartInspect
Permanently delete a cart by cart_id. Use when the customer abandons the session or wants to start over. Has no effect on any checkout or paid order already created from this cart. Irreversible — create a new cart to restart.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart_id | Yes | |
| cancelled | Yes |
cancel_checkoutInspect
Abort an unpaid checkout and release its checkout_id. Use if the customer changes their mind after create_checkout but before completing payment. Has no effect on orders already confirmed by webhook. To restart, create a new cart and checkout from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| checkout_id | Yes |
check_colour_stockInspect
Verify whether a specific colour is available before configure_product. Returns in_stock boolean, expected_restock_date if out of stock, and up to 5 alternative in-stock colours ordered by similarity. Call this when a customer requests a named colour or when you want to prevent a configure_product failure due to an out-of-stock selection.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| colour_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | No | |
| message | No | |
| in_stock | Yes | |
| product_id | No | |
| swatch_url | No | |
| colour_name | No | |
| expected_restock | No | |
| matching_colours | No | |
| available_colours | No | |
| exact_colour_match | No | |
| alternative_colours | No | |
| requires_exact_colour_selection | No |
complete_checkoutInspect
Generate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment. Rejects cancelled checkouts and rechecks stock and totals first. An atomic claim prevents competing gateway calls. Returns payment_url or null plus status and message; cloud callers may be held. Retain a successful URL: repeat calls return payment_pending with no URL. Gateway failures raise an error, send no payment-link email and require team review rather than an automatic retry. Poll get_order with customer_email for payment status.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | ||
| payment_method | No | Overrides any value set in create_checkout/update_checkout |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | Yes | |
| currency | No | |
| customer | No | |
| next_step | No | |
| total_zar | No | |
| created_at | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | Yes | |
| payment_method | No | |
| payment_status | No | |
| provider_reference | No |
configure_productInspect
Lock in a full blind specification: product, dimensions, colour, and mount type (inside recess or outside face-fix). Validates that the colour exists and is in stock, then prices the blind. Returns a configuration summary to pass directly into create_cart. Call check_colour_stock first if availability is uncertain.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | Yes | Colour name (must match available colours) | |
| finish | No | Optional finish for aluminium venetians | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| quantity | No | Number of blinds (default 1) | |
| width_mm | Yes | Width in millimetres | |
| height_mm | Yes | Height/drop in millimetres | |
| mount_type | Yes | Use inside (recess) or outside (face-fix); handler requires a nonempty value | |
| product_id | Yes | product_id from search_catalog or lookup_catalog |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| message | No | |
| success | Yes | |
| contact_name | No | |
| configuration | No | |
| contact_phone | No | |
| contact_required | No |
create_cartInspect
Start the open UCP purchase flow — no auth needed. Creates a cart session and returns a cart_id (24-hour TTL). Optionally seed with pre-configured blind items and customer details. Next step: update_cart to add items, then create_checkout → complete_checkout to mint the payment link.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Optional configured items; all submitted prices are ignored | |
| customer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
create_checkoutInspect
Phase 1 of 2 in the purchase flow. Convert a cart (or inline items + customer) into a checkout. Customer name, email, and phone are required. Returns checkout_id. No payment link is minted yet — call complete_checkout for that. Use update_checkout to correct customer details before finalising.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| cart_id | No | Either cart_id or items required | |
| customer | No | ||
| payment_method | No | Default 'yoco' |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| created_at | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| payment_status | No | |
| provider_reference | No |
create_orderInspect
Legacy auth-required tool — prefer the open UCP flow (create_cart → create_checkout → complete_checkout) which needs no credentials. Use create_order only if you hold a Bearer token and want a single-call path to a payment link. All item prices are re-verified server-side against the live pricing engine — agent-supplied prices are ignored. Returns a Yoco or Ozow payment_url.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of configured blind items | |
| customer_city | No | Delivery city | |
| customer_name | Yes | Customer full name | |
| customer_email | Yes | Customer email address | |
| customer_phone | Yes | Customer phone number | |
| payment_method | No | Yoco card or Ozow instant EFT | yoco |
| customer_address | No | Delivery address |
Output Schema
| Name | Required | Description |
|---|---|---|
| contact | Yes | |
| message | Yes | |
| success | Yes | |
| currency | Yes | |
| order_id | Yes | |
| total_zar | Yes | |
| item_count | Yes | |
| payment_url | Yes |
get_ar_visualizer_urlInspect
Surface the AR measurement tool or product visualizer when a customer wants to measure their window or preview a blind in their room. The AR tool uses a phone camera and an A4 page as a reference scale to measure window dimensions. The visualizer renders the selected blind in a customer-uploaded room photo. Set mode to 'measure', 'visualize', or 'both'. Optionally pre-select a product_id.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which tool to surface. Default: both. | |
| product_id | No | Optional. Pre-select a product in the visualizer (e.g. roller-blockout, venetian-25mm-aluwood). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| ar_measurement_url | No | |
| ar_measurement_note | No | |
| product_visualizer_url | No | |
| product_visualizer_note | No |
get_cartInspect
Retrieve live cart state by cart_id: full item list, calculated totals in ZAR, and any customer details stored so far. Call after update_cart to confirm changes are correct before proceeding to create_checkout. Cart expires after 24 hours of inactivity.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
get_checkoutInspect
Read checkout by checkout_id. Returns persisted order status, payment_status, payment_method, items, customer, total_zar and currency. Initial order status is started, not pending. This tool does not return a previously generated payment_url: retain the complete_checkout response in caller context.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| created_at | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| payment_status | No | |
| provider_reference | No |
get_delivery_estimateInspect
Explain the production lead time for a new order. Production takes 5–7 working days, excluding transit times and outside peak seasons. Returns dispatch_date, production_days, and a plain-language summary safe to share with the customer. Never quote a final delivery date. Call this when a customer asks 'when will it arrive?' to give an honest production timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| order_date | No | ISO date string of the order placement date (e.g. '2026-05-18'). Defaults to today. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| important | Yes | |
| order_date | Yes | |
| expedited_available | Yes | |
| delivery_after_dispatch | Yes | |
| estimated_dispatch_date | Yes | |
| production_working_days | Yes |
get_orderInspect
Retrieve a confirmed order's status, items, and payment details by order_id. customer_email is required as soft-auth and must exactly match the order record — prevents arbitrary order lookups. Returns payment status (paid | pending | failed), production status, and dispatch date once available.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | ||
| customer_email | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| status | No | |
| currency | No | |
| customer | No | |
| order_id | Yes | |
| total_zar | No | |
| created_at | No | |
| payment_method | No | |
| payment_status | No |
get_payment_methodsInspect
List available payment processors and their capabilities. Returns Yoco (card, immediate) and Ozow (instant EFT via South African bank account). Call when the customer asks 'how can I pay?' or before presenting options. The result informs the payment_method field in create_checkout and complete_checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| order_total_zar | No | Optional. For future per-handler limit filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| handlers | Yes | |
| default_currency | Yes |
get_priceInspect
Get an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm. Prices include VAT and delivery. Colour selects the bamboo price tier where applicable. A price is not a stock reservation: validate the exact colour and mount with configure_product before creating a cart. Failure can return success:false or a JSON-RPC validation error.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | No | Optional bamboo colour for colour-specific tier pricing | |
| finish | No | Optional finish for aluminium products: Plain, Brushed, Woodgrain | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| quantity | No | Number of blinds (default 1) | |
| width_mm | Yes | Width in millimetres (e.g. 1200) | |
| height_mm | Yes | Height/drop in millimetres (e.g. 1500) | |
| product_id | Yes | product_id from search_catalog or lookup_catalog (e.g. roller-blockout) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| finish | No | |
| message | No | |
| success | Yes | |
| currency | No | |
| quantity | No | |
| No | ||
| width_mm | No | |
| height_mm | No | |
| lead_time | No | |
| product_id | No | |
| contact_name | No | |
| vat_included | No | |
| contact_phone | No | |
| unit_price_zar | No | |
| total_price_zar | No | |
| contact_required | No | |
| effective_width_mm | No | |
| effective_height_mm | No | |
| measurement_review_required | No |
get_productInspect
Fetch complete details for one product by id (e.g. roller-blockout, venetian-25mm-aluwood). Returns all available colours with in-stock status, materials, features, and maximum supported dimensions. Use before configure_product to confirm a colour exists and is in stock before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| product | Yes |
get_product_recommendationInspect
Translate a customer's primary concern into a product recommendation. primary_concern must be one of: blockout, heat, glare, moisture, privacy, security, automation. Optionally narrow by room (bedroom, lounge, etc.), location, budget, and aesthetic. Returns a recommended product_id with rationale — pass it to get_price or configure_product next. Security concern routes to brochure MCP (Garden Route customers only).
| Name | Required | Description | Default |
|---|---|---|---|
| room | No | ||
| location | No | ||
| aesthetic | No | ||
| max_budget_zar | No | ||
| primary_concern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| handoff | No | |
| recommendations | Yes |
get_whatsapp_handoffInspect
Generate a pre-filled WhatsApp deep link to hand the customer off to the right contact. Garden Route locations (Knysna, Plett, George, Sedgefield, etc.) route to Duncan Kane (+27795235407) for free in-home consultation; all other South African locations route to the online shop line (+27760228410). Use when the customer prefers human assistance or when self-serve checkout isn't appropriate.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional additional message to prefill | |
| location | No | City/suburb. Drives Duncan vs shop routing. | |
| customer_name | No | ||
| product_context | No | e.g. 'roller blockout for bedroom' |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | Yes | |
| recipient | Yes | |
| whatsapp_url | Yes | |
| recipient_phone | Yes |
lookup_catalogInspect
Preferred structured discovery. Filter by category, partial colour name or required supported width/drop in mm. Returns results containing product_id, name, category and product_url, plus total. Width/drop filters check separate maximums, not every combination; confirm the exact pair with get_price.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | No | ||
| category | No | roller | venetian | honeycomb | vertical | outdoor | |
| max_width_mm | No | ||
| max_height_mm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes |
request_price_matchInspect
Submit a price match claim when the customer has found the same blind cheaper elsewhere. Custom Blinds matches verified South African retailer prices for identical product, dimensions, and specs. Returns a pre-filled WhatsApp link to the claims team. Not applicable to: Blinds Direct (same supplier), clearance or flash-sale prices, or out-of-stock items. Requires product_id and competitor_price_zar at minimum.
| Name | Required | Description | Default |
|---|---|---|---|
| width_mm | No | Window width in mm | |
| height_mm | No | Window height/drop in mm | |
| product_id | Yes | Product the customer wants to match (e.g. roller-blockout) | |
| customer_name | No | Customer name | |
| competitor_url | No | URL to competitor product page or quote | |
| competitor_name | No | Name of the competitor (e.g. 'Blind Empire') | |
| customer_whatsapp | No | Customer WhatsApp number for follow-up | |
| competitor_price_zar | Yes | Competitor's price in ZAR (incl. VAT) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| message | Yes | |
| success | Yes | |
| exclusions | Yes | |
| whatsapp_url | Yes | |
| claim_summary | Yes |
request_swatchInspect
Register up to 5 colour swatches to be dispatched with the customer's order. Swatches ship at order placement only — they are NOT sent as a standalone postal sample before purchase. Capped at 5 codes per order. If the customer asks for swatches before ordering, explain they ship with the blind and guide them to place their order first.
| Name | Required | Description | Default |
|---|---|---|---|
| suburb | No | Optional delivery suburb | |
| swatch_codes | No | Optional specific colour codes; no count limit enforced by this handler | |
| customer_name | Yes | ||
| customer_email | Yes | ||
| customer_phone | Yes | Used as WhatsApp number | |
| product_interest | Yes | e.g. 'Roller Blockout' or 'Honeycomb' |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| message | Yes | |
| request_id | Yes | |
| swatch_count | Yes | |
| estimated_delivery_days | Yes |
search_catalogInspect
Preferred free-text discovery. Returns results containing product_id, name, category, description, product_url and colour_count_in_stock, plus total and currency. For structured filters use lookup_catalog. Pass product_id to get_product or get_price.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text query, e.g. 'blockout' or 'venetian' |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes | |
| currency | Yes |
search_productsInspect
Legacy discovery, retained for backward compatibility. Prefer search_catalog / lookup_catalog, then get_product. Filters by blind type, colour or maximum dimensions. Returns products with id (not product_id), name, description, features and in-stock colour count. Pass that id as product_id to get_price or configure_product.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Blind category to filter by: roller, venetian, honeycomb, vertical, outdoor | |
| colour | No | Colour name to search for (partial match) | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| max_width_mm | No | Maximum width in millimetres the product supports | |
| max_height_mm | No | Maximum height/drop in millimetres the product supports |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | |
| products | Yes | |
| contact_name | No | |
| contact_phone | No |
submit_enquiryInspect
Legacy auth-required tool — prefer the open UCP flow (create_cart → create_checkout → complete_checkout) for credentialless checkout. Use submit_enquiry only when the customer wants a sales team follow-up by email rather than paying online. Requires Bearer token. Pass a configure_product output plus customer name, email, and phone. Team responds within 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Required enquiry message; at least 10 characters after trimming | |
| customer_name | Yes | Customer full name | |
| customer_email | Yes | Customer email address | |
| customer_phone | Yes | Customer phone number | |
| product_config | Yes | Product configuration from configure_product |
Output Schema
| Name | Required | Description |
|---|---|---|
| contact | Yes | |
| message | Yes | |
| success | Yes | |
| enquiry_id | Yes |
update_cartInspect
Modify an open cart before checkout. op: 'add' appends items, 'remove' drops items by 0-based index, 'set' replaces the full item list, 'clear' empties the cart. Merges customer details (name, email, phone) via the customer field. Call get_cart afterwards to confirm. Cannot modify a cart that already has a checkout in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | set | |
| items | No | ||
| cart_id | Yes | ||
| indices | No | Item indices to remove (0-based) when op='remove' | |
| customer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
update_checkoutInspect
Update customer details or payment_method only before payment-link generation. Paid, cancelled and payment-in-progress checkouts are rejected. Concurrent state changes are detected; retrieve the latest status before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | ||
| checkout_id | Yes | ||
| payment_method | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| created_at | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| payment_status | No | |
| provider_reference | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
26 tool updates
- Changed
cancel_cart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cancelled": { + "type": "boolean" + }, + "cart_id": { + "type": "string" + } + }, + "required": [ + "cancelled", + "cart_id" + ], + "type": "object" +}
- Changed
cancel_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "checkout_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "checkout_id", + "status" + ], + "type": "object" +}
- Changed
check_colour_stock1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "alternative_colours": { + "items": { + "additionalProperties": true, + "properties": { + "colour_name": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "colour_name", + "in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "available_colours": { + "items": { + "type": "string" + }, + "type": "array" + }, + "colour_name": { + "type": "string" + }, + "exact_colour_match": { + "type": "boolean" + }, + "expected_restock": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "found": { + "type": "boolean" + }, + "in_stock": { + "type": "boolean" + }, + "matching_colours": { + "items": { + "additionalProperties": true, + "properties": { + "colour_name": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "colour_name", + "in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "requires_exact_colour_selection": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "in_stock" + ], + "type": "object" +}
- Changed
complete_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "allOf": [ + { + "if": { + "properties": { + "payment_url": { + "type": "string" + } + }, + "required": [ + "payment_url" + ] + }, + "then": { + "required": [ + "total_zar", + "currency", + "payment_method" + ] + } + } + ], + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "payment_url", + "message" + ], + "type": "object" +}
- Changed
configure_product5 fields changed- changed
Input schema / properties / mount_type / descriptionPrevious value: -"Mount type: inside (recess) or outside (face-fix)"New value: +"Use inside (recess) or outside (face-fix); handler requires a nonempty value" - removed
Input schema / properties / mount_type / enumRemoved value: -[ - "inside", - "outside" -] - added
Input schema / properties / mount_type / minLengthAdded value: +1 - changed
Input schema / properties / product_id / descriptionPrevious value: -"Product ID from search_products"New value: +"product_id from search_catalog or lookup_catalog" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "oneOf": [ + { + "properties": { + "success": { + "const": true + } + }, + "required": [ + "configuration" + ] + }, + { + "properties": { + "success": { + "const": false + } + }, + "required": [ + "message" + ] + } + ], + "properties": { + "configuration": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour": { + "type": "string" + }, + "colour_hex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "effective_height_mm": { + "type": "number" + }, + "effective_width_mm": { + "type": "number" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "lead_time": { + "type": "string" + }, + "material": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "measurement_review_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "mount_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "success": { + "type": "boolean" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "vat_included": { + "type": "boolean" + }, + "whatsapp": { + "type": "string" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency", + "vat_included" + ], + "type": "object" + }, + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" +}
- Changed
create_cart5 fields changed- removed
Input schema / properties / customer / descriptionRemoved value: -"Optional customer details" - added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - changed
Input schema / properties / items / descriptionPrevious value: -"Optional initial items (configured blinds)"New value: +"Optional configured items; all submitted prices are ignored" - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
create_checkout8 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "cart_id" + ] + }, + { + "properties": { + "customer": { + "required": [ + "name", + "email", + "phone" + ] + } + }, + "required": [ + "items", + "customer" + ] + } +] - added
Input schema / properties / customer / properties / email / descriptionAdded value: +"Real customer email, checked before checkout creation" - added
Input schema / properties / customer / properties / name / descriptionAdded value: +"Real customer name, checked before checkout creation" - added
Input schema / properties / customer / properties / phone / descriptionAdded value: +"South African phone number, checked before checkout creation" - removed
Input schema / properties / customer / requiredRemoved value: -[ - "name", - "email", - "phone" -] - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - added
Input schema / properties / items / minItemsAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
- Changed
create_order4 fields changed- changed
Input schema / properties / items / items / requiredPrevious value: -[ - "product_id", - "width_mm", - "height_mm", - "colour", - "mount_type", - "unit_price_zar", - "total_price_zar" -]New value: +[ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" +] - added
Input schema / properties / items / minItemsAdded value: +1 - added
Input schema / properties / payment_methodAdded value: +{ + "default": "yoco", + "description": "Yoco card or Ozow instant EFT", + "enum": [ + "yoco", + "ozow" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact": { + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "email": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "item_count": { + "type": "number" + }, + "message": { + "type": "string" + }, + "order_id": { + "type": "string" + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "success": { + "type": "boolean" + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "success", + "order_id", + "total_zar", + "currency", + "item_count", + "payment_url", + "message", + "contact" + ], + "type": "object" +}
- Changed
get_ar_visualizer_url1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ar_measurement_note": { + "type": "string" + }, + "ar_measurement_url": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_visualizer_note": { + "type": "string" + }, + "product_visualizer_url": { + "type": "string" + } + }, + "required": [ + "note" + ], + "type": "object" +}
- Changed
get_cart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
get_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
- Changed
get_delivery_estimate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "delivery_after_dispatch": { + "type": "string" + }, + "estimated_dispatch_date": { + "type": "string" + }, + "expedited_available": { + "type": "boolean" + }, + "important": { + "type": "string" + }, + "order_date": { + "type": "string" + }, + "production_working_days": { + "type": "number" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "order_date", + "production_working_days", + "estimated_dispatch_date", + "delivery_after_dispatch", + "expedited_available", + "summary", + "important" + ], + "type": "object" +}
- Changed
get_order1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "order_id": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "order_id" + ], + "type": "object" +}
- Changed
get_payment_methods1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "default_currency": { + "const": "ZAR", + "type": "string" + }, + "handlers": { + "items": { + "additionalProperties": true, + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "methods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "redirect": { + "type": "boolean" + }, + "supports_3ds": { + "type": "boolean" + }, + "supports_banks": { + "items": { + "type": "string" + }, + "type": "array" + }, + "webhook_verified": { + "type": "boolean" + } + }, + "required": [ + "id", + "display_name", + "methods", + "redirect", + "webhook_verified" + ], + "type": "object" + }, + "type": "array" + }, + "note": { + "type": "string" + } + }, + "required": [ + "default_currency", + "handlers", + "note" + ], + "type": "object" +}
- Changed
get_price3 fields changed- added
Input schema / properties / colourAdded value: +{ + "description": "Optional bamboo colour for colour-specific tier pricing", + "type": "string" +} - changed
Input schema / properties / product_id / descriptionPrevious value: -"Product ID from search_products (e.g. roller-blockout, venetian-25mm-aluminium)"New value: +"product_id from search_catalog or lookup_catalog (e.g. roller-blockout)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "oneOf": [ + { + "properties": { + "success": { + "const": true + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency", + "vat_included" + ] + }, + { + "properties": { + "success": { + "const": false + } + }, + "required": [ + "message" + ] + } + ], + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "effective_height_mm": { + "type": "number" + }, + "effective_width_mm": { + "type": "number" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "lead_time": { + "type": "string" + }, + "measurement_review_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "success": { + "type": "boolean" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "vat_included": { + "type": "boolean" + }, + "whatsapp": { + "type": "string" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "success" + ], + "type": "object" +}
- Changed
get_product1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "product": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count_in_stock": { + "type": "number" + }, + "colours": { + "items": { + "additionalProperties": true, + "properties": { + "expected_restock": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "hex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "in_stock": { + "type": "boolean" + }, + "material": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "installation_type": { + "type": "string" + }, + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "schema_url": { + "type": "string" + }, + "size_limits": { + "additionalProperties": true, + "properties": { + "availability_rule": { + "type": "string" + }, + "combination_dependent": { + "type": "boolean" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "measurement_note": { + "type": "string" + }, + "minimum_charge_height_mm": { + "type": "number" + }, + "minimum_charge_width_mm": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "unit": { + "const": "mm", + "type": "string" + }, + "validation_note": { + "type": "string" + }, + "width_drop_frontier": { + "items": { + "additionalProperties": true, + "properties": { + "max_drop_mm": { + "type": "number" + }, + "width_band_max_mm": { + "type": "number" + } + }, + "required": [ + "width_band_max_mm", + "max_drop_mm" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "unit", + "max_width_mm", + "max_height_mm", + "minimum_charge_width_mm", + "minimum_charge_height_mm", + "combination_dependent", + "availability_rule", + "width_drop_frontier", + "measurement_note", + "validation_note" + ], + "type": "object" + }, + "suitable_for": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "name", + "category", + "colours", + "product_url" + ], + "type": "object" + } + }, + "required": [ + "product" + ], + "type": "object" +}
- Changed
get_product_recommendation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "handoff": { + "additionalProperties": true, + "properties": { + "product_family": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url", + "product_family", + "reason" + ], + "type": "object" + }, + "notes": { + "type": "string" + }, + "recommendations": { + "items": { + "additionalProperties": true, + "properties": { + "currency": { + "const": "ZAR", + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "shop_url": { + "type": "string" + }, + "starting_price_zar_for_1m_x_1m": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "product_id", + "product_name", + "reason", + "starting_price_zar_for_1m_x_1m", + "currency", + "shop_url" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "recommendations" + ], + "type": "object" +}
- Changed
get_whatsapp_handoff1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "reason": { + "type": "string" + }, + "recipient": { + "type": "string" + }, + "recipient_phone": { + "type": "string" + }, + "whatsapp_url": { + "type": "string" + } + }, + "required": [ + "whatsapp_url", + "recipient", + "recipient_phone", + "reason" + ], + "type": "object" +}
- Changed
lookup_catalog1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "results": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + } + }, + "required": [ + "product_id", + "name", + "category", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Changed
request_price_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "claim_summary": { + "additionalProperties": true, + "properties": { + "competitor": { + "type": "string" + }, + "competitor_price_zar": { + "type": "string" + }, + "dimensions": { + "type": "string" + }, + "product_id": { + "type": "string" + } + }, + "required": [ + "product_id", + "dimensions", + "competitor", + "competitor_price_zar" + ], + "type": "object" + }, + "exclusions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "success": { + "type": "boolean" + }, + "whatsapp_url": { + "type": "string" + } + }, + "required": [ + "success", + "claim_summary", + "whatsapp_url", + "message", + "exclusions", + "note" + ], + "type": "object" +}
- Changed
request_swatch2 fields changed- changed
Input schema / properties / swatch_codes / descriptionPrevious value: -"Optional specific colour codes (max 5)"New value: +"Optional specific colour codes; no count limit enforced by this handler" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "estimated_delivery_days": { + "additionalProperties": true, + "properties": { + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "required": [ + "min", + "max" + ], + "type": "object" + }, + "message": { + "type": "string" + }, + "request_id": { + "type": "number" + }, + "status": { + "type": "string" + }, + "swatch_count": { + "type": "number" + } + }, + "required": [ + "request_id", + "status", + "estimated_delivery_days", + "swatch_count", + "message" + ], + "type": "object" +}
- Changed
search_catalog1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "currency": { + "const": "ZAR", + "type": "string" + }, + "results": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count_in_stock": { + "type": "number" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + } + }, + "required": [ + "product_id", + "name", + "category", + "description", + "product_url", + "colour_count_in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "results", + "total", + "currency" + ], + "type": "object" +}
- Changed
search_products1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "note": { + "type": "string" + }, + "products": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count": { + "type": "number" + }, + "description": { + "type": "string" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "installation_type": { + "type": "string" + }, + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "suitable_for": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "category", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "products", + "total" + ], + "type": "object" +}
- Changed
submit_enquiry4 fields changed- changed
Input schema / properties / message / descriptionPrevious value: -"Additional message or questions from the customer"New value: +"Required enquiry message; at least 10 characters after trimming" - added
Input schema / properties / message / minLengthAdded value: +10 - changed
Input schema / requiredPrevious value: -[ - "product_config", - "customer_name", - "customer_email", - "customer_phone" -]New value: +[ + "product_config", + "customer_name", + "customer_email", + "customer_phone", + "message" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact": { + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "email": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "enquiry_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "enquiry_id", + "message", + "contact" + ], + "type": "object" +}
- Changed
update_cart4 fields changed- added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - added
Input schema / properties / op / defaultAdded value: +"set" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
update_checkout2 fields changed- added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
26 tool updates
- First observed
cancel_cart - First observed
cancel_checkout - First observed
check_colour_stock - First observed
complete_checkout - First observed
configure_product - First observed
create_cart - First observed
create_checkout - First observed
create_order - First observed
get_ar_visualizer_url - First observed
get_cart - First observed
get_checkout - First observed
get_delivery_estimate - First observed
get_order - First observed
get_payment_methods - First observed
get_price - First observed
get_product - First observed
get_product_recommendation - First observed
get_whatsapp_handoff - First observed
lookup_catalog - First observed
request_price_match - First observed
request_swatch - First observed
search_catalog - First observed
search_products - First observed
submit_enquiry - First observed
update_cart - First observed
update_checkout
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1611 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.