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);