Skip to content

Connecting devices

Getting a device onto CORE-M is a four-step path. Every device — a battery sensor on HTTP, a fleet of meters behind an MQTT gateway, an SNMP switch — follows the same shape:

  1. Provision the device. Create its identity in your tenant. Do this in the field with a provisioning key, one at a time from the dashboard, or in batches with a bulk CSV import.

  2. Get credentials. Provisioning returns a device identity and a credential — typically an API key, but a device can also present a PSK or an X.509 client certificate. See Device identity & credentials.

  3. Pick a protocol. Choose the transport that fits the hardware and network. CORE-M ingests over HTTP, MQTT, CoAP/DTLS, LwM2M, and SNMP. The decision table below helps you pick.

  4. Send telemetry. Authenticate with the credential from step 2 and start publishing data points. Each accepted point flows through validation, dual storage, and blockchain anchoring.

All five transports terminate at the device-link service and converge on the same ingest pipeline, so your choice of protocol does not change how telemetry is validated, stored, or anchored. Pick based on the device, the network, and how much you control the firmware.

ProtocolBest forTransportAuthPayload
HTTPSimple devices, scripts, gateways, anything that can make a requestTCP / TLSAPI key (Authorization: Bearer or X-API-Key)JSON
MQTTAlways-on devices, fleets, low-overhead pub/sub, bidirectional commandsTCP / TLSAPI key as MQTT password, or X.509 client cert (mTLS)JSON
CoAPConstrained/low-power devices, lossy or low-bandwidth networksUDP / DTLSPSK (DTLS) or X.509 client certJSON / CBOR
LwM2MManaged device fleets needing standardized objects and remote managementUDP / DTLS (over CoAP)PSK or X.509 client certLwM2M objects / TLV / CBOR
SNMPExisting network gear (switches, routers, UPS, PDUs) you cannot reflashUDPSNMP community / USM credentialsSNMP OIDs (polled)
flowchart TD
  start([New device to connect]) --> ctrl{Can you run<br/>custom firmware?}
  ctrl -- No --> snmp["Use **SNMP**<br/>(poll existing network gear)"]
  ctrl -- Yes --> power{Battery / low-power<br/>or lossy network?}
  power -- Yes --> managed{Need standardized<br/>remote management?}
  managed -- Yes --> lwm2m["Use **LwM2M**<br/>(over CoAP/DTLS)"]
  managed -- No --> coap["Use **CoAP/DTLS**<br/>(PSK or client cert)"]
  power -- No --> conn{Always-on connection<br/>and/or server commands?}
  conn -- Yes --> mqtt["Use **MQTT**<br/>(API key or mTLS)"]
  conn -- No --> http["Use **HTTP**<br/>(API key)"]