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:
- D2C Tenant prepared - your tenant is registered and the LORIOT IPE AE exists in DMO (see Get started ).
- 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.
- 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 withloriot-.
- 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": "some:label",
"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": "some:label",
"dc": "a comment"
}
}
],
"ty": 28,
"cr": "CmyApplication",
"st": 0,
"ri": "67...2a",
"pi": "671...3f",
"ct": "20260505T091747,984000",
"lt": "20260505T091747,984000"
}
}
Parameters:
- In
Content-Typeheader:ty=28means “flexContainer” cnd(mandatory) - containerDefinition- Contains an identifier reference (URI) to the “
flexContainer” schema definition which shall be used by the CSE to validate the syntax of the FlexContainer resource
- Contains an identifier reference (URI) to the “
operation(mandatory): 1=provisionrequestList: Array of “node” instances withnodeID(mandatory): The value shall be a valid nodeID string in one of the following formats:urn:dev:deveui:<eui>orurn:x-dtiot:dev:sn:<string with the serial number from device>nodeResourceName(optional): This is the “Device ID” which e.g. is used in Device Groups to identify the device.profile(mandatory): Defines the IoT platform where the device is onboarded:LORIOT-LoRaWANfor LoRaWAN Devices.labels: An array of strings. The label"d2c:1.0"is mandatory for “Device to Cloud” IoT devices. Example:["color:red","manufacturer:ACME","d2c:1.0"]nodeDeviceInfo(optional): device-related information DeviceInfo object . If DeviceInfo object included next fields could be provided:mgmtDefinition(mandatory): the value must be 1007 for DeviceInfo objectmanufacturer(mandatory): device manufacturerdeviceType(mandatory): device typemodel(mandatory): device modeldescription(optional): device descriptiondeviceLabel(mandatory): a label of the devicelocation(optional): geographic location of the device in format “geo:latitude,longitude”, e.g. “geo:48.861045,2.335765”
nodeDeviceGroups(optional) Represents an array containing a list of groups where devices to be added to the groupsX-M2M-RI: Represents a unique request ID. Please don’t use123!! If you have a support request you can help us by providing us the related request ID.
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.
| Label | Example | Description |
|---|---|---|
d2c-devicetype | loriot-device | Must be loriot-device |
d2c-loriot-destination | myLoriotAccount/myLoriotApplication | Resource name path: {accountRn}/{applicationRn} |
d2c-propagate | false | false → skip LORIOT call (device not created in LORIOT). Default: true |
loriot-deveui | 647FDA000000490C | Device EUI (8 bytes hex) |
loriot-appeui | 647FDA8010000100 | Application EUI / JoinEUI (8 bytes hex) |
loriot-appkey | 6BC0C4B4F96D97583E42455DCF83D98E | Application key (16 bytes hex) |
loriot-title | myDeviceName | Human-readable device name in LORIOT |
loriot-description | myDeviceDescription | Free-text description |
loriot-deviceTemplateId | null | LORIOT device template reference |
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:0",
"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",
"dlb": "some:label",
"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:0",
"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",
"dlb": "some:label",
"mod": "SX1301",
"dc": "outdoor gateway"
}
}
],
"ty": 28,
"cr": "CmyApplication",
"st": 0,
"ri": "67...2b",
"pi": "671...3f",
"ct": "20260505T091747,984000",
"lt": "20260505T091747,984000"
}
}
Parameters:
- In
Content-Typeheader:ty=28means “flexContainer” cnd(mandatory) - containerDefinition- Contains an identifier reference (URI) to the “
flexContainer” schema definition which shall be used by the CSE to validate the syntax of the FlexContainer resource
- Contains an identifier reference (URI) to the “
operation(mandatory): 1=provisionrequestList: Array of “node” instances withnodeID(mandatory): The value shall be a valid nodeID string in one of the following formats:urn:dev:gweui:<eui>orurn:x-dtiot:dev:sn:<string with the serial number from gateway>nodeResourceName(optional): This is the “Gateway ID”profile(mandatory): Defines the IoT platform where the gateway is onboarded:LORIOT-LoRaWANfor LoRaWAN Gateways.labels: An array of strings. The label"d2c:1.0"is mandatory for “Device to Cloud”. Example:["color:red","manufacturer:ACME","d2c:1.0"]nodeDeviceInfo(optional): gateway-related information DeviceInfo object . If DeviceInfo object included next fields could be provided:resourceName(optional): the name of the DeviceInfo object resourcemgmtDefinition(mandatory): the value must be 1007 for DeviceInfo objectmanufacturer(mandatory): gateway manufacturerdeviceType(mandatory): gateway typemodel(mandatory): gateway modeldescription(optional): gateway descriptiondeviceLabel(mandatory): a label of the gatewayobjectIDs(optional): a list of URNs that uniquely identify the technology specific data model objects used for thismgmtObjresource as well as the managed function and version it representslocation(optional): geographic location of the gateway in format “geo:latitude,longitude”, e.g. “geo:48.861045,2.335765”
X-M2M-RI: Represents a unique request ID. Please don’t use123!! If you have a support request you can help us by providing us the related request ID.
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.
| Label | Mandatory | Example | Description |
|---|---|---|---|
d2c-devicetype | yes | loriot-gateway | Must be loriot-gateway |
d2c-loriot-destination | yes | myLoriotAccount/myLoriotNetwork | Resource name path: {accountRn}/{networkRn} |
d2c-propagate | no | false | false → skip LORIOT call (gateway not created in LORIOT). Default: true |
loriot-MAC | yes | 00-08-00-4A-C7-46 | Gateway MAC address (6 bytes, dashes instead of colons) |
loriot-location.lat | yes | 49.86552435916023 | Latitude (dot as decimal separator) |
loriot-location.lon | yes | 8.624739290340981 | Longitude (dot as decimal separator) |
loriot-base | no | pktfwd | Packet forwarder type |
loriot-bus | no | UDP | Bus type |
loriot-card | no | | Hardware card identifier |
loriot-concentrator | no | pktfwd | Concentrator type |
loriot-model | no | semtech | Gateway hardware model |
loriot-customEUI | no | 0080000000017B1B | Custom 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 value | Behaviour |
|---|---|
true (default) | The device/gateway is deleted from both DMO and the LORIOT network server. |
false | The 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 prefixresponseToRequest-followed by theri(resource ID) from the provisioning request response (e.g.responseToRequest-67...2a).responseStatus:1= success,2= error (seegeneralErrorMessage/individualErrorMessages).
Error cases
| Status Code | Condition | Error Message |
|---|---|---|
| 400 | nodeResourceName is missing | nodeResourceName is missing |
| 400 | Unknown d2c-devicetype label value | Unknown device type: ... |
| 400 | d2c-devicetype label is missing | missing d2c-devicetype label |
| 422 | d2c-loriot-destination label missing | Missing destination configuration: d2c-loriot-destination label not found |
| 422 | d2c-loriot-destination format invalid (device) | Invalid destination format: expected format is accountResourceName/applicationResourceName |
| 422 | d2c-loriot-destination format invalid (gateway) | Invalid destination format: expected format is accountResourceName/networkResourceName |
| 422 | Network/application not configured | Network not configured in adapter for resource: {resourceName} |
| 422 | Account credentials not configured | Account not configured in adapter for resource: {resourceName} |
| 422 | LORIOT rejects the device | Device registration failed: LORIOT returned HTTP {statusCode} |
| 422 | LORIOT rejects the gateway | Gateway registration failed: LORIOT returned HTTP {statusCode} |
Next step
Start sending and receiving IoT data from your LoRaWAN device.