{"service":"Sensor Summary API","description":"A temperature-reading intake and summary service for other programs, with no screens of its own.","access":"open — no key, no accounts, no sign-in. Any caller that knows the address may send readings and read summaries.","notes":["Two readings sent for the same sensor at the same instant are both kept — they are never merged or deduplicated.","A summary covers every reading a sensor has ever received, not a recent window.","An unknown sensor name is not an error: the first reading for it starts tracking that sensor."],"endpoints":{"sendReading":{"method":"POST","path":"/ReadingIntakeApi/","description":"Send one reading.","body":{"sensor":"non-empty string","celsius":"finite number — Celsius only, negative and fractional allowed","at":"optional ISO-8601 string; defaults to the moment of arrival when absent"},"responses":{"201":"the reading was stored and the sensor's summary now reflects it","400":"{ code, field, message } naming the missing or invalid field; nothing is stored"}},"getSummary":{"method":"GET","path":"/SensorSummaryApi/:sensor","description":"That sensor's rolled-up totals: count, lowest, highest and average Celsius, and the span of time they cover.","responses":{"200":"{ sensor, count, min, max, average, firstAt, lastAt } — a sensor that has never sent a reading answers count 0 with min, max and average null; never a 404"}},"buildStamp":{"method":"GET","path":"/build","description":"The sha this deploy was built from."}}}