# Radiant Floor API
> 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.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/radiant-api/..."
```

## Pricing
- **Free** (Free) — 470 calls/Mo, 2 req/s
- **Starter** ($6/Mo) — 12,700 calls/Mo, 6 req/s
- **Pro** ($17/Mo) — 80,500 calls/Mo, 15 req/s
- **Mega** ($52/Mo) — 262,000 calls/Mo, 36 req/s

## Endpoints

### Radiant

#### `GET /v1/flow` — Loop flow rate

**Parameters:**
- `heat_load_btu_hr` (query, required, string) — Heat load in BTU/hr Example: `9000`
- `delta_t_f` (query, optional, string) — Supply−return ΔT in °F (default 20) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radiant-api/v1/flow?heat_load_btu_hr=9000&delta_t_f=20"
```

**Response:**
```json
{
    "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
}
```

#### `GET /v1/output` — Floor heat output

**Parameters:**
- `floor_temp_f` (query, required, string) — Floor surface temperature °F Example: `85`
- `room_temp_f` (query, required, string) — Room temperature °F Example: `70`
- `area_sqft` (query, optional, string) — Floor area in ft² (default 1) Example: `300`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radiant-api/v1/output?floor_temp_f=85&room_temp_f=70&area_sqft=300"
```

**Response:**
```json
{
    "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
}
```

#### `GET /v1/tubing` — Tubing and loops

**Parameters:**
- `area_sqft` (query, required, string) — Floor area in ft² Example: `300`
- `spacing_in` (query, required, string) — Tube spacing in inches Example: `9`
- `leader_ft` (query, optional, string) — Leader run per loop in feet (default 0) Example: `0`
- `max_loop_ft` (query, optional, string) — Max loop length in feet (default 300) Example: `300`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radiant-api/v1/tubing?area_sqft=300&spacing_in=9&leader_ft=0&max_loop_ft=300"
```

**Response:**
```json
{
    "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
}
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radiant-api/v1/meta"
```

**Response:**
```json
{
    "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
}
```


---
Marketplace page: https://www.oanor.com/api/radiant-api
OpenAPI spec: https://www.oanor.com/api/radiant-api/openapi.json
