flv-air
API Reference

Base path: /api/

All endpoints return JSON. Times are server-local timestamps formatted as YYYY-MM-DD HH:mm.

Endpoints
Method Endpoint Description Auth
PUT /api/log Ingest one sensor payload (temperature, humidity, pressure, battery). Basic auth (device credentials)
GET /api/device/<device_name> Device metadata and logging/battery flags. None
GET /api/compare_data?a=<device_a>&b=<device_b>&preset=7d Two-device hourly comparison payload (temperature, humidity, pressure). None
GET /api/latest/all/<hour> Recent temperature/humidity series for all active devices (max 72 hours). None
GET /api/detail_data/<device_name> 24h raw series plus 30-day hourly aggregates for one device. None
GET /api/stats_data/<device_name> Per-device analytics payload used by the stats page (freshness, reliability, correlations, autocorrelation, seasonality). None
GET /api/daily_summary/<device_name> Daily mean/min/max for temperature, humidity, pressure. None
GET /api/past_window_data/<device_name> Windowed hourly stats for comparison views (today, yesterday, 7d, 30d, 365d offsets). None
GET /api/data/day/<device_name>/<YYYY-MM-DD> Raw day-level temperature/humidity/pressure series. None
Examples
1. Device metadata
curl -s "https://flv-air.mit.edu/api/device/logger_1"
{
  "location_short": "Lab 1",
  "location_desc": "Building E40",
  "log_switch": true,
  "battery": false
}
2. Recent data for all devices
curl -s "https://flv-air.mit.edu/api/latest/all/24"
{
  "cached_at": "2026-02-27 11:40",
  "data": [
    {
      "device": "logger_1",
      "device_loc": "Lab 1",
      "humidity": [{"d": "2026-02-27 11:00", "v": 41.2}],
      "temperature": [{"d": "2026-02-27 11:00", "v": 22.6}]
    }
  ]
}
3. Ingest sensor payload
curl -X PUT "https://flv-air.mit.edu/api/log" \
  -H "Authorization: Basic <base64(device:hex_password)>" \
  -H "Content-Type: application/json" \
  -d '{
    "device": "logger_1",
    "temperature": 22.7,
    "humidity": 40.8,
    "pressure": 1012.3,
    "battery voltage": 4.05,
    "battery percentage": 86
  }'
{"status": "success"}
4. Fetch day series from JavaScript
const device = "logger_1";
const date = "2026-02-27";
const response = await fetch(`/api/data/day/${device}/${date}`);
const payload = await response.json();
console.log(payload.temperature, payload.humidity, payload.pressure);