Ingest API and alert webhooks

Push sensor readings into ThermalTrace with the ingest API, and send alerts to Discord, IFTTT, or Home Assistant.

In addition to pulling HTTPS JSON feeds, ThermalTrace accepts push ingest from ESP/Arduino devices and can fan alert notifications out to Discord, SMS, web push, and generic HTTPS webhooks for IFTTT or Home Assistant.

Push ingest

From Dashboard → Devices, create a push device to receive a one-time API key. Send readings with:

POST /api/ingest/<device-key>
Content-Type: application/json

Classic Arduino JSON

{
  "temp": {
    "0": { "c": 18.5, "f": 65.3, "h": 42 },
    "1": { "c": 19.0, "f": 66.2, "h": 40 }
  }
}

Typed multi-sensor payload

{
  "sensors": [
    { "key": "garage_temp", "kind": "temperature", "value": 65.3, "unit": "F" },
    { "key": "garage_rh", "kind": "humidity", "value": 42, "unit": "%" },
    { "key": "door1", "kind": "door", "bool": true },
    { "key": "co2", "kind": "co2", "value": 820, "unit": "ppm" }
  ],
  "battery": 87,
  "rssi": -62
}

Supported kinds: temperature, humidity, co2, door, power, flood, generic. Optional top-level battery / battery_pct and rssi update device health metadata.

Outbound alert webhooks

Pro accounts can enable an outbound webhook in alert settings. Each alert POSTs JSON:

{
  "title": "Garage temperature alert",
  "body": "Probe 1 is 31.2°F …",
  "kind": "threshold",
  "sent_at": "2026-08-25T12:00:00.000Z"
}

kind may be threshold, rate, outage, forecast, rule, digest, or generic. When a webhook secret is set, the request includes X-Signature as a hex HMAC-SHA256 of the raw body. Use that in Home Assistant or IFTTT Webhooks to verify authenticity.

Home Assistant

Cloudflare Workers do not run an MQTT broker. Use the outbound HTTPS webhook (Pro) and an automation, or import the downloadable blueprint:

Download HA blueprint (YAML)

automation:
  - alias: ThermalTrace webhook
    trigger:
      - platform: webhook
        webhook_id: garage_temp_alerts
        allowed_methods:
          - POST
        local_only: false
    action:
      - service: notify.persistent_notification
        data:
          title: "{{ trigger.json.title }}"
          message: "{{ trigger.json.body }}"

Point your ThermalTrace outbound webhook URL at https://<your-ha-host>/api/webhook/garage_temp_alerts (or a Cloudflare Tunnel / Nabu Casa URL). Verify X-Signature in a template condition if you set a secret.

For MQTT, have Home Assistant (or Node-RED) receive the webhook and publish to your broker—that keeps MQTT local while ThermalTrace stays on HTTPS. The blueprint includes an optional MQTT topic input for that path.

Grafana / Prometheus metrics

Pro accounts can create dashboard API keys (Dashboard → Share) and scrape:

GET /api/v1/metrics
Authorization: Bearer gtm_…

Or use a Pro share link with the Metrics scope:

GET /api/share/<token>/readings?format=prometheus

Or ?format=grafana for a simple JSON datapoints array. History share scope returns a 7-day chart on the public page.

Alert channels

  • Email and Discord (all plans)
  • Telegram bot token + chat id (your credentials)
  • Slack Incoming Webhook URL (your credentials)
  • Twilio SMS, browser push, outbound webhook (Pro)

Alerts also support forecast freeze risk, quiet hours, and composite AND rules (for example door open + temperature drop). See Dashboard → Alerts.

Email alerts remain available on all plans. Weekly digests can be enabled independently of freeze/humidity threshold alerts. Opt-in city aggregates appear on /freeze-map.

Related guides