{"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"},"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"},"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"},"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"},"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"}