{"openapi":"3.1.0","info":{"title":"Flooring & Tile API","version":"1.0.0","description":"Flooring and tiling material-estimation maths as an API, computed locally and deterministically. The tile endpoint computes how many tiles a floor needs — the floor area (given directly or as length × width) divided by the tile area, with a waste allowance for cuts and breakage (10 % by default) — and, given the tiles per box, how many boxes to buy. The packs endpoint sizes laminate, vinyl or carpet from the coverage printed on each pack: packs = ceil(area·(1+waste) / coverage per pack), with the total coverage supplied. The grout endpoint estimates the grout in kilograms for a tiled area from the tile size, the joint width and the tile thickness, ((A+B)/(A·B))·joint·thickness·density per square metre. Everything is computed locally and deterministically, so it is instant and private. Ideal for home-improvement, renovation and trade app developers, DIY and material-ordering tools, and builder and retailer calculators. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is floor-covering estimation; for wall paint use a paint API, for roofing use a roofing API and for concrete use a concrete API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/flooring-api","description":"oanor gateway"}],"tags":[{"name":"Flooring"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/grout":{"get":{"operationId":"get_v1_grout","tags":["Flooring"],"summary":"Grout quantity","description":"","parameters":[{"name":"area","in":"query","required":false,"description":"Tiled area (m²)","schema":{"type":"string"},"example":"20"},{"name":"length","in":"query","required":false,"description":"Or length (m)","schema":{"type":"string"}},{"name":"width","in":"query","required":false,"description":"and width (m)","schema":{"type":"string"}},{"name":"tile_length","in":"query","required":true,"description":"Tile length (mm)","schema":{"type":"string"},"example":"300"},{"name":"tile_width","in":"query","required":true,"description":"Tile width (mm)","schema":{"type":"string"},"example":"300"},{"name":"joint_width","in":"query","required":false,"description":"Joint width (mm, default 3)","schema":{"type":"string"},"example":"3"},{"name":"tile_thickness","in":"query","required":false,"description":"Tile thickness (mm, default 8)","schema":{"type":"string"},"example":"8"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Grout ≈ ((A+B)/(A·B))·joint·thickness·1.8 per m² (tile dims in mm). Add ~10 % for waste and uneven joints.","inputs":{"area":20,"tile_width":300,"joint_width":3,"tile_length":300,"tile_thickness":8},"grout_total_kg":5.76,"grout_kg_per_m2":0.288},"meta":{"timestamp":"2026-06-04T18:38:17.971Z","request_id":"06287194-7b43-4d0a-8d00-a4be5351d228"},"status":"ok","message":"Grout quantity","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/packs":{"get":{"operationId":"get_v1_packs","tags":["Flooring"],"summary":"Packs needed","description":"","parameters":[{"name":"area","in":"query","required":false,"description":"Floor area (m²)","schema":{"type":"string"},"example":"20"},{"name":"length","in":"query","required":false,"description":"Or room length (m)","schema":{"type":"string"}},{"name":"width","in":"query","required":false,"description":"and room width (m)","schema":{"type":"string"}},{"name":"coverage_per_pack","in":"query","required":true,"description":"Coverage per pack (m²)","schema":{"type":"string"},"example":"2.5"},{"name":"waste_percent","in":"query","required":false,"description":"Waste % (default 8)","schema":{"type":"string"},"example":"8"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Packs = ceil(area·(1+waste) / coverage per pack). Laminate/engineered floors use ~8 % waste; herringbone or diagonal lay more.","inputs":{"area":20,"waste_percent":8,"coverage_per_pack":2.5},"packs_needed":9,"coverage_with_waste_m2":21.6,"total_coverage_supplied_m2":22.5},"meta":{"timestamp":"2026-06-04T18:38:18.097Z","request_id":"24bf36cc-b9ff-4a02-a01e-28bd1e623be5"},"status":"ok","message":"Packs needed","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/tile":{"get":{"operationId":"get_v1_tile","tags":["Flooring"],"summary":"Tiles needed","description":"","parameters":[{"name":"area","in":"query","required":false,"description":"Floor area (m²)","schema":{"type":"string"},"example":"20"},{"name":"length","in":"query","required":false,"description":"Or room length (m)","schema":{"type":"string"}},{"name":"width","in":"query","required":false,"description":"and room width (m)","schema":{"type":"string"}},{"name":"tile_length","in":"query","required":true,"description":"Tile length (cm)","schema":{"type":"string"},"example":"30"},{"name":"tile_width","in":"query","required":true,"description":"Tile width (cm)","schema":{"type":"string"},"example":"30"},{"name":"waste_percent","in":"query","required":false,"description":"Waste % (default 10)","schema":{"type":"string"},"example":"10"},{"name":"tiles_per_box","in":"query","required":false,"description":"Tiles per box for box count","schema":{"type":"string"},"example":"12"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Tiles = ceil(area·(1+waste) / tile area). A 10 % waste allowance covers cuts and breakage.","inputs":{"area":20,"tile_width":30,"tile_length":30,"waste_percent":10},"boxes_needed":21,"tile_area_m2":0.09,"tiles_needed":245,"tiles_per_box":12,"coverage_with_waste_m2":22},"meta":{"timestamp":"2026-06-04T18:38:18.207Z","request_id":"3ab56cea-c6ef-458b-82a3-cacfff1f382c"},"status":"ok","message":"Tiles needed","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"Floor area in m² (or length × width in m). Tile size in cm for /tile, mm for /grout. Estimates — always confirm against the manufacturer's coverage and buy a little extra.","service":"flooring-api","formulae":{"grout":"((A+B)/(A·B))·joint·thickness·density per m²","packs":"ceil(area·(1+waste) / coverage_per_pack)","tiles":"ceil(area·(1+waste) / tile_area)"},"endpoints":{"GET /v1/meta":"This document.","GET /v1/tile":"Number of tiles (and boxes) for a floor area, with a waste allowance.","GET /v1/grout":"Grout quantity in kg for a tiled area from the tile size and joint.","GET /v1/packs":"Packs/boxes of laminate, vinyl or carpet from a per-pack coverage."},"description":"Flooring and tiling material estimator: tiles needed for a floor, packs from a per-pack coverage, and grout quantity."},"meta":{"timestamp":"2026-06-04T18:38:18.312Z","request_id":"ed648ab5-f1aa-4e5a-b2c9-dc2f7545bcca"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":2000,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":500,"monthly_call_quota":20000,"rps_limit":5,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1400,"monthly_call_quota":120000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":4400,"monthly_call_quota":600000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/flooring-api"}