Weather — entry 017 of 31
openSenseMap
openSenseMap is the open, non-profit citizen-science platform behind the University of Munster's senseBox project, serving live and historical readings from thousands of crowdsourced environmental sensor stations worldwide, covering not just temperature/humidity but also particulate matter, noise and other phenomena. Reading data is fully open and keyless (accounts are only needed to register or post data from your own senseBox), and the full historical archive is separately mirrored on an archive subdomain.
openSenseMap serves live and historical readings from crowdsourced senseBox environmental stations; fetch a single station by ID for its full sensor list with live values, or query the `/boxes` collection scoped by a bounding box.
GreatAPIs Score
Auth quickstart
- No API key required for reads — requests are public and keyless (an account is only needed to register or post data from your own senseBox).
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Live readings for a single senseBox
GEThttps://api.opensensemap.org/boxes/5c4208271b7ca800198cbe90
{
"_id": "5c4208271b7ca800198cbe90",
"name": "Geigenbaumeister Kehnen #1",
"exposure": "indoor",
"model": "homeV2Wifi",
"currentLocation": {
"type": "Point",
"coordinates": [7.217819, 51.470113],
"timestamp": "2019-01-18T17:12:01.018Z"
},
"sensors": [
{
"title": "Temperatur",
"unit": "\u00b0C",
"sensorType": "HDC1080",
"_id": "5c4208271b7ca800198cbe92",
"lastMeasurement": { "createdAt": "2026-07-26T03:13:09.564Z", "value": "22.66" }
},
{
"title": "rel. Luftfeuchte",
"unit": "%",
"sensorType": "HDC1080",
"_id": "5c4208271b7ca800198cbe91",
"lastMeasurement": { "createdAt": "2026-07-26T03:13:09.564Z", "value": "63.43" }
}
],
"lastMeasurementAt": "2026-07-26T03:13:09.564Z",
"weblink": "http://www.geigenbaumeisterkehnen.de/",
"description": "Zur \u00dcberwachung der Feuchtigkeit in der Werkstatt"
}Developer reference
https://api.opensensemap.orgGotchas & limits
- `limit` on the `/boxes` list endpoint is effectively ignored: a live `GET /boxes?limit=1` streamed past 10MB and still hadn't finished after 15 seconds — scope list queries with `bbox=<west,south,east,north>` instead of relying on `limit` to keep the response small
- The `/boxes` list endpoint returns each sensor's `lastMeasurement` as a bare measurement-ID string, not a value — fetching the same box individually via `/boxes/:boxId` (as above) returns the full `{ createdAt, value }` object instead, confirmed live for the same station
- `/stats` returns global counts as a bare 3-element array with no keys — `[boxCount, measurementCount, measurementsInLastMinute]` — the third element is a live throughput figure, not a sensor total, and the field order is documented only in the API docs, never in the response itself
- Sensor `title`/`unit` strings are free text entered by whoever registered the senseBox, not a controlled vocabulary — German labels like "Temperatur" and "rel. Luftfeuchte" turn up alongside English ones on live stations, so don't match on title text across boxes