Send temperature readings to ColdLatch over HTTPS
Short answer: give each logger a key in ColdLatch, then POST its readings as JSON to /api/v1/ingest/readings with that key in the Authorization header. A reading sent this way is stored and checked exactly like one that arrives over MQTT.
ColdLatch takes readings two ways. Loggers that can publish MQTT do that. Everything else, such as a gateway that collects from wireless probes, a building management system, a vendor's cloud that can forward data, or a script reading an export, can send over HTTPS.
Get a key for the logger
- In ColdLatch, an administrator opens Settings, then Devices, and registers the logger with its serial number if it is not there yet.
- On the logger's row, press HTTPS key, then Create a key.
- Copy the key at once. ColdLatch keeps only a fingerprint of it and cannot show it again. If it is lost, press Replace the key; the old one stops working immediately.
One key belongs to one logger. A gateway that relays for ten probes holds ten keys and sends each probe's readings with its own.
The request
POST https://coldlatch.com/api/v1/ingest/readings
Authorization: Bearer clk_your-key
Content-Type: application/json
{
"recordedAt": "2026-10-05T07:30:00.000Z",
"temperatureC": 4.8,
"humidity": 61.5,
"batteryPct": 82,
"signalDbm": -71
}
| Field | Meaning |
|---|---|
recordedAt | Required. When the logger took the reading, in UTC, ISO 8601. Not more than 5 minutes in the future and not more than 30 days old. |
temperatureC | Required. Degrees Celsius, between -100 and 100. |
humidity | Optional. Relative humidity, 0 to 100. |
batteryPct | Optional. Battery level, 0 to 100. Shown on the logger, in red at 20 or below. |
signalDbm | Optional. Signal strength in dBm, between -150 and 0. |
Several readings at once
Send an array of up to 500 readings in one request. This is how a logger that was out of coverage uploads what it kept, and how a gateway sends a minute's worth in one go. ColdLatch puts them in time order itself.
[
{ "recordedAt": "2026-10-05T07:30:00.000Z", "temperatureC": 4.8 },
{ "recordedAt": "2026-10-05T07:35:00.000Z", "temperatureC": 5.1 }
]
The answer
{ "stored": 2, "duplicates": 0, "rejected": [] }
| Answer | What it means |
|---|---|
201 with stored | That many readings were new and are saved. |
201 with duplicates | That many were already there (same logger, same time). Sending a reading again is safe: retry freely. |
201 with rejected | Each entry names the position in your array and the reason, for example a temperature out of bounds. The others were still saved. |
401 | The key is missing, wrong or has been replaced. |
400 | Not a reading or a list of readings, an empty list, or more than 500. |
429 | More than 600 requests in a minute from one address. Send batches instead. |
- Keep readings until you get a 201. If the network is down, keep them and send them later in a batch; the time you send is not the time they are recorded under.
- A late reading is kept but does not raise an alert by itself. A reading older than the newest one ColdLatch has already checked is stored and shown on the chart, and is not checked against the limits again.
- Silence still counts. If nothing arrives for longer than the profile allows, ColdLatch raises a "device offline" alert, whichever way the logger normally reports.
Also: How to block a batch in SAP S/4HANA after a temperature excursion