{"openapi":"3.1.0","info":{"title":"Radiant Floor API","version":"1.0.0","description":"Radiant-floor and hydronic heating maths as an API, computed locally and deterministically — the output, tubing and flow numbers an installer or DIYer designs a warm floor with. The output endpoint gives the heat a warm floor puts out: about 2 BTU/hr per square foot for every °F the floor surface is above the room, so an 85 °F floor in a 70 °F room delivers roughly 30 BTU/hr/ft² — about 9,000 BTU/hr over 300 ft², the comfort ceiling since the floor is held at ~85 °F. The tubing endpoint gives the tube and loops for an area at a spacing: field tubing = area × 12 ÷ spacing, so 300 ft² at 9-inch spacing needs 400 feet of tube, split into loops kept under ~300 feet (two 200-foot loops) so the pump can push them. The flow endpoint gives the loop flow rate for a heat load, GPM = load ÷ (500 × ΔT) where 500 is water's constant and ΔT is the supply-to-return drop — 9,000 BTU/hr at a 20 °F ΔT wants 0.9 GPM. Everything is computed locally and deterministically, so it is instant and private. Ideal for radiant-heating and plumbing apps, hydronic-design and PEX-layout tools, HVAC contractor calculators, and DIY-build sites. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 compute endpoints. Estimates — verify with a full heat-loss calc. For building load use an HVAC API; for pipe velocity use a flow-rate API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/radiant-api","description":"oanor gateway"}],"tags":[{"name":"Radiant"},{"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/flow":{"get":{"operationId":"get_v1_flow","tags":["Radiant"],"summary":"Loop flow rate","description":"","parameters":[{"name":"heat_load_btu_hr","in":"query","required":true,"description":"Heat load in BTU/hr","schema":{"type":"string"},"example":"9000"},{"name":"delta_t_f","in":"query","required":false,"description":"Supply−return ΔT in °F (default 20)","schema":{"type":"string"},"example":"20"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Hydronic flow = heat load ÷ (500 × ΔT), where 500 = 60 min × 8.33 lb/gal × 1 BTU/lb·°F for water and ΔT is the supply-to-return drop (often 10–20 °F in radiant). Lower ΔT needs more flow but gives a more even floor; check the loop length keeps the pressure drop within the pump's curve.","inputs":{"delta_t_f":20,"heat_load_btu_hr":9000},"flow_gpm":0.9},"meta":{"timestamp":"2026-06-06T23:53:59.500Z","request_id":"905780e7-0ebc-41a4-a483-06ec2a8770f2"},"status":"ok","message":"Loop flow","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/output":{"get":{"operationId":"get_v1_output","tags":["Radiant"],"summary":"Floor heat output","description":"","parameters":[{"name":"floor_temp_f","in":"query","required":true,"description":"Floor surface temperature °F","schema":{"type":"string"},"example":"85"},{"name":"room_temp_f","in":"query","required":true,"description":"Room temperature °F","schema":{"type":"string"},"example":"70"},{"name":"area_sqft","in":"query","required":false,"description":"Floor area in ft² (default 1)","schema":{"type":"string"},"example":"300"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"A radiant floor gives off roughly 2 BTU/hr per square foot for every °F the floor surface is above the room. Comfort caps the floor at about 85 °F, so the practical ceiling is ~30 BTU/hr/ft² in a 70 °F room — enough for a well-insulated house but not a draughty one, which may need supplemental heat.","inputs":{"area_sqft":300,"room_temp_f":70,"floor_temp_f":85},"output_btu_hr_sqft":30,"total_output_btu_hr":9000},"meta":{"timestamp":"2026-06-06T23:53:59.594Z","request_id":"337e36f7-0683-4236-8500-2bad4eb3c97a"},"status":"ok","message":"Floor output","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/tubing":{"get":{"operationId":"get_v1_tubing","tags":["Radiant"],"summary":"Tubing and loops","description":"","parameters":[{"name":"area_sqft","in":"query","required":true,"description":"Floor area in ft²","schema":{"type":"string"},"example":"300"},{"name":"spacing_in","in":"query","required":true,"description":"Tube spacing in inches","schema":{"type":"string"},"example":"9"},{"name":"leader_ft","in":"query","required":false,"description":"Leader run per loop in feet (default 0)","schema":{"type":"string"},"example":"0"},{"name":"max_loop_ft","in":"query","required":false,"description":"Max loop length in feet (default 300)","schema":{"type":"string"},"example":"300"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Field tubing = area × 12 ÷ spacing (inches) — tighter spacing (6 in vs 12) puts down more tube for a warmer, more even floor and edges. Keep each loop under ~300 ft for 1/2-inch PEX so the pump can push it, and balance the loops to similar lengths off the manifold.","loops":2,"inputs":{"area_sqft":300,"leader_ft":0,"spacing_in":9,"max_loop_ft":300},"field_tubing_ft":400,"total_tubing_ft":400,"length_per_loop_ft":200},"meta":{"timestamp":"2026-06-06T23:53:59.698Z","request_id":"355e9a03-3ae0-40ae-98d0-677d218c239f"},"status":"ok","message":"Tubing & loops","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":"US units. Output ≈ 2 BTU/hr/ft²/°F (floor−room), floor ≤ 85 °F; tubing = area×12/spacing, loops ≤ 300 ft; flow GPM = load/(500·ΔT). Estimates — verify with a full heat-loss calc. For the building load use an HVAC API; for pipe velocity use a flow-rate API.","service":"radiant-api","endpoints":{"GET /v1/flow":"Loop flow rate (GPM) for a heat load at a supply/return ΔT.","GET /v1/meta":"This document.","GET /v1/output":"Heat output of a warm floor from its surface temperature.","GET /v1/tubing":"Tubing length and number of loops for an area at a spacing."},"description":"Radiant-floor / hydronic heating maths: floor heat output, tubing and loops for an area, and the loop flow rate for a heat load."},"meta":{"timestamp":"2026-06-06T23:53:59.783Z","request_id":"abf0503f-e887-46a5-9a72-934efdb89ea2"},"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":470,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":565,"monthly_call_quota":12700,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1740,"monthly_call_quota":80500,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5220,"monthly_call_quota":262000,"rps_limit":36,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/radiant-api"}