Auch verfügbar in: DE Deutsch

Custom REST

Inhalt

Any JSON endpoint → Mesh widget. With JSONPath mapping.

What the integration can do

  • Tap any HTTP GET endpoint with a JSON response
  • JSONPath for value selection
  • Display as value + label + status

When to use

  • Your data source is not in the Integrations list
  • You want to display something quickly without a PR
  • Custom cloud API (your smart home bridge, crypto ticker, live bus data, …)

Security allowlist

By default only private networks are allowed (RFC 1918: 10.x, 172.16–31.x, 192.168.x). External hosts must be explicitly allowed.

Admin → Integrations → Custom REST:

  • allowPrivateNetworks: true (default)
  • allowedHosts — list of external domains, e.g. ["api.coingecko.com", "data.example.com"]

Wildcard subdomains: *.example.com (all subdomains).

Using the widget

Admin → Content → Widgets → "Custom REST":

  • url — e.g. https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur
  • valuePath — e.g. $.bitcoin.eur
  • labelPath (optional) — e.g. a constant string
  • statusPath (optional) — if a field delivers true/false or online/offline
  • headers (optional) — auth headers etc.
  • refreshSec — default 60

JSONPath examples

JSON response Desired field Path
{"bitcoin": {"eur": 38000}} 38000 $.bitcoin.eur
{"data": [{"value": 42}]} 42 $.data[0].value
{"status": "ok", "items": [...]} "ok" $.status
[{"name": "a"}, {"name": "b"}] "a" $[0].name

Troubleshooting

  • "blocked: host not in allowlist" → add the external domain to allowedHosts
  • JSONPath no match → test with curl <url> | jq <path> (jq uses nearly the same syntax)
  • Auth fails → set headers: { "Authorization": "Bearer ..." }

Community examples

  • Crypto prices: https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur + $.bitcoin.eur
  • GitHub stars: https://api.github.com/repos/ITSWEBER-OFFICIAL/itsweber-mesh + $.stargazers_count
  • Weather detail: https://api.open-meteo.com/v1/forecast?... + $.current.temperature_2m