Skip to main content
Technical Preview

Overview

Golioth is an IoT device management cloud for microcontroller fleets (Zephyr, nRF Connect SDK, ESP-IDF and ModusToolbox through the Golioth Firmware SDK). Devices talk to Golioth over CoAP, and the Management API exposes the same project to applications. These connectors let the Coreflux broker read device state and time series from Golioth, push desired state, settings and RPC calls back to devices, and drive OTA updates from MQTT.
  • GoliothManagementApi (GoliothRestApi.lot) is a client connector on https://api.golioth.io with 45 events.
  • GoliothWebhookReceiver (cloud-iot_golioth_webhook.lot, opt-in, server mode) receives data that a Golioth Pipeline sends with the webhook destination, so device stream data reaches MQTT without polling.
The events follow the Management API OpenAPI definition.

Authentication

Golioth API keys are project scoped and can run Management API operations in that project. Keep the key in a Hub secret, map it in with GET SECRET, and never publish it on a topic other clients can read.
  1. In the Golioth console, open your project and create an API key under API Keys (or run goliothctl apikeys create).
  2. Store it as the secret GOLIOTH_API_KEY. Every event takes "api_key" in its MQTT payload and sends it in the x-api-key header.
  3. Every event also takes "project_id". The OTA cohort, package, deployment, location and pipeline events use organization-scoped paths and take "organization_id" too.
A missing or wrong key returns 401 with {"code": 7, "message": "failed to check permissions to access/modify this resource: user not allowed to call method"}.

Payload conventions

  • Path ids (device_id, tag_id, setting_id, blueprint_id, artifact_id, release_id, cohort_id, deployment_id, pipeline_id) go at the top level of the MQTT payload.
  • LightDB paths go in "path" without a leading slash, for example env/temp.
  • Events marked ?{query} take the query string already URL-encoded, for example page=0&perPage=100. Send "query": "" when there is nothing to add.
  • Request bodies come from "body" and are sent as JSON.

Devices

LightDB State, LightDB Stream and RPC

LightDB State is the device twin: devices observe paths such as config/temp and react when you write them. LightDB Stream holds the time series that devices send to /.s/ paths.

Settings, tags and blueprints

OTA updates

Golioth has two OTA models in the same API. Artifacts and releases target devices by tag and blueprint. Packages, cohorts and deployments group devices into cohorts, and a new deployment starts updating every device in the cohort right away.

Logs, locations and pipelines

Webhook receiver

Deploy cloud-iot_golioth_webhook.lot only if you want Golioth to push data to the broker. It opens HTTP port 9003. Put a reverse proxy or tunnel with a public TLS certificate in front of it and have it check a shared header, because the connector itself doesn’t. Golioth delivers data through Pipelines, which replace the older Output Streams. Create a pipeline in the console (or with CreatePipeline, base64-encoding the YAML) that sends data to the webhook destination:
Store COREFLUX_WEBHOOK_SECRET as a pipeline secret in the Golioth project. The inject-metadata step puts device_id, project_id and timestamp in the body, because the receiver only forwards the body to MQTT. Deliveries are published on cloud-iot/golioth/webhook-stream/received. Other pipelines can post to /golioth/webhook/events, which publishes on cloud-iot/golioth/webhook-event/received. Webhook deliveries count as Golioth usage after the free tier.

Examples

Write alert limits that the device observes at config/temp:
Get the 15-minute average temperature of one device:
Call a firmware RPC:
Deploy firmware to a cohort:
LoT actions that wire these events to plant topics:

Writes

15 events change data in Golioth or on devices, and each one is marked Write above. CreateDeployment, UpdateRelease with "rollout": true, SetStateByTag and CallDeviceRpc act on devices in the field, so test them on a lab cohort or tag first. No DELETE operation is packaged.

Not packaged

Device credentials (PSKs and certificates), provisioning, API keys, users and access policies, PKI, pipeline secrets, billing and usage, and every DELETE are left out of this template.

Status

Technical preview, and blocked on a live test. The events were checked against Golioth’s published Management API OpenAPI, and all 45 events reach the real api.golioth.io host and are rejected without a valid API key as expected. An authenticated read and write with a real Golioth project and API key is still pending.
Last modified on October 21, 2026