serviceRegistryManagement IDD
generic_mqtt & generic_mqtts
Overview
This page describes the generic_mqtt and generic_mqtts service interface of the serviceRegistryManagement service, which enables systems (with operator role or proper permissions) to handle (register, update, revoke, lookup) devices, systems, service instances, service definitions and interface templates in bulk. An example of this interaction is that an operator uses the Management Tool to register interface templates, systems, and service instances manually. The interfaces are implemented using protocol, encoding as stated in the following tables:
generic_mqtt
Profile type | type | Version |
---|---|---|
Transfer protocol | MQTT | 3.1 and 3.1.1 |
Data encryption | N/A | - |
Encoding | JSON | RFC 8259 |
Compression | N/A | - |
generic_mqtts
Profile type | type | Version |
---|---|---|
Transfer protocol | MQTT | 3.1 and 3.1.1 |
Data encryption | TLS | - |
Encoding | JSON | RFC 8259 |
Compression | N/A | - |
Hereby the Interface Design Description (IDD) is provided to the serviceRegistryManagement – Service Description. For further details about how this service is meant to be used, please consult that document.
Interface Description
device-query
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is an optional DeviceQueryRequest.
Topic: arrowhead/serviceregistry/management/device-query
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"pagination": {
"page": 0,
"size": 10,
"direction": "ASC",
"sortField": "name"
},
"deviceNames": [
],
"addresses": [
],
"addressType": "",
"metadataRequirementList": [
{
"volume.value": { "op": "GREATER_THAN_OR_EQUALS_TO", "value": 90 },
"volume.unit": { "op": "EQUALS", "value": "dB" }
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a DeviceListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
{
"name": "ALARTM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Sort field is invalid. Only the following are allowed: [id, name, createdAt]",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/device-query"
}
}
device-create
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a DeviceListRequest.
Topic: arrowhead/serviceregistry/management/device-create
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"devices": [
{
"name": "ALARM1",
"metadata": {
"volume": { "value": 100, "unit": "dB" }
},
"addresses": [
"3a:f7:9c:12:8e:b5"
]
},
{
"name": "ALARM2",
"metadata": {
"volume": { "value": 110, "unit": "dB" }
},
"addresses": [
"3a:f7:9c:12:8e:bb"
]
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 201
if the device entities were successfully created. The response template payload is a DeviceListResponse.
{
"status": 201,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "3a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46.399919700Z",
"updatedAt": "2025-05-04T18:51:46.399919700Z"
},
{
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "3a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46.409974400Z",
"updatedAt": "2025-05-04T18:51:46.409974400Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Device with names already exists: ALARM1, ALARM2",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/device-create"
}
}
device-update
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a DeviceListRequest.
Topic: arrowhead/serviceregistry/management/device-update
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"devices": [
{
"name": "ALARM1",
"metadata": {
"volume": { "value": 100, "unit": "dB" }
},
"addresses": [
"4a:f7:9c:12:8e:b5"
]
},
{
"name": "ALARM2",
"metadata": {
"volume": { "value": 110, "unit": "dB" }
},
"addresses": [
"4a:f7:9c:12:8e:bb"
]
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a DeviceListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
{
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Device(s) not exists: ALARM001, ALARM002",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/device-update"
}
}
device-remove
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a List<DeviceName> which contains the names of the devices to delete.
Topic: arrowhead/serviceregistry/management/device-remove
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": ["ALARM1", "ALARM2"]
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. In this case the response payload is empty.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": ""
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission, 423
if the entity is not removable and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 423,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "At least one system is assigned to these devices",
"errorCode": 423,
"exceptionType": "LOCKED",
"origin": "arrowhead/serviceregistry/management/device-remove"
}
}
system-query
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is an optional SystemQueryRequest. The params can contain an optional KeyValuePair with the key "verbose" and a Boolean value. If verbose is true, detailed device information also returns (only if the provider supports it).
Topic: arrowhead/serviceregistry/management/system-query
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"params": {"verbose": false},
"payload": {
"pagination": {
"page": 1,
"size": 1,
"direction": "ASC",
"sortField": ""
},
"systemNames": [
],
"addresses": [
],
"addressType": "",
"metadataRequirementList": [
],
"versions": [
"1.1"
],
"deviceNames": [
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a SystemListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "AlertConsumer2",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.2"
}
],
"createdAt": "2025-03-15T20:22:44Z",
"updatedAt": "2025-03-15T20:22:44Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "The page size cannot be larger than 1000",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/system-query"
}
}
system-create
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a SystemListRequest.
Topic: arrowhead/serviceregistry/management/system-create
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"systems": [
{
"name": "AlertConsumer1",
"metadata": {
},
"version": "1.1",
"addresses": [
"192.168.1.1"
],
"deviceName": "ALARM1"
},
{
"name": "AlertConsumer2",
"metadata": {
},
"version": "1.1",
"addresses": [
"192.168.1.2"
],
"deviceName": "ALARM2"
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 201
if the system entities were successfully created. The response template payload is a SystemListResponse.
{
"status": 201,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "AlertConsumer1",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.1"
}
],
"device": {
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-04T20:08:37.278728600Z",
"updatedAt": "2025-05-04T20:08:37.278728600Z"
},
{
"name": "AlertConsumer2",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.2"
}
],
"device": {
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-04T20:08:37.284276300Z",
"updatedAt": "2025-05-04T20:08:37.284276300Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Systems with names already exist: AlertConsumer1, AlertConsumer2",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/system-create"
}
}
system-update
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a SystemListRequest.
Topic: arrowhead/serviceregistry/management/system-update
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"systems": [
{
"name": "AlertConsumer1",
"metadata": {
},
"version": "1.2",
"addresses": [
"192.168.1.1"
],
"deviceName": "ALARM1"
},
{
"name": "AlertConsumer2",
"metadata": {
},
"version": "1.2",
"addresses": [
"192.168.1.2"
],
"deviceName": "ALARM2"
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a SystemListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "AlertConsumer1",
"metadata": {},
"version": "1.2.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.1"
}
],
"device": {
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-04T20:08:37Z",
"updatedAt": "2025-05-04T20:11:20.541557100Z"
},
{
"name": "AlertConsumer2",
"metadata": {},
"version": "1.2.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.2"
}
],
"device": {
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-04T20:08:37Z",
"updatedAt": "2025-05-04T20:11:20.661848200Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Duplicated system name: AlertConsumer1",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/system-update"
}
}
system-remove
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a List<SystemName> which contains the names of the systems to delete.
arrowhead/serviceregistry/management/system-remove
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": ["AlertConsumer1", "AlertConsumer2"]
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. In this case the response payload is empty.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": ""
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 401,
"traceId": "<trace-id>",
"receiver": null,
"payload": {
"errorMessage": "Invalid authentication info",
"errorCode": 401,
"exceptionType": "AUTH"
}
}
service-definition-query
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is an optional PageRequest.
Topic: arrowhead/serviceregistry/management/service-definition-query
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"page": 2,
"size": 4,
"direction": "DESC",
"sortField": "name"
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a ServiceDefinitionListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "orchestrationLockManagement",
"createdAt": "2025-03-12T11:07:23Z",
"updatedAt": "2025-03-12T11:07:23Z"
},
{
"name": "orchestrationHistoryManagement",
"createdAt": "2025-03-12T11:07:23Z",
"updatedAt": "2025-03-12T11:07:23Z"
},
{
"name": "orchestration",
"createdAt": "2025-03-12T11:07:23Z",
"updatedAt": "2025-03-12T11:07:23Z"
},
{
"name": "monitor",
"createdAt": "2025-01-31T09:14:54Z",
"updatedAt": "2025-01-31T09:14:54Z"
}
],
"count": 26
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Direction is invalid. Only ASC or DESC are allowed",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-definition-query"
}
}
service-definition-create
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a ServiceDefinitionListRequest.
Topic: arrowhead/serviceregistry/management/service-definition-create
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"serviceDefinitionNames": [
"alertService1", "alertService2"
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a ServiceDefinitionListResponse.
{
"status": 201,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "alertService1",
"createdAt": "2025-05-04T21:33:49.344720800Z",
"updatedAt": "2025-05-04T21:33:49.344720800Z"
},
{
"name": "alertService2",
"createdAt": "2025-05-04T21:33:49.421567600Z",
"updatedAt": "2025-05-04T21:33:49.421567600Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Service definition names already exists: alertService1",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-definition-create"
}
}
service-definition-remove
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a List<ServiceName> which contains the names of the service definitions to delete.
Topic: arrowhead/serviceregistry/management/service-definition-remove
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": ["alertService1", "alertService2"]
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. In this case the response payload is empty.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": ""
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Service definition name list is missing or empty",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-definition-remove"
}
}
service-query
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a ServiceQueryRequest. The params can contain an optional KeyValuePair with the key "verbose" and a Boolean value. If verbose is true, detailed device information also returns (only if the provider supports it).
Topic: arrowhead/serviceregistry/management/service-query
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"params": {"verbose": false},
"payload": {
"pagination": {
"page": 0,
"size": 2,
"direction": "ASC",
"sortField": "createdAt"
},
"instanceIds": [
],
"providerNames": [
],
"serviceDefinitionNames": [
"alertService1"
],
"versions": [
"1.0.0", "1.0.1"
],
"alivesAt": "2026-01-01T00:00:00Z",
"metadataRequirementsList": [
],
"addressTypes": [
],
"interfaceTemplateNames": [
"generic_mqtt"
],
"interfacePropertyRequirementsList": [
{
"operations": { "op": "CONTAINS", "value": "warn" }
}
],
"policies": [
"NONE"
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a ServiceListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"instanceId": "AlertProvider1|alertService1|1.0.0",
"provider": {
"name": "AlertProvider1",
"metadata": {},
"version": "1.1.0",
"createdAt": "2025-05-05T09:05:31Z",
"updatedAt": "2025-05-05T09:05:31Z"
},
"serviceDefinition": {
"name": "alertService1",
"createdAt": "2025-05-04T21:33:49Z",
"updatedAt": "2025-05-04T21:33:49Z"
},
"version": "1.0.0",
"expiresAt": "2028-01-01T00:00:00Z",
"metadata": {
"delay": {
"value": 200,
"unit": "ms"
}
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [
"192.168.1.3"
],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [
"alert",
"warn",
"info"
]
}
}
],
"createdAt": "2025-05-05T09:06:28Z",
"updatedAt": "2025-05-05T09:06:28Z"
}
],
"count": 1
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Sort field is invalid. Only the following are allowed: [id, name, createdAt]",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-query"
}
}
service-create
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a ServiceCreateListRequest.
Topic: arrowhead/serviceregistry/management/service-create
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"instances": [
{
"systemName": "AlertProvider1",
"serviceDefinitionName": "alertService1",
"version": "",
"expiresAt": "2028-01-01T00:00:00Z",
"metadata": {
"delay": { "value": 200, "unit": "ms" }
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [ "192.168.1.3" ],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [ "alert", "warn" ]
}
}
]
},
{
"systemName": "AlertProvider2",
"serviceDefinitionName": "alertService2",
"version": "",
"expiresAt": "2027-01-01T00:00:00Z",
"metadata": {
"delay": { "value": 200, "unit": "ms" }
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [ "192.168.1.4" ],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [ "warn" ]
}
}
]
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 201
if the service instance entities were created successfully. The response template payload is a ServiceListResponse.
{
"status": 201,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"instanceId": "AlertProvider1|alertService1|1.0.0",
"provider": {
"name": "AlertProvider1",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.1"
}
],
"device": {
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-05T09:05:31Z",
"updatedAt": "2025-05-05T09:05:31Z"
},
"serviceDefinition": {
"name": "alertService1",
"createdAt": "2025-05-04T21:33:49Z",
"updatedAt": "2025-05-04T21:33:49Z"
},
"version": "1.0.0",
"expiresAt": "2028-01-01T00:00:00Z",
"metadata": {
"delay": {
"value": 200,
"unit": "ms"
}
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [
"192.168.1.3"
],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [
"alert",
"warn"
]
}
}
],
"createdAt": "2025-05-05T09:06:27.599446600Z",
"updatedAt": "2025-05-05T09:06:27.599446600Z"
},
{
"instanceId": "AlertProvider2|alertService1|1.0.0",
"provider": {
"name": "AlertProvider2",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.2"
}
],
"device": {
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-05T09:05:32Z",
"updatedAt": "2025-05-05T09:05:32Z"
},
"serviceDefinition": {
"name": "alertService2",
"createdAt": "2025-05-04T21:33:49Z",
"updatedAt": "2025-05-04T21:33:49Z"
},
"version": "1.0.0",
"expiresAt": "2027-01-01T00:00:00Z",
"metadata": {
"delay": {
"value": 200,
"unit": "ms"
}
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [
"192.168.1.4"
],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [
"warn"
]
}
}
],
"createdAt": "2025-05-05T09:06:27.618441200Z",
"updatedAt": "2025-05-05T09:06:27.618441200Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Service definition name is empty",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-create"
}
}
service-update
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a ServiceUpdateListRequest.
Topic: arrowhead/serviceregistry/management/service-update
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"instances": [
{
"instanceId": "AlertProvider1|alertService1|1.0.0",
"expiresAt": "2028-01-01T00:00:00Z",
"metadata": {
"delay": { "value": 200, "unit": "ms" }
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [ "192.168.1.3" ],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [ "alert", "warn", "info" ]
}
}
]
},
{
"instanceId": "AlertProvider2|alertService2|1.0.0",
"expiresAt": "2027-01-01T00:00:00Z",
"metadata": {
"delay": { "value": 200, "unit": "ms" }
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
ű "policy": "NONE",
"properties": {
"accessAddresses": ["192.168.1.4"],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [ "warn" ]
}
}
]
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if the service instance entities were updated successfully. The response template payload is a ServiceListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"instanceId": "AlertProvider1|alertService1|1.0.0",
"provider": {
"name": "AlertProvider1",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.1"
}
],
"device": {
"name": "ALARM1",
"metadata": {
"volume": {
"value": 100,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:b5"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-05T09:05:31Z",
"updatedAt": "2025-05-05T09:05:31Z"
},
"serviceDefinition": {
"name": "alertService1",
"createdAt": "2025-05-04T21:33:49Z",
"updatedAt": "2025-05-04T21:33:49Z"
},
"version": "1.0.0",
"expiresAt": "2028-01-01T00:00:00Z",
"metadata": {
"delay": {
"value": 200,
"unit": "ms"
}
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [
"192.168.1.3"
],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [
"alert",
"warn",
"info"
]
}
}
],
"createdAt": "2025-05-05T09:06:28Z",
"updatedAt": "2025-05-05T09:09:58.070188100Z"
},
{
"instanceId": "AlertProvider2|alertService2|1.0.0",
"provider": {
"name": "AlertProvider2",
"metadata": {},
"version": "1.1.0",
"addresses": [
{
"type": "IPV4",
"address": "192.168.1.2"
}
],
"device": {
"name": "ALARM2",
"metadata": {
"volume": {
"value": 110,
"unit": "dB"
}
},
"addresses": [
{
"type": "MAC",
"address": "4a:f7:9c:12:8e:bb"
}
],
"createdAt": "2025-05-04T18:51:46Z",
"updatedAt": "2025-05-04T18:51:46Z"
},
"createdAt": "2025-05-05T09:05:32Z",
"updatedAt": "2025-05-05T09:05:32Z"
},
"serviceDefinition": {
"name": "alertService2",
"createdAt": "2025-05-04T21:33:49Z",
"updatedAt": "2025-05-04T21:33:49Z"
},
"version": "1.0.0",
"expiresAt": "2027-01-01T00:00:00Z",
"metadata": {
"delay": {
"value": 200,
"unit": "ms"
}
},
"interfaces": [
{
"templateName": "generic_mqtt",
"protocol": "tcp",
"policy": "NONE",
"properties": {
"accessAddresses": [
"192.168.1.4"
],
"accessPort": 1883,
"baseTopic": "heat-alert",
"operations": [
"warn"
]
}
}
],
"createdAt": "2025-05-05T09:06:28Z",
"updatedAt": "2025-05-05T09:09:58.238440Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": ""Instance id does not exist: AlertProvider1|alertService1|1.0.1"",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/service-update"
}
}
service-remove
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a List<ServiceInstanceID> which contains the identitifers of the service instances that need to be removed.
Topic: arrowhead/serviceregistry/management/service-remove
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": ["AlertProvider1|alertService1|1.0.0", "AlertProvider2|alertService2|1.0.0"]
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. In this case the response payload is empty.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": ""
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 403,
"traceId": "<trace-id>",
"receiver": <receiver-system-identifier>,
"payload": {
"errorMessage": "Requester has no management permission",
"errorCode": 403,
"exceptionType": "FORBIDDEN",
"origin": "arrowhead/serviceregistry/management/service-remove"
}
}
interface-template-query
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is an optional InterfaceTemplateQueryRequest.
Topic: arrowhead/serviceregistry/management/interface-template-query
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"pagination": {
"page": 1,
"size": 1,
"direction": "ASC",
"sortField": "name"
},
"templateNames": [
],
"protocols": [
"tcp"
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. The response template payload is a InterfaceTemplateListResponse.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "generic_mqtt",
"protocol": "tcp",
"propertyRequirements": [
{
"name": "accessAddresses",
"mandatory": true,
"validator": "NOT_EMPTY_ADDRESS_LIST",
"validatorParams": []
},
{
"name": "accessPort",
"mandatory": true,
"validator": "PORT",
"validatorParams": []
},
{
"name": "baseTopic",
"mandatory": true
},
{
"name": "operations",
"mandatory": true,
"validator": "NOT_EMPTY_STRING_SET",
"validatorParams": [
"OPERATION"
]
}
],
"createdAt": "2024-12-09T18:52:48Z",
"updatedAt": "2024-12-09T18:52:48Z"
}
],
"count": 3
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "The specified interface template name does not match the naming convention: general@mqtt",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/interface-template-query"
}
}
interface-template-create
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is an InterfaceTemplateListRequest.
Topic: arrowhead/serviceregistry/management/interface-template-create
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": {
"interfaceTemplates": [
{
"name": "custom_ftp",
"protocol": "tcp",
"propertyRequirements": [
{
"name": "accessAddresses",
"mandatory": true,
"validator": "not_empty_address_list",
"validatorParams": [
]
}
]
},
{
"name": "my_awesome_ftp",
"protocol": "tcp",
"propertyRequirements": [
{
"name": "accessAddresses",
"mandatory": true,
"validator": "not_empty_address_list",
"validatorParams": [
]
}
]
}
]
}
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 201
if the interface template entities were successfully created. InterfaceTemplateListResponse.
{
"status": 201,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"entries": [
{
"name": "custom_ftp",
"protocol": "tcp",
"propertyRequirements": [
{
"name": "accessAddresses",
"mandatory": true,
"validator": "NOT_EMPTY_ADDRESS_LIST",
"validatorParams": []
}
],
"createdAt": "2025-05-05T10:26:35.426965600Z",
"updatedAt": "2025-05-05T10:26:35.426965600Z"
},
{
"name": "my_awesome_ftp",
"protocol": "tcp",
"propertyRequirements": [
{
"name": "accessAddresses",
"mandatory": true,
"validator": "NOT_EMPTY_ADDRESS_LIST",
"validatorParams": []
}
],
"createdAt": "2025-05-05T10:26:35.532789400Z",
"updatedAt": "2025-05-05T10:26:35.532789400Z"
}
],
"count": 2
}
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 400,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": {
"errorMessage": "Interface template already exists: custom_ftp",
"errorCode": 400,
"exceptionType": "INVALID_PARAMETER",
"origin": "arrowhead/serviceregistry/management/interface-template-create"
}
}
interface-template-remove
The service operation request requires an MQTTRequestTemplate JSON encoded message in which the authentication is a proper identity info and the payload is a List<InterfaceName> which contains the string identifier of the interface descriptors that need to be removed.
Topic: arrowhead/serviceregistry/management/interface-template-remove
{
"traceId": "<trace-id>",
"authentication": "<identity-info>",
"responseTopic": "<response-topic>",
"qosRequirement": <0|1|2>,
"payload": [ "custom_ftp", "my_awesome_ftp" ]
}
The service operation responds with an MQTTResponseTemplate JSON encoded message in which the status code is 200
if called successfully. In this case the response payload is empty.
{
"status": 200,
"traceId": "<trace-id>",
"receiver": "<receiver-system-identifier>",
"payload": ""
}
The error codes are 400
if the request is malformed, 401
if the requester authentication was unsuccessful, 403
if the authenticated requester has no permission and 500
if an unexpected error happens. In these cases the response template payload is an ErrorResponse JSON.
{
"status": 401,
"traceId": "<trace-id>",
"receiver": null,
"payload": "Invalid authentication info"
}