{"openapi":"3.1.0","info":{"title":"Construction Calculators","version":"1.0.0","description":"Materials and layout maths for concrete, paint, stairs, roofs, lumber, tile, drywall, fences and decks. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Construction Calculators: Materials and layout maths for concrete, paint, stairs, roofs, lumber, tile, drywall, fences and decks. Construction Calculators: /concrete-volume, /paint-coverage, /stair-calc, /roof-pitch, /board-feet, /tile-calc, /drywall-calc, /bulk-material, /fence-calc, /deck-calc Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://construction-calc.x402tookit.com"}],"paths":{"/board-feet":{"get":{"operationId":"board_feet","summary":"Board feet for lumber from thickness, width, length and quantity (nominal sizes), with total cost at a price per board foot.","description":"Board feet for lumber from thickness, width, length and quantity (nominal sizes), with total cost at a price per board foot.","tags":["lumber","board-feet","wood","estimating"],"parameters":[{"name":"thicknessIn","in":"query","required":true,"description":"Thickness in inches (nominal, for example 2 for a 2x4)","schema":{"type":"number"}},{"name":"widthIn","in":"query","required":true,"description":"Width in inches (nominal, for example 4)","schema":{"type":"number"}},{"name":"lengthFt","in":"query","required":true,"description":"Length in feet","schema":{"type":"number"}},{"name":"quantity","in":"query","required":false,"description":"Number of pieces, default 1","schema":{"type":"integer"}},{"name":"pricePerBoardFoot","in":"query","required":false,"description":"Price per board foot, to get a total","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"boardFeetPerPiece":{"type":["null","number"]},"totalBoardFeet":{"type":["null","number"]},"quantity":{"type":["null","number"]},"cubicFeet":{"type":["null","number"]},"linearFeet":{"type":["null","number"]},"totalCost":{},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"5.3333 board feet per piece, 53.3333 for 10 pieces.","reasons":["Board foot = thickness (in) x width (in) x length (ft) / 12; one board foot is 144 cubic inches of wood.","Uses the nominal sizes you give, which is how board feet are normally priced."],"boardFeetPerPiece":5.333333,"totalBoardFeet":53.333333,"quantity":10,"cubicFeet":4.444444,"linearFeet":80,"totalCost":null,"degraded":false,"notChecked":["actual dimensions: a 2x4 measures 1.5 x 3.5 in, but lumber is sold and counted by the NOMINAL size used here","whether your supplier sells hardwood by board foot and softwood by the piece or linear foot","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:25:11.860Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/board-feet"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/board-feet"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/board-feet"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/board-feet"}}]}}},"/bulk-material":{"get":{"operationId":"bulk_material","summary":"Cubic yards and approximate tons of gravel, sand, topsoil, mulch or compost to cover an area at a given depth.","description":"Cubic yards and approximate tons of gravel, sand, topsoil, mulch or compost to cover an area at a given depth.","tags":["gravel","mulch","topsoil","landscaping","estimating"],"parameters":[{"name":"material","in":"query","required":true,"description":"gravel, crushed-stone, sand, topsoil, compost or mulch","schema":{"type":"string"}},{"name":"areaSqFt","in":"query","required":true,"description":"Area to cover in square feet","schema":{"type":"number"}},{"name":"depthIn","in":"query","required":true,"description":"Depth in inches (mulch 2 to 3, gravel path 3 to 4)","schema":{"type":"number"}},{"name":"pricePerYd3","in":"query","required":false,"description":"Price per cubic yard, for a total","schema":{"type":"number"}},{"name":"compactionPct","in":"query","required":false,"description":"Extra for settling or compaction, default 0 (10 to 20 for gravel base)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"material":{"type":["null","string"]},"cubicYards":{"type":["null","number"]},"cubicFeet":{"type":["null","number"]},"orderYd3":{"type":["null","number"]},"approxShortTons":{"type":["null","number"]},"assumedLbPerYd3":{"type":["null","number"]},"totalCost":{},"cubicMeters":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"1.852 yd3 of gravel for 200 sq ft at 3 in deep: about 2.59 short tons.","reasons":["Volume = area x depth / 12 / 27.","Weight uses a typical 2800 lb per cubic yard for gravel; it varies widely.","…1 more"],"material":"gravel","cubicYards":1.85185,"cubicFeet":50,"orderYd3":2,"approxShortTons":2.593,"assumedLbPerYd3":2800,"totalCost":null,"cubicMeters":1.416,"degraded":false,"notChecked":["real density: weight swings with moisture, size and source (use your supplier's tons-per-yard figure for ordering by weight)","slopes, uneven ground and edges","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:12.116Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/bulk-material"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/bulk-material"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/bulk-material"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/bulk-material"}}]}}},"/concrete-volume":{"get":{"operationId":"concrete_volume","summary":"Concrete for a slab: cubic yards with waste, ready-mix order size and the number of 40, 60 or 80 lb bags of mix.","description":"Concrete for a slab: cubic yards with waste, ready-mix order size and the number of 40, 60 or 80 lb bags of mix.","tags":["concrete","slab","volume","estimating"],"parameters":[{"name":"lengthFt","in":"query","required":true,"description":"Slab length in feet","schema":{"type":"number"}},{"name":"widthFt","in":"query","required":true,"description":"Slab width in feet","schema":{"type":"number"}},{"name":"thicknessIn","in":"query","required":true,"description":"Slab thickness in inches (4 for a patio)","schema":{"type":"number"}},{"name":"wastePct","in":"query","required":false,"description":"Waste and spill allowance, default 10","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"netFt3":{"type":["null","number"]},"netYd3":{"type":["null","number"]},"withWasteYd3":{"type":["null","number"]},"withWasteFt3":{"type":["null","number"]},"wastePct":{"type":["null","number"]},"readyMixOrderYd3":{"type":["null","number"]},"bags":{"type":["null","object"],"properties":{"40lb":{"type":["null","number"]},"60lb":{"type":["null","number"]},"80lb":{"type":["null","number"]}}},"approxWeightLb":{"type":["null","number"]},"withWasteM3":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"33.333 ft3 = 1.235 yd3 net; 1.358 yd3 with 10% waste. Bagged mix: 62 x 80 lb, 82 x 60 lb or 123 x 40 lb bags.","reasons":["Volume = length x width x thickness, 27 ft3 to the cubic yard.","Small enough to mix from bags.","…1 more"],"netFt3":33.3333,"netYd3":1.23457,"withWasteYd3":1.35802,"withWasteFt3":36.6667,"wastePct":10,"readyMixOrderYd3":1.5,"bags":{"40lb":123,"60lb":82,"80lb":62},"approxWeightLb":5500,"withWasteM3":1.038,"degraded":false,"notChecked":["uneven ground, footings, thickened edges or forms that take more concrete","reinforcement, base gravel, vapour barrier and finishing","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:12.381Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/concrete-volume"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/concrete-volume"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/concrete-volume"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/concrete-volume"}}]}}},"/deck-calc":{"get":{"operationId":"deck_calc","summary":"Decking boards, joist count and screws for a rectangular deck from its size, board width, gap, joist spacing and stock length.","description":"Decking boards, joist count and screws for a rectangular deck from its size, board width, gap, joist spacing and stock length.","tags":["deck","decking","joists","estimating"],"parameters":[{"name":"lengthFt","in":"query","required":true,"description":"Deck length along the boards in feet (joists are spaced across this)","schema":{"type":"number"}},{"name":"widthFt","in":"query","required":true,"description":"Deck width in feet (the joist span)","schema":{"type":"number"}},{"name":"boardWidthIn","in":"query","required":false,"description":"Actual board width in inches, default 5.5 (5/4x6)","schema":{"type":"number"}},{"name":"gapIn","in":"query","required":false,"description":"Gap between boards in inches, default 0.125","schema":{"type":"number"}},{"name":"joistSpacingIn","in":"query","required":false,"description":"Joist spacing on centre in inches, default 16","schema":{"type":"number"}},{"name":"stockLengthFt","in":"query","required":false,"description":"Board length you buy in feet, default 16","schema":{"type":"number"}},{"name":"wastePct","in":"query","required":false,"description":"Waste, default 10 (15 to 20 for diagonal)","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"areaSqFt":{"type":["null","number"]},"boardRows":{"type":["null","number"]},"boardsPerRow":{"type":["null","number"]},"boardsWithWaste":{"type":["null","number"]},"joists":{"type":["null","number"]},"joistLengthFt":{"type":["null","number"]},"screwsApprox":{"type":["null","number"]},"boardLinearFt":{"type":["null","number"]},"stockLengthFt":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"192 sq ft deck: 26 board rows, 29 boards of 16 ft (10% waste), 13 joists 12 ft long at 16 in centres, about 710 screws.","reasons":["Board rows = width / (board width + gap), rounded up; boards run along the length and across the joists.","1 board per row at 16 ft stock.","…1 more"],"areaSqFt":192,"boardRows":26,"boardsPerRow":1,"boardsWithWaste":29,"joists":13,"joistLengthFt":12,"screwsApprox":710,"boardLinearFt":416,"stockLengthFt":16,"degraded":false,"notChecked":["structural design: joist size and span, beams, posts, footings and ledger connections need a span table or engineer and local permits","stairs, railings, picture-frame borders and diagonal layouts","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:12.645Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/deck-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/deck-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/deck-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/deck-calc"}}]}}},"/drywall-calc":{"get":{"operationId":"drywall_calc","summary":"Drywall sheets for a room's walls and ceiling (4x8, 4x10 or 4x12), with waste, screw count and approximate weight.","description":"Drywall sheets for a room's walls and ceiling (4x8, 4x10 or 4x12), with waste, screw count and approximate weight.","tags":["drywall","gypsum","sheets","estimating"],"parameters":[{"name":"lengthFt","in":"query","required":true,"description":"Room length in feet","schema":{"type":"number"}},{"name":"widthFt","in":"query","required":true,"description":"Room width in feet","schema":{"type":"number"}},{"name":"heightFt","in":"query","required":true,"description":"Ceiling height in feet","schema":{"type":"number"}},{"name":"doors","in":"query","required":false,"description":"Doors to subtract (21 sq ft each), default 0","schema":{"type":"integer"}},{"name":"windows","in":"query","required":false,"description":"Windows to subtract (15 sq ft each), default 0","schema":{"type":"integer"}},{"name":"includeCeiling","in":"query","required":false,"description":"yes (default) or no","schema":{"type":"string"}},{"name":"sheetSize","in":"query","required":false,"description":"4x8 (default), 4x10 or 4x12","schema":{"type":"string"}},{"name":"thicknessIn","in":"query","required":false,"description":"0.5 (default) or 0.625","schema":{"type":"number"}},{"name":"wastePct","in":"query","required":false,"description":"Waste, default 10","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"boardAreaSqFt":{"type":["null","number"]},"wallsSqFt":{"type":["null","number"]},"ceilingSqFt":{"type":["null","number"]},"openingsSqFt":{"type":["null","number"]},"sheetSize":{"type":["null","string"]},"sheetAreaSqFt":{"type":["null","number"]},"sheets":{"type":["null","number"]},"wastePct":{"type":["null","number"]},"screwsApprox":{"type":["null","number"]},"weightLbApprox":{"type":["null","number"]},"thicknessIn":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"19 sheets of 4x8 (0.5 in) for 533 sq ft with 10% waste; about 608 screws and 973 lb of board.","reasons":["Walls 416 sq ft plus ceiling 168 sq ft minus 51 sq ft of openings.","Screws at roughly one per square foot of board (typical 12 to 16 in spacing).","…1 more"],"boardAreaSqFt":533,"wallsSqFt":416,"ceilingSqFt":168,"openingsSqFt":51,"sheetSize":"4x8","sheetAreaSqFt":32,"sheets":19,"wastePct":10,"screwsApprox":608,"weightLbApprox":973,"thicknessIn":0.5,"degraded":false,"notChecked":["joint compound, tape and corner bead quantities","layout waste from awkward room shapes, soffits and angled walls","…3 more"],"source":"computed locally","asOf":"2026-10-11T14:25:12.898Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/drywall-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/drywall-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/drywall-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/drywall-calc"}}]}}},"/fence-calc":{"get":{"operationId":"fence_calc","summary":"Posts, rails and pickets for a straight fence from its length, post spacing, picket width and gap.","description":"Posts, rails and pickets for a straight fence from its length, post spacing, picket width and gap.","tags":["fence","posts","pickets","estimating"],"parameters":[{"name":"lengthFt","in":"query","required":true,"description":"Total fence length in feet","schema":{"type":"number"}},{"name":"heightFt","in":"query","required":false,"description":"Fence height in feet, default 6","schema":{"type":"number"}},{"name":"postSpacingFt","in":"query","required":false,"description":"Post spacing in feet, default 8","schema":{"type":"number"}},{"name":"picketWidthIn","in":"query","required":false,"description":"Actual picket width in inches, default 5.5","schema":{"type":"number"}},{"name":"picketGapIn","in":"query","required":false,"description":"Gap between pickets in inches, default 0.5 (0 for privacy)","schema":{"type":"number"}},{"name":"gates","in":"query","required":false,"description":"Gates, each takes 4 ft of fence length and 1 extra post, default 0","schema":{"type":"integer"}},{"name":"wastePct","in":"query","required":false,"description":"Picket waste, default 5","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"fenceRunFt":{"type":["null","number"]},"sections":{"type":["null","number"]},"posts":{"type":["null","number"]},"rails":{"type":["null","number"]},"pickets":{"type":["null","number"]},"picketsWithWaste":{"type":["null","number"]},"gates":{"type":["null","number"]},"postSpacingFt":{"type":["null","number"]},"railLinearFt":{"type":["null","number"]},"heightFt":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"13 sections: 14 posts, 39 rails and 210 pickets (200 + 5% waste) for 100 ft at 6 ft high.","reasons":["Posts = sections + 1, plus one extra per gate (gates take 4 ft of the length).","Three rails per section, by height.","…1 more"],"fenceRunFt":100,"sections":13,"posts":14,"rails":39,"pickets":200,"picketsWithWaste":210,"gates":0,"postSpacingFt":8,"railLinearFt":312,"heightFt":6,"degraded":false,"notChecked":["corners, ends and gate posts beyond the simple count (line, corner and end posts are not separated)","post depth, concrete, hardware and local height or setback rules","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:13.159Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/fence-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/fence-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/fence-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/fence-calc"}}]}}},"/paint-coverage":{"get":{"operationId":"paint_coverage","summary":"Gallons of paint for a room from its size, doors, windows and coats; optional ceiling. Rounds up to the quart.","description":"Gallons of paint for a room from its size, doors, windows and coats; optional ceiling. Rounds up to the quart.","tags":["paint","walls","coverage","estimating"],"parameters":[{"name":"lengthFt","in":"query","required":true,"description":"Room length in feet","schema":{"type":"number"}},{"name":"widthFt","in":"query","required":true,"description":"Room width in feet","schema":{"type":"number"}},{"name":"heightFt","in":"query","required":true,"description":"Ceiling height in feet","schema":{"type":"number"}},{"name":"doors","in":"query","required":false,"description":"Doors to subtract, default 0","schema":{"type":"integer"}},{"name":"windows","in":"query","required":false,"description":"Windows to subtract, default 0","schema":{"type":"integer"}},{"name":"coats","in":"query","required":false,"description":"Coats, default 2","schema":{"type":"integer"}},{"name":"coverageSqFtPerGallon","in":"query","required":false,"description":"Label coverage, default 350","schema":{"type":"number"}},{"name":"includeCeiling","in":"query","required":false,"description":"yes to include the ceiling, default no","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"wallAreaSqFt":{"type":["null","number"]},"openingsSqFt":{"type":["null","number"]},"ceilingSqFt":{"type":["null","number"]},"paintableSqFt":{"type":["null","number"]},"coats":{"type":["null","number"]},"exactGallons":{"type":["null","number"]},"buyGallons":{"type":["null","number"]},"wholeGallons":{"type":["null","number"]},"extraQuarts":{"type":["null","number"]},"paintableM2":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"365 sq ft to paint x 2 coats = 2.086 gal; buy 2.25 gal (2 gal + 1 qt).","reasons":["Walls 416 sq ft minus 51 sq ft of openings.","Coverage assumed 350 sq ft per gallon.","…1 more"],"wallAreaSqFt":416,"openingsSqFt":51,"ceilingSqFt":0,"paintableSqFt":365,"coats":2,"exactGallons":2.0857,"buyGallons":2.25,"wholeGallons":2,"extraQuarts":1,"paintableM2":33.91,"degraded":false,"notChecked":["primer, dark-to-light colour changes or porous surfaces that need extra coats","trim, baseboards, closets and textured walls (rough walls can use 20% more)","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:13.423Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/paint-coverage"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/paint-coverage"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/paint-coverage"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/paint-coverage"}}]}}},"/roof-pitch":{"get":{"operationId":"roof_pitch","summary":"Convert roof pitch (rise per 12), angle or percent slope; get the rafter length multiplier and roof area factor.","description":"Convert roof pitch (rise per 12), angle or percent slope; get the rafter length multiplier and roof area factor.","tags":["roof","pitch","rafter","slope","carpentry"],"parameters":[{"name":"pitch","in":"query","required":false,"description":"Rise per 12 in of run, for example 6 for 6:12","schema":{"type":"number"}},{"name":"angleDeg","in":"query","required":false,"description":"Roof angle in degrees (instead of pitch)","schema":{"type":"number"}},{"name":"percent","in":"query","required":false,"description":"Slope percent (instead of pitch)","schema":{"type":"number"}},{"name":"runFt","in":"query","required":false,"description":"Horizontal run in feet, to get the rafter length","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"pitchRisePer12":{"type":["null","number"]},"angleDeg":{"type":["null","number"]},"slopePercent":{"type":["null","number"]},"rafterMultiplier":{"type":["null","number"]},"areaMultiplier":{"type":["null","number"]},"rafterLengthFt":{"type":["null","number"]},"class":{"type":["null","string"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"6:12 pitch = 26.565 degrees = 50% slope; rafter length is 1.11803 x the horizontal run, so 13.4164 ft for a 12 ft run (conventional).","reasons":["Rafter and roof surface area both scale by sqrt(1 + (rise/12)^2) compared with the flat footprint.","Pitch is rise per 12 inches of horizontal run."],"pitchRisePer12":6,"angleDeg":26.5651,"slopePercent":50,"rafterMultiplier":1.118034,"areaMultiplier":1.118034,"rafterLengthFt":13.41641,"class":"conventional","degraded":false,"notChecked":["overhangs, eaves, hips and valleys (which lengthen rafters and change area)","structural sizing, spacing and snow or wind loads","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:25:13.674Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/roof-pitch"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/roof-pitch"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/roof-pitch"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/roof-pitch"}}]}}},"/stair-calc":{"get":{"operationId":"stair_calc","summary":"Stair layout from total rise: number of risers, exact riser height, total run, stringer length, angle and a code check.","description":"Stair layout from total rise: number of risers, exact riser height, total run, stringer length, angle and a code check.","tags":["stairs","stringer","riser","tread","carpentry"],"parameters":[{"name":"totalRiseIn","in":"query","required":true,"description":"Floor-to-floor height in inches","schema":{"type":"number"}},{"name":"treadDepthIn","in":"query","required":false,"description":"Tread depth in inches, default 10","schema":{"type":"number"}},{"name":"targetRiserIn","in":"query","required":false,"description":"Preferred riser height, default 7.5","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"risers":{"type":["null","number"]},"riserHeightIn":{"type":["null","number"]},"treads":{"type":["null","number"]},"treadDepthIn":{"type":["null","number"]},"totalRunIn":{"type":["null","number"]},"totalRunFt":{"type":["null","number"]},"stringerLengthIn":{"type":["null","number"]},"angleDeg":{"type":["null","number"]},"comfortRule":{"type":["null","number"]},"comfortRuleOk":{"type":["boolean","null"]},"issues":{"type":["array","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"WITHIN_COMMON_LIMITS","summary":"14 risers of 7.714 in and 13 treads of 10 in: total run 130 in (10.83 ft), stringer about 169.01 in, 39.7 degrees.","reasons":["Comfort rule 2 x riser + tread = 25.43 in (outside the 24 to 25 in range often used).","Number of risers = total rise divided by the target riser, rounded; all risers are then equal.","…1 more"],"risers":14,"riserHeightIn":7.71429,"treads":13,"treadDepthIn":10,"totalRunIn":130,"totalRunFt":10.833,"stringerLengthIn":169.009,"angleDeg":39.719,"comfortRule":25.429,"comfortRuleOk":false,"issues":[],"degraded":false,"notChecked":["your local code: limits below are the common US IRC residential ones (max riser 7-3/4 in, min tread 10 in, 3/8 in variation) and other places differ","headroom (about 6 ft 8 in), handrails, guards, landings, nosing and stringer width and size","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:13.933Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/stair-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/stair-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/stair-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/stair-calc"}}]}}},"/tile-calc":{"get":{"operationId":"tile_calc","summary":"Tiles needed for a floor or wall from area or room size, tile size, grout gap and waste, plus boxes if you give tiles per box.","description":"Tiles needed for a floor or wall from area or room size, tile size, grout gap and waste, plus boxes if you give tiles per box.","tags":["tile","flooring","grout","estimating"],"parameters":[{"name":"areaSqFt","in":"query","required":false,"description":"Area in square feet (or give lengthFt and widthFt)","schema":{"type":"number"}},{"name":"lengthFt","in":"query","required":false,"description":"Length in feet","schema":{"type":"number"}},{"name":"widthFt","in":"query","required":false,"description":"Width in feet","schema":{"type":"number"}},{"name":"tileWidthIn","in":"query","required":true,"description":"Tile width in inches","schema":{"type":"number"}},{"name":"tileHeightIn","in":"query","required":true,"description":"Tile height in inches","schema":{"type":"number"}},{"name":"groutGapIn","in":"query","required":false,"description":"Grout joint in inches, default 0.125","schema":{"type":"number"}},{"name":"wastePct","in":"query","required":false,"description":"Waste, default 10 (use 15 to 20 for diagonal or patterned)","schema":{"type":"number"}},{"name":"tilesPerBox","in":"query","required":false,"description":"Tiles in a box, to get the box count","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"areaSqFt":{"type":["null","number"]},"tileCoverageSqFtEach":{"type":["null","number"]},"exactTiles":{"type":["null","number"]},"tilesWithWaste":{"type":["null","number"]},"wastePct":{"type":["null","number"]},"boxes":{},"tilesPerBox":{},"extraTilesBought":{},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"ESTIMATE","summary":"108 tiles (97.949 exact, +10% waste) for 100 sq ft of 12 x 12 in tile with a 0.125 in joint.","reasons":["Each tile occupies (width + joint) x (height + joint) once grout lines are included.","Waste covers cuts and breakage; add a spare box for future repairs."],"areaSqFt":100,"tileCoverageSqFtEach":1.020942,"exactTiles":97.94877,"tilesWithWaste":108,"wastePct":10,"boxes":null,"tilesPerBox":null,"extraTilesBought":null,"degraded":false,"notChecked":["cuts around fixtures, borders, niches and the layout pattern","tile lot and shade differences (buy all from one lot, plus a spare box)","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:25:14.194Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/tile-calc"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/tile-calc"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/tile-calc"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://construction-calc.x402tookit.com/tile-calc"}}]}}}}}