APIs Device to Cloud Lorawan Devices Onboard devices

LoRaWAN devices and gateways are represented as node instances in oneM2M. You can onboard them by sending a device provisioning request to the Device Management Orchestrator.

Note: OTAA LoRaWAN 1.0 and OTAA 1.1 are supported. ABP is not supported.

Prerequisites

Before onboarding devices or gateways, the following must be in place:

  1. D2C Tenant prepared - your tenant is registered and the LORIOT IPE AE exists in DMO (see Get started ).
  2. LORIOT Account configured in D2C - a LORIOT Account FlexContainer exists in DMO with a valid LORIOT server URL and access token. See the account configuration guide in this section.
  3. LORIOT Application FlexContainer (for devices) or Network FlexContainer (for gateways) created in DMO under your account. See the application/network configuration guide in this section.

Onboard a LoRaWAN Device

Send a provisioning request with d2c-devicetype:loriot-device and the required loriot- labels.

Device parameters are passed as lbl entries:

  • d2c- prefixed labels are consumed by the D2C adapter (routing, destination, propagate flag).
  • loriot- prefixed labels are forwarded as-is to the LORIOT network server API. Use the same field names as in the LORIOT device creation API , prefixed with loriot-.
  • Request
  • Response
POST {{API_URL}}/device-provisioning/request HTTP/2
Accept: application/json
Content-Type: application/json;ty=28
X-M2M-Origin: CmyApplication
X-M2M-RI: 123
Authorization: Bearer {{ACCESS_TOKEN}}

{
    "dtiot:noPRt": {
        "cnd": "com.telekom.iot.orchestrator.nodeProvisioningRequest",
        "rn": "myLoriotProvisioningRequest001",
        "opern": 1,
        "reqLt": [
            {
                "ni": "urn:dev:deveui:647FDA000000490C",
                "noRNe": "647FDA000000490C",
                "profe": "LORIOT-LoRaWAN",
                "lbl": [
                    "d2c-devicetype:loriot-device",
                    "d2c-loriot-destination:myLoriotAccount/myLoriotApplication",
                    "loriot-deveui:647FDA000000490C",
                    "loriot-appeui:647FDA8010000100",
                    "loriot-appkey:6BC0C4B4F96D97583E42455DCF83D98E",
                    "loriot-title:myDeviceName",
                    "loriot-description:MyDeviceDescription"
                ],
                "ndvi": {
                    "rn": "device-info",
                    "mgd": 1007,
                    "man": "myManufacturer",
                    "dty": "myDeviceType",
                    "mod": "myModel",
                    "dlb": "d2c:1.0",
                    "dc": "a comment"
                }
            }
        ]
    }
}
HTTP/2 201 Created
date: Fri, 22 May 2026 08:55:26 GMT
content-type: application/json; charset=utf-8
request-context: appId=cid-v1:
x-service-responder: device-management-orchestrator
x-m2m-ri: 123
x-m2m-rvi: 4
x-m2m-ot: 2026-05-22T08:55:26.304Z
x-m2m-rsc: 2001
x-azure-ref: 20260522T085526Z-157794674c588bv2hC1FRAqubc0000000yng00000000nr1d
x-cache: CONFIG_NOCACHE
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 0
referrer-policy: no-referrer
x-tardis-traceid: e02c1daad6529714d14a233132313436
vary: Origin
x-kong-upstream-latency: 138
x-kong-proxy-latency: 2
x-kong-request-id: c124506370a5fa4ad225a547eea42631
strict-transport-security: max-age=31536000; includeSubDomains
content-length: 994
x-http2-stream-id: 3

