Design & price modular raised garden beds and walls: exact bill of materials, EUR price + checkout.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get links to GridGarden's AI garden design: the AI designer from a photo of the garden, and the AI design inside Studio. This tool ONLY returns links - it never starts AI generation (that costs money and needs the user's own action on the website). Use it when the user wants an AI-generated design or visualisation from a photo.
Language of the pages. Default en.
Get links to GridGarden's AI garden design: the AI designer from a photo of the garden, and the AI design inside Studio. This tool ONLY returns links - it never starts AI generation (that costs money and needs the user's own action on the website). Use it when the user wants an AI-generated design or visualisation from a photo.
| Argument | Type | Description |
|---|---|---|
| locale | string | Language of the pages. Default en. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"locale": {
"enum": [
"sk",
"cs",
"de",
"en",
"fr",
"hu",
"it",
"nl",
"pl",
"ro"
],
"type": "string",
"description": "Language of the pages. Default en."
}
},
"additionalProperties": false
}Purchasing through an AI assistant is temporarily unavailable. The customer can buy on https://gridgarden.eu. This tool does not create a cart; use studio_pricing_quote for the bill of materials and price.
| Argument | Type | Description |
|---|---|---|
| shape* | string | Design type and the dimension fields it needs (all in mm, auto-snapped to the 60mm build grid): rectangle → length + width; lshape → length1 + width1 + length2 + width2; ushape → topLength + topWidth + arm1Length + arm1Width + arm2Length + arm2Width; wall → wallLength. Layers: raised beds 2–13, walls 1–25. Call studio_templates_list for ready example dimensions. |
| width | number | Rectangle: outer width in mm. |
| layers* | integer | Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm). |
| length | number | Rectangle: outer length in mm. |
| width1 | number | L-shape: first leg width in mm. |
| width2 | number | L-shape: second leg width in mm. |
| country | string | Delivery market as an ISO-3166-1 alpha-2 code (e.g. "DE", "AT", "SK"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices. |
| length1 | number | L-shape: first leg length in mm. |
| length2 | number | L-shape: second leg length in mm. |
| topWidth |
List the GridGarden Brick Premium modular components — middle and TOP planks in XS–XL sizes (plus a 1200mm XXL TOP) and the connector pin — with live EUR unit prices and availability from Shopify. Brick Premium only; no other materials are sold. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}Prepare a design in GridGarden Studio for the user and return a link that opens it in the editor, plus the price WITH VAT and the parts list. Use it when the user wants to see/try a raised bed layout or a garden plan: a Brick Premium raised bed (rectangle / L / U / wall, mm) and optionally a whole garden (plot shape and size, house, entrance, style, wants, plants). Give what the user told you; for anything they did not say either omit it or pass it in `assumed` — never invent silently. Unknown values are rejected with a clear message (no silent fallback). The link opens the editor directly (no welcome window), the user can edit and order there. Price and parts are computed by Studio itself; quote `price.total_incl_vat` (with VAT) and say the country. Nothing is paid or ordered here, and no AI image generation is started. The design is saved anonymously (no personal data); anyone with the link can open it, the first edit makes the user their own copy.
| Argument | Type | Description |
|---|---|---|
| beds | integer | How many identical beds (1–20). Needs shape. Price and parts are for all of them. |
| link | string | Optional: a ready GridGarden Studio link (https://gridgarden.eu/studio/<lang>/design/new?v=1&…). Its query is used as the input; the other fields below override it. Normally leave this out and pass the fields. |
| plot | string | Plot shape: rect | narrow | l | other (other = rectangle for now). |
| entry | string | Where the gate/entrance is: left | middle | right (on the street side unless entrySide). |
| house | string | Where the house stands (street at the bottom): street | middle | back | corner | none. |
List the countries GridGarden delivers Brick Premium raised beds to (ISO codes). Use it before quoting: pass the user's country as `country` to studio_pricing_quote or studio_create_design. Shipping costs are NOT returned here - they are calculated at checkout from the postcode; do not guess them. Delivery to the USA is not offered.
No arguments.
{
"type": "object",
"properties": {}
}Everything you can pass to studio_create_design (or put in a Studio link): bed shapes with their dimension keys and ready example sizes, plot shapes and size presets, house/entrance/style/wants values, limits, and the product line (Brick Premium only: 60 mm larch snap-in panels and connector pins). Call it first when unsure what values are allowed. Static, free, no prices (use studio_pricing_quote or studio_create_design for prices).
No arguments.
{
"type": "object",
"properties": {}
}List the design-knowledge-base rules relevant to one step of designing a garden (brief / koncept / dispozicia / vysadba / materialy) — up to 20 rules, each with its predicate, numeric thresholds, strength (must/should/may), confidence tag, and cited sources. No garden scene is read or required; this is reference knowledge, not a check against a specific design. Deterministic: the same step always returns the same rule set.
| Argument | Type | Description |
|---|---|---|
| step* | string | Design process step to fetch rules for: brief, koncept, dispozicia, vysadba, materialy. Call this once per step you are working on — do not assume one step's rules cover another. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"step"
],
"properties": {
"step": {
"enum": [
"brief",
"koncept",
"dispozicia",
"vysadba",
"materialy"
],
"type": "string",
"description": "Design process step to fetch rules for: brief, koncept, dispozicia, vysadba, materialy. Call this once per step you are working on — do not assume one step's rules cover another."
}
},
"additionalProperties": false
}Verified short facts about GridGarden Studio for answering users: what Studio is, that it is free, what the free AI design offer is, the beta credits, the product line, and what an AI assistant can and cannot do here. Use it instead of guessing. Returns plain facts, no prices.
No arguments.
{
"type": "object",
"properties": {}
}Search the GridGarden plant catalog (353 species) and get the keys you can pass as `plants` to studio_create_design. Filter by text, category, edible, sun, suitability for raised beds. Free, read-only. Returns at most 40 plants per call (see total).
| Argument | Type | Description |
|---|---|---|
| q | string | Search text in Slovak, Czech, English, German or Latin name (e.g. "basil", "rajčina"). |
| sun | string | Required light. |
| limit | integer | |
| edible | boolean | true = only edible plants. |
| category | string | |
| raised_bed_ok | boolean | true = only plants suitable for raised beds. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 60,
"description": "Search text in Slovak, Czech, English, German or Latin name (e.g. \"basil\", \"rajčina\")."
},
"sun": {
"enum": [
"sun",
"part-shade",
"shade"
],
"type": "string",
"description": "Required light."
},
"limit": {
"type": "integer",
"maximum": 40,
"minimum": 1
},
"edible": {
"type": "boolean",
"description": "true = only edible plants."
},
"category": {
"enum": [
"tree",
"perennial",
"shrub",
"vegetable",
"grass",
"herb",
"bulb",
"climber",
"fruit"
],
"type": "string"
},
"raised_bed_ok": {
"type": "boolean",
"description": "true = only plants suitable for raised beds."
}
},
"additionalProperties": false
}Compute the exact bill of materials (panels + connector pins) and total EUR price for a GridGarden modular Brick Premium raised bed (rectangle / L / U) or freestanding wall, from dimensions in millimetres. Quantities come from the same engine as the Studio configurator; prices are read live from the GridGarden product catalog for the delivery market you pass in `country`. The result carries the price WITH VAT (`total_incl_vat`, the main price — quote this one to the user, with the VAT rate) and WITHOUT VAT (`total_excl_vat`; the legacy field `total_eur` is also WITHOUT VAT). Without `country` the default market is Slovakia (SK, 23 % VAT) and the result says so.
| Argument | Type | Description |
|---|---|---|
| shape* | string | Design type and the dimension fields it needs (all in mm, auto-snapped to the 60mm build grid): rectangle → length + width; lshape → length1 + width1 + length2 + width2; ushape → topLength + topWidth + arm1Length + arm1Width + arm2Length + arm2Width; wall → wallLength. Layers: raised beds 2–13, walls 1–25. Call studio_templates_list for ready example dimensions. |
| width | number | Rectangle: outer width in mm. |
| layers* | integer | Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm). |
| length | number | Rectangle: outer length in mm. |
| width1 | number | L-shape: first leg width in mm. |
List the design shapes GridGarden Studio supports, with the dimension parameters each one needs.
No arguments.
{
"type": "object",
"properties": {}
}| number |
| U-shape: back (top) width in mm. |
| arm1Width | number | U-shape: arm 1 width in mm. |
| arm2Width | number | U-shape: arm 2 width in mm. |
| topLength | number | U-shape: back (top) length in mm. |
| arm1Length | number | U-shape: arm 1 length in mm. |
| arm2Length | number | U-shape: arm 2 length in mm. |
| utm_source | string | Attribution source recorded on the Shopify cart (UTM). Defaults to "mcp". |
| wallLength | number | Wall: single straight segment length in mm. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"shape",
"layers"
],
"properties": {
"shape": {
"enum": [
"rectangle",
"lshape",
"ushape",
"wall"
],
"type": "string",
"description": "Design type and the dimension fields it needs (all in mm, auto-snapped to the 60mm build grid): rectangle → length + width; lshape → length1 + width1 + length2 + width2; ushape → topLength + topWidth + arm1Length + arm1Width + arm2Length + arm2Width; wall → wallLength. Layers: raised beds 2–13, walls 1–25. Call studio_templates_list for ready example dimensions."
},
"width": {
"type": "number",
"description": "Rectangle: outer width in mm.",
"exclusiveMinimum": 0
},
"layers": {
"type": "integer",
"description": "Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm).",
"exclusiveMinimum": 0
},
"length": {
"type": "number",
"description": "Rectangle: outer length in mm.",
"exclusiveMinimum": 0
},
"width1": {
"type": "number",
"description": "L-shape: first leg width in mm.",
"exclusiveMinimum": 0
},
"width2": {
"type": "number",
"description": "L-shape: second leg width in mm.",
"exclusiveMinimum": 0
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Delivery market as an ISO-3166-1 alpha-2 code (e.g. \"DE\", \"AT\", \"SK\"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices."
},
"length1": {
"type": "number",
"description": "L-shape: first leg length in mm.",
"exclusiveMinimum": 0
},
"length2": {
"type": "number",
"description": "L-shape: second leg length in mm.",
"exclusiveMinimum": 0
},
"topWidth": {
"type": "number",
"description": "U-shape: back (top) width in mm.",
"exclusiveMinimum": 0
},
"arm1Width": {
"type": "number",
"description": "U-shape: arm 1 width in mm.",
"exclusiveMinimum": 0
},
"arm2Width": {
"type": "number",
"description": "U-shape: arm 2 width in mm.",
"exclusiveMinimum": 0
},
"topLength": {
"type": "number",
"description": "U-shape: back (top) length in mm.",
"exclusiveMinimum": 0
},
"arm1Length": {
"type": "number",
"description": "U-shape: arm 1 length in mm.",
"exclusiveMinimum": 0
},
"arm2Length": {
"type": "number",
"description": "U-shape: arm 2 length in mm.",
"exclusiveMinimum": 0
},
"utm_source": {
"enum": [
"chatgpt",
"claude",
"cursor",
"mcp"
],
"type": "string",
"description": "Attribution source recorded on the Shopify cart (UTM). Defaults to \"mcp\"."
},
"wallLength": {
"type": "number",
"description": "Wall: single straight segment length in mm.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}| north | number | North direction in degrees 0–360 (accepted, not used yet) |
| plotD | number | Plot depth away from the street, mm (3000–200000) |
| plotW | number | Plot width at the street, mm (3000–200000; 12 m = 12000) |
| shape | string | Raised bed / wall type: rectangle | lshape | ushape | wall. Needs its dimensions and layers (see studio_design_options). |
| style | string | Garden style: modern-minimal | cottage | scandinavian | naturalistic | family-productive | mediterranean-gravel | japanese | formal | open (let the design decide). |
| wants | array | What the user wants: veg, seating, kids, pets, lowcare, nolawn. |
| width | number | rectangle: outer width, mm |
| entryX | number | Entrance position along the boundary, mm |
| houseD | number | House depth, mm |
| houseW | number | House width, mm |
| houseX | number | House x, mm from the lower-left plot corner at the street (with houseY) |
| houseY | number | House y, mm from the street (with houseX) |
| layers | integer | Brick layers (raised beds 2–13, walls 1–25; each ≈120 mm tall). |
| length | number | rectangle: outer length, mm |
| locale | string | Language of the Studio page the user will open (sk cs de en fr hu it nl pl ro). Use the language the user speaks. Default en. |
| plants | array | Plant keys from studio_plant_catalog. They are saved as the user's planting wishes in the design; the planting itself (where each plant stands) is done in Studio. |
| width1 | number | lshape: first leg width, mm |
| width2 | number | lshape: second leg width, mm |
| assumed | array | Fields the user did NOT say and you guessed (they are shown as "estimated" in Studio). Always list them honestly. |
| country | string | Delivery country, ISO-3166-1 alpha-2 (DE, AT, SK…). Prices differ by market; ask the user. Omit only if unknown (then SK base prices, said in the result). |
| length1 | number | lshape: first leg length, mm |
| length2 | number | lshape: whole second leg length incl. the corner, mm |
| plotCut | string | plot=l: which corner is missing (default ne = back right; the street is at the bottom). |
| terrace | string | Existing terrace as a grid cell "1"–"9" (or "none"). |
| plotArea | number | Plot area in m2 if the user knows only that (9–40000); the plot becomes a rectangle estimate |
| plotCutD | number | plot=l: depth of the missing corner, mm |
| plotCutW | number | plot=l: width of the missing corner, mm |
| terraceX | number | Terrace x, mm (with terraceY) |
| terraceY | number | Terrace y, mm (with terraceX) |
| topWidth | number | ushape: back width, mm |
| arm1Width | number | ushape: arm 1 width, mm |
| arm2Width | number | ushape: arm 2 width, mm |
| entrySide | string | Boundary of the entrance: street (default) | left | right | back. |
| houseCell | integer | House position as a 3x3 grid cell 1–9, keypad layout 7 8 9 / 4 5 6 / 1 2 3 (street below 1 2 3). |
| houseSide | string | house=corner: which side. |
| topLength | number | ushape: back length, mm |
| arm1Length | number | ushape: arm 1 length, mm |
| arm2Length | number | ushape: arm 2 length, mm |
| from_agent | string | Which assistant you are (chatgpt, claude, perplexity, gemini, copilot, or mcp/agent). Used only for anonymous counting. Default mcp. |
| wallLength | number | wall: length, mm |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"beds": {
"type": "integer",
"description": "How many identical beds (1–20). Needs shape. Price and parts are for all of them."
},
"link": {
"type": "string",
"maxLength": 2000,
"description": "Optional: a ready GridGarden Studio link (https://gridgarden.eu/studio/<lang>/design/new?v=1&…). Its query is used as the input; the other fields below override it. Normally leave this out and pass the fields."
},
"plot": {
"enum": [
"rect",
"narrow",
"l",
"other"
],
"type": "string",
"description": "Plot shape: rect | narrow | l | other (other = rectangle for now)."
},
"entry": {
"enum": [
"left",
"middle",
"right"
],
"type": "string",
"description": "Where the gate/entrance is: left | middle | right (on the street side unless entrySide)."
},
"house": {
"enum": [
"street",
"middle",
"back",
"corner",
"none"
],
"type": "string",
"description": "Where the house stands (street at the bottom): street | middle | back | corner | none."
},
"north": {
"type": "number",
"description": "North direction in degrees 0–360 (accepted, not used yet)"
},
"plotD": {
"type": "number",
"description": "Plot depth away from the street, mm (3000–200000)"
},
"plotW": {
"type": "number",
"description": "Plot width at the street, mm (3000–200000; 12 m = 12000)"
},
"shape": {
"enum": [
"rectangle",
"lshape",
"ushape",
"wall"
],
"type": "string",
"description": "Raised bed / wall type: rectangle | lshape | ushape | wall. Needs its dimensions and layers (see studio_design_options)."
},
"style": {
"enum": [
"modern-minimal",
"cottage",
"scandinavian",
"naturalistic",
"family-productive",
"mediterranean-gravel",
"japanese",
"formal",
"open"
],
"type": "string",
"description": "Garden style: modern-minimal | cottage | scandinavian | naturalistic | family-productive | mediterranean-gravel | japanese | formal | open (let the design decide)."
},
"wants": {
"type": "array",
"items": {
"enum": [
"veg",
"seating",
"kids",
"pets",
"lowcare",
"nolawn"
],
"type": "string"
},
"maxItems": 6,
"description": "What the user wants: veg, seating, kids, pets, lowcare, nolawn."
},
"width": {
"type": "number",
"description": "rectangle: outer width, mm"
},
"entryX": {
"type": "number",
"description": "Entrance position along the boundary, mm"
},
"houseD": {
"type": "number",
"description": "House depth, mm"
},
"houseW": {
"type": "number",
"description": "House width, mm"
},
"houseX": {
"type": "number",
"description": "House x, mm from the lower-left plot corner at the street (with houseY)"
},
"houseY": {
"type": "number",
"description": "House y, mm from the street (with houseX)"
},
"layers": {
"type": "integer",
"description": "Brick layers (raised beds 2–13, walls 1–25; each ≈120 mm tall)."
},
"length": {
"type": "number",
"description": "rectangle: outer length, mm"
},
"locale": {
"enum": [
"sk",
"cs",
"de",
"en",
"fr",
"hu",
"it",
"nl",
"pl",
"ro"
],
"type": "string",
"description": "Language of the Studio page the user will open (sk cs de en fr hu it nl pl ro). Use the language the user speaks. Default en."
},
"plants": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 30,
"description": "Plant keys from studio_plant_catalog. They are saved as the user's planting wishes in the design; the planting itself (where each plant stands) is done in Studio."
},
"width1": {
"type": "number",
"description": "lshape: first leg width, mm"
},
"width2": {
"type": "number",
"description": "lshape: second leg width, mm"
},
"assumed": {
"type": "array",
"items": {
"enum": [
"plot",
"plotW",
"plotD",
"house",
"entry",
"terrace",
"style",
"wants"
],
"type": "string"
},
"maxItems": 8,
"description": "Fields the user did NOT say and you guessed (they are shown as \"estimated\" in Studio). Always list them honestly."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Delivery country, ISO-3166-1 alpha-2 (DE, AT, SK…). Prices differ by market; ask the user. Omit only if unknown (then SK base prices, said in the result)."
},
"length1": {
"type": "number",
"description": "lshape: first leg length, mm"
},
"length2": {
"type": "number",
"description": "lshape: whole second leg length incl. the corner, mm"
},
"plotCut": {
"enum": [
"ne",
"nw",
"se",
"sw"
],
"type": "string",
"description": "plot=l: which corner is missing (default ne = back right; the street is at the bottom)."
},
"terrace": {
"type": "string",
"maxLength": 8,
"description": "Existing terrace as a grid cell \"1\"–\"9\" (or \"none\")."
},
"plotArea": {
"type": "number",
"description": "Plot area in m2 if the user knows only that (9–40000); the plot becomes a rectangle estimate"
},
"plotCutD": {
"type": "number",
"description": "plot=l: depth of the missing corner, mm"
},
"plotCutW": {
"type": "number",
"description": "plot=l: width of the missing corner, mm"
},
"terraceX": {
"type": "number",
"description": "Terrace x, mm (with terraceY)"
},
"terraceY": {
"type": "number",
"description": "Terrace y, mm (with terraceX)"
},
"topWidth": {
"type": "number",
"description": "ushape: back width, mm"
},
"arm1Width": {
"type": "number",
"description": "ushape: arm 1 width, mm"
},
"arm2Width": {
"type": "number",
"description": "ushape: arm 2 width, mm"
},
"entrySide": {
"enum": [
"street",
"left",
"right",
"back"
],
"type": "string",
"description": "Boundary of the entrance: street (default) | left | right | back."
},
"houseCell": {
"type": "integer",
"description": "House position as a 3x3 grid cell 1–9, keypad layout 7 8 9 / 4 5 6 / 1 2 3 (street below 1 2 3)."
},
"houseSide": {
"enum": [
"left",
"right"
],
"type": "string",
"description": "house=corner: which side."
},
"topLength": {
"type": "number",
"description": "ushape: back length, mm"
},
"arm1Length": {
"type": "number",
"description": "ushape: arm 1 length, mm"
},
"arm2Length": {
"type": "number",
"description": "ushape: arm 2 length, mm"
},
"from_agent": {
"enum": [
"chatgpt",
"claude",
"perplexity",
"gemini",
"copilot",
"mcp",
"agent"
],
"type": "string",
"description": "Which assistant you are (chatgpt, claude, perplexity, gemini, copilot, or mcp/agent). Used only for anonymous counting. Default mcp."
},
"wallLength": {
"type": "number",
"description": "wall: length, mm"
}
},
"additionalProperties": false
}| width2 | number | L-shape: second leg width in mm. |
| country | string | Delivery market as an ISO-3166-1 alpha-2 code (e.g. "DE", "AT", "SK"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices. |
| length1 | number | L-shape: first leg length in mm. |
| length2 | number | L-shape: second leg length in mm. |
| topWidth | number | U-shape: back (top) width in mm. |
| arm1Width | number | U-shape: arm 1 width in mm. |
| arm2Width | number | U-shape: arm 2 width in mm. |
| topLength | number | U-shape: back (top) length in mm. |
| arm1Length | number | U-shape: arm 1 length in mm. |
| arm2Length | number | U-shape: arm 2 length in mm. |
| wallLength | number | Wall: single straight segment length in mm. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"shape",
"layers"
],
"properties": {
"shape": {
"enum": [
"rectangle",
"lshape",
"ushape",
"wall"
],
"type": "string",
"description": "Design type and the dimension fields it needs (all in mm, auto-snapped to the 60mm build grid): rectangle → length + width; lshape → length1 + width1 + length2 + width2; ushape → topLength + topWidth + arm1Length + arm1Width + arm2Length + arm2Width; wall → wallLength. Layers: raised beds 2–13, walls 1–25. Call studio_templates_list for ready example dimensions."
},
"width": {
"type": "number",
"description": "Rectangle: outer width in mm.",
"exclusiveMinimum": 0
},
"layers": {
"type": "integer",
"description": "Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm).",
"exclusiveMinimum": 0
},
"length": {
"type": "number",
"description": "Rectangle: outer length in mm.",
"exclusiveMinimum": 0
},
"width1": {
"type": "number",
"description": "L-shape: first leg width in mm.",
"exclusiveMinimum": 0
},
"width2": {
"type": "number",
"description": "L-shape: second leg width in mm.",
"exclusiveMinimum": 0
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Delivery market as an ISO-3166-1 alpha-2 code (e.g. \"DE\", \"AT\", \"SK\"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices."
},
"length1": {
"type": "number",
"description": "L-shape: first leg length in mm.",
"exclusiveMinimum": 0
},
"length2": {
"type": "number",
"description": "L-shape: second leg length in mm.",
"exclusiveMinimum": 0
},
"topWidth": {
"type": "number",
"description": "U-shape: back (top) width in mm.",
"exclusiveMinimum": 0
},
"arm1Width": {
"type": "number",
"description": "U-shape: arm 1 width in mm.",
"exclusiveMinimum": 0
},
"arm2Width": {
"type": "number",
"description": "U-shape: arm 2 width in mm.",
"exclusiveMinimum": 0
},
"topLength": {
"type": "number",
"description": "U-shape: back (top) length in mm.",
"exclusiveMinimum": 0
},
"arm1Length": {
"type": "number",
"description": "U-shape: arm 1 length in mm.",
"exclusiveMinimum": 0
},
"arm2Length": {
"type": "number",
"description": "U-shape: arm 2 length in mm.",
"exclusiveMinimum": 0
},
"wallLength": {
"type": "number",
"description": "Wall: single straight segment length in mm.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}