{
  "dtiot:noPRt": {
    "cnd": "com.telekom.iot.orchestrator.nodeProvisioningRequest",
    "rn": "myLoriotProvisioningRequest001",
    "opern": 1,
    "reqLt": [
      {
        "ni": "urn:dev:deveui:647FDA000000490C",
        "noRNe": "647FDA000000490C",
        "profe": "LORIOT-LoRaWAN",
        "lbl": [
            "d2c-devicetype:loriot-device",
            "d2c-loriot-destination:myLoriotAccount/myLoriotApplication",
            "loriot-deveui:647FDA000000490C",
            "loriot-appeui:647FDA8010000100",
            "loriot-appkey:6BC0C4B4F96D97583E42455DCF83D98E",
            "loriot-title:myDeviceName",
            "loriot-description:myDeviceDescription"
        ],
        "ndvi": {
            "rn": "device-info",
            "mgd": 1007,
            "man": "myManufacturer",
            "dty": "myDeviceType",
            "mod": "myModel",
            "dlb": "d2c:1.0",
            "dc": "a comment"
        }
      }
    ],
    "ty": 28,
    "cr": "CmyApplication",
    "st": 0,
    "ri": "67...2a",
    "pi": "671...3f",
    "ct": "20260505T091747,984000",
    "lt": "20260505T091747,984000"
  }
}

Device label reference

The loriot- labels map directly to the fields of the LORIOT device creation API . Any field supported by LORIOT can be passed as a loriot- label.

LabelExampleDescription
d2c-devicetypeloriot-deviceMust be loriot-device
d2c-loriot-destinationmyLoriotAccount/myLoriotApplicationResource name path: {accountRn}/{applicationRn}
d2c-propagatefalsefalse → skip LORIOT call (device not created in LORIOT). Default: true
loriot-deveui647FDA000000490CDevice EUI (8 bytes hex)
loriot-appeui647FDA8010000100Application EUI / JoinEUI (8 bytes hex)
loriot-appkey6BC0C4B4F96D97583E42455DCF83D98EApplication key (16 bytes hex)
loriot-titlemyDeviceNameHuman-readable device name in LORIOT
loriot-descriptionmyDeviceDescriptionFree-text description
loriot-deviceTemplateIdnullLORIOT device template reference

Label encoding rule:
Colons : in label values must be replaced with - (e.g. loriot-MAC:00-08-00-4A-C7-46).


Onboard a LoRaWAN Gateway

Send a provisioning request with d2c-devicetype:loriot-gateway and the required loriot- labels.

  • Request
  • Response
POST {{API_URL}}/device-provisioning/request HTTP/2
Accept: application/json
Content-Type: application/json;ty=28
X-M2M-Origin: CmyApplication
X-M2M-RI: 123
Authorization: Bearer {{ACCESS_TOKEN}}

{
    "dtiot:noPRt": {
        "cnd": "com.telekom.iot.orchestrator.nodeProvisioningRequest",
        "rn": "myLoriotProvisioningRequest002",
        "opern": 1,
        "reqLt": [
            {
                "ni": "urn:dev:gweui:0080000000017B1B",
                "noRNe": "0080000000017B1B",
                "profe": "LORIOT-LoRaWAN",
                "lbl": [
                    "d2c-devicetype:loriot-gateway",
                    "d2c-loriot-destination:myLoriotAccount/myLoriotNetwork",
                    "loriot-MAC:00-08-00-4A-C7-46",
                    "loriot-base:pktfwd",
                    "loriot-bus:UDP",
                    "loriot-card:",
                    "loriot-concentrator:pktfwd",
                    "loriot-model:semtech",
                    "loriot-location.lat:49.86552435916023",
                    "loriot-location.lon:8.624739290340981",
                    "loriot-customEUI:0080000000017B1B"
                ],
                "ndvi": {
                    "rn": "device-info",
                    "mgd": 1007,
                    "man": "Semtech",
                    "dty": "LoRaWAN Gateway",
                    "mod": "SX1301",
                    "dc": "outdoor gateway"
                }
            }
        ]
    }
}
HTTP/2 201 Created
date: Fri, 22 May 2026 08:55:26 GMT
content-type: application/json; charset=utf-8
request-context: appId=cid-v1:
x-service-responder: device-management-orchestrator
x-m2m-ri: 123
x-m2m-rvi: 4
x-m2m-ot: 2026-05-22T08:55:26.304Z
x-m2m-rsc: 2001
x-azure-ref: 20260522T085526Z-157794674c588bv2hC1FRAqubc0000000yng00000000nr1d
x-cache: CONFIG_NOCACHE
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 0
referrer-policy: no-referrer
x-tardis-traceid: e02c1daad6529714d14a233132313436
vary: Origin
x-kong-upstream-latency: 138
x-kong-proxy-latency: 2
x-kong-request-id: c124506370a5fa4ad225a547eea42631
strict-transport-security: max-age=31536000; includeSubDomains
content-length: 994
x-http2-stream-id: 3

{
  "dtiot:noPRt": {
    "cnd": "com.telekom.iot.orchestrator.nodeProvisioningRequest",
    "rn": "myLoriotProvisioningRequest002",
    "opern": 1,
    "reqLt": [
      {
        "ni": "urn:dev:gweui:0080000000017B1B",
        "noRNe": "0080000000017B1B",
        "profe": "LORIOT-LoRaWAN",
        "lbl": [
            "d2c-devicetype:loriot-gateway",
            "d2c-loriot-destination:myLoriotAccount/myLoriotNetwork",
            "loriot-MAC:00-08-00-4A-C7-46",
            "loriot-base:pktfwd",
            "loriot-bus:UDP",
            "loriot-card:",
            "loriot-concentrator:pktfwd",
            "loriot-model:semtech",
            "loriot-location.lat:49.86552435916023",
            "loriot-location.lon:8.624739290340981",
            "loriot-customEUI:0080000000017B1B"
        ],
        "ndvi": {
            "rn": "device-info",
            "mgd": 1007,
            "man": "Semtech",
            "dty": "LoRaWAN Gateway",
            "mod": "SX1301",
            "dc": "outdoor gateway"
        }
      }
    ],
    "ty": 28,
    "cr": "CmyApplication",
    "st": 0,
    "ri": "67...2b",
    "pi": "671...3f",
    "ct": "20260505T091747,984000",
    "lt": "20260505T091747,984000"
  }
}

Gateway label reference

The loriot- labels map directly to the fields of the LORIOT gateway creation API . Any field supported by LORIOT can be passed as a loriot- label.

LabelMandatoryExampleDescription
d2c-devicetypeyesloriot-gatewayMust be loriot-gateway
d2c-loriot-destinationyesmyLoriotAccount/myLoriotNetworkResource name path: {accountRn}/{networkRn}
d2c-propagatenofalsefalse → skip LORIOT call (gateway not created in LORIOT). Default: true
loriot-MACyes00-08-00-4A-C7-46Gateway MAC address (6 bytes, dashes instead of colons)
loriot-location.latyes49.86552435916023Latitude (dot as decimal separator)
loriot-location.lonyes8.624739290340981Longitude (dot as decimal separator)
loriot-basenopktfwdPacket forwarder type
loriot-busnoUDPBus type
loriot-cardnoHardware card identifier
loriot-concentratornopktfwdConcentrator type
loriot-modelnosemtechGateway hardware model
loriot-customEUIno0080000000017B1BCustom EUI override (8 bytes hex)

Label encoding rule:
Colons : in label values must be replaced with - (e.g. loriot-MAC:00-08-00-4A-C7-46).


Delete a LoRaWAN Device or Gateway

A device or gateway can be deleted by deleting its node . The system will clean up all related objects and, depending on the d2c-propagate label, also remove the device or gateway from the LORIOT network server.

Propagation behaviour

When deleting a device or gateway, the system checks the d2c-propagate label that was set during onboarding:

d2c-propagate valueBehaviour
true (default)The device/gateway is deleted from both DMO and the LORIOT network server.
falseThe device/gateway is deleted from DMO only. It is not removed from the LORIOT network server.

Tip: If the device or gateway was already removed from LORIOT (e.g. manually), the deletion is treated as idempotent — no error is returned.

Delete a device

  • Request
  • Response
DELETE {{API_URL}}/myLoriot-Device01 HTTP/2
Accept: application/json
Content-Type: application/json
X-M2M-Origin: CmyApplication
X-M2M-RI: 123
Authorization: Bearer {{ACCESS_TOKEN}}
HTTP/1.1 200 OK
Date: Thu, 21 Nov 2025 09:44:23 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1 ; mode=block
Referrer-Policy: no-referrer
vary: Origin

Delete a gateway

  • Request
  • Response
DELETE {{API_URL}}/myLoriot-Gateway01 HTTP/2
Accept: application/json
Content-Type: application/json
X-M2M-Origin: CmyApplication
X-M2M-RI: 123
Authorization: Bearer {{ACCESS_TOKEN}}
HTTP/1.1 200 OK
Date: Thu, 21 Nov 2025 09:44:23 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1 ; mode=block
Referrer-Policy: no-referrer
vary: Origin

Device provisioning response

The system processes your request asynchronously. The result is available in the /device-provisioning/response container:

  • Request
  • Response
GET {{API_URL}}/device-provisioning/response/{{responseToRequest-67...56}} HTTP/2
Accept: application/json
Content-Type: application/json
X-M2M-Origin: CmyApplication
X-M2M-RI: 123
Authorization: Bearer {{ACCESS_TOKEN}}
HTTP/1.1 200 OK
date: Fri, 22 May 2026 08:55:26 GMT
content-type: application/json; charset=utf-8
request-context: appId=cid-v1:
x-service-responder: device-management-orchestrator
x-m2m-ri: 123
x-m2m-rvi: 4
x-m2m-ot: 2026-05-22T08:55:26.304Z
x-m2m-rsc: 2001
x-azure-ref: 20260522T085526Z-157794674c588bv2hC1FRAqubc0000000yng00000000nr1d
x-cache: CONFIG_NOCACHE
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: 0
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 0
referrer-policy: no-referrer
x-tardis-traceid: e02c1daad6529714d14a233132313436
vary: Origin
x-kong-upstream-latency: 138
x-kong-proxy-latency: 2
x-kong-request-id: c124506370a5fa4ad225a547eea42631
strict-transport-security: max-age=31536000; includeSubDomains
content-length: 994
x-http2-stream-id: 3

{
  "dtiot:prRRe": {
    "cnd": "com.telekom.iot.orchestrator.provisioningRequestResponse",
    "rn": "responseToRequest-67...56",
    "geEMe": "Total to be provisioned: 1; Successfully processed: 1; Errors: 0",
    "reqRD": "67...56",
    "resSs": 1,
    "ty": 28,
    "cr": "CmyApplication",
    "ri": "67...ba7",
    "pi": "67...f32",
    "ct": "20260505T091748,000000",
    "lt": "20260505T091748,000000"
  }
}

Parameters:

  • resourceName: use the prefix responseToRequest- followed by the ri (resource ID) from the provisioning request response (e.g. responseToRequest-67...2a).
  • responseStatus: 1 = success, 2 = error (see generalErrorMessage / individualErrorMessages).

Error cases

Status CodeConditionError Message
400nodeResourceName is missingnodeResourceName is missing
400Unknown d2c-devicetype label valueUnknown device type: ...
400d2c-devicetype label is missingmissing d2c-devicetype label
422d2c-loriot-destination label missingMissing destination configuration: d2c-loriot-destination label not found
422d2c-loriot-destination format invalid (device)Invalid destination format: expected format is accountResourceName/applicationResourceName
422d2c-loriot-destination format invalid (gateway)Invalid destination format: expected format is accountResourceName/networkResourceName
422Network/application not configuredNetwork not configured in adapter for resource: {resourceName}
422Account credentials not configuredAccount not configured in adapter for resource: {resourceName}
422LORIOT rejects the deviceDevice registration failed: LORIOT returned HTTP {statusCode}
422LORIOT rejects the gatewayGateway registration failed: LORIOT returned HTTP {statusCode}

Next step

Start sending and receiving IoT data from your LoRaWAN device.