get_endpoint_config
ReferenceAudience: API consumerUse: read back the reader's MQTT endpoint configuration and saved endpoint names
Overview
get_endpoint_config reads back the reader's MQTT endpoint configuration — a faithful view of what was provisioned with config_endpoint. It has two modes, chosen by whether you send endpointDetails.endpointName:
- All-endpoints (omit
endpointDetails): returns every active endpoint's full configuration underendpointResponse.activeEndpoints.epConfig[], plus the names of all saved endpoints underendpointResponse.savedEndpoints.epNames[]. - Single-endpoint (send
endpointDetails.endpointName): returns just that one endpoint's configuration.
It is a read-only command on the device-management (MGMT) endpoint.
The response includes broker credentials (mqttParams.password, and username where set) — treat it as sensitive. See the warning in Notes and Caveats. The examples on this page are the contract's, and carry placeholders rather than real credentials.
Details
| Property | Value |
|---|---|
| Interaction Pattern | Request / Response (app publishes a command; device publishes the correlated reply) |
| State Change | READ-ONLY |
| Required Request Fields | command, requestId (plus optional endpointDetails.endpointName) |
| Applies To | Endpoint: Management (MGMT). Reader: RFD40 series, RFD90 series |
| API Version | V1.1 (API Version Reporting) |
| Related | config_endpoint, get_wifi, get_eth, config_events |
When to Use
Use get_endpoint_config to inspect or audit the reader's MQTT wiring:
- Before
config_endpoint— review the current configuration so you do not overwrite an active endpoint unexpectedly. - Confirm the plumbing — check
url/port,protocol,verificationType, and thepublishTopics/subscribeTopicsa broker will see. - List saved endpoints — read
savedEndpoints.epNames[]to see everything saved on the device (a superset of the active endpoints) before activating or deleting one. - Audit routing & security — review each endpoint's
eventConfigurationandsecurityParams.
Topic Mapping
| Message | Direction | Topic | Note |
|---|---|---|---|
| Request | App → Reader | <tenantId>/MGMT/clients/cmnd/<serial> | On the management endpoint. |
| Response | Reader → App | <tenantId>/MGMT/clients/resp/<serial> | Correlated reply to the request above; the in-payload requestId links the twin topics. |
Topics follow the pattern <tenantId>/<topic>/<serial> — the tenant id assigned to you at provisioning (a slot you fill in, never a literal), the base topic you configure on the endpoint, and the reader's serial number, which the reader appends itself in its model-prefixed form (for example RFD40-212735201D0053). App → Reader means your app publishes and the reader subscribes; Reader → App means the reader publishes and your app subscribes.
The publishTopics / subscribeTopics inside the response are base topics (e.g. MDM/clients/cmnd); on-wire they are wrapped to <tenantId>/<topic>/<serial>.
Credentials are presented once at CONNECT. The requestId you send is echoed in the response so you can pair reply to request. The endpoint's mqttParams govern QoS and retain, not this command.
See Topics and Channels.
Key Fields
endpointDetails.endpointName(request) — omit for all endpoints; supply to target one (case-sensitive).activeEndpoints.epConfig[](response) — the full config of each active endpoint. Inactive (saved-but-not-activated) endpoints do not appear here. An endpoint appears here as soon as it is stored as active, which does not show that it connected: wait for aCONNECTEDmqttConnEVTon the endpoint’s connection-state topic. See Saving an endpoint does not connect it.savedEndpoints.epNames[](response) — the names of all saved endpoints (active and inactive) — the active/saved distinction in one field.configuration.mqttParams.password(response) — ⚠️ a broker credential is present in the response; see Response Payload and the credential warning below.response.code(response) — read this to determine success vs failure (see Response Codes).
Request Payload
To read all endpoints, send just command and requestId. Use the Schema tab for the full field reference and the Example tab for the all-endpoints request.
- Example
- Schema
| Field | Type | Enum / Units | Example | Description |
|---|---|---|---|---|
command* | string | — | get_endpoint_config | Fixed command name. |
requestId* | string | — | 123 | A unique identifier for the request; echoed back in the response so you can pair reply to request. |
endpointDetails | object | — | — | Optional selector. Omit it to retrieve every active endpoint plus all saved names (all-endpoints mode); include it to retrieve one endpoint (single-endpoint mode). |
endpointName, nesting level 2 | string | — | ctrl | The saved endpoint name to retrieve. Case-sensitive. When present, only that endpoint is returned. |
Request Semantics
- Modes. All-endpoints (omit
endpointDetails) returns every active endpoint plus all saved names; single-endpoint (endpointDetails.endpointName) returns just that one endpoint.
Response Payload
On success the device returns the envelope (command, requestId, apiVersion, response) with the endpoint payload under endpointResponse — activeEndpoints.epConfig[] (full configs) and savedEndpoints.epNames[] (all saved names). The Example tab shows two active endpoints — an MDM endpoint and a DATA1 endpoint.
mqttParams.password and username in the example below are the broker credentials a read-back carries. The payload is taken verbatim from the contract, so it follows the contract's own placeholder policy rather than this page's: password reads xxxxxx, a placeholder, but username reads mqttuser — a value the contract ships unmasked. Treat both as placeholders, not as credentials to reuse.
- Example
- Schema
| Field | Type | Enum / Units | Example | Description |
|---|---|---|---|---|
command* | string | — | get_endpoint_config | Echoes the executed command. |
requestId* | string | — | 123 | Echoes the request's requestId — pairs reply to request. |
apiVersion* | enum | V1.0V1.1V1.2V1.21V1.22 | V1.1 | API version reported by this command. Emitted per-handler, not device-wide. |
endpointResponse | object | — | — | The endpoint payload. Present on success; carries the active endpoints and the saved-names list. (Not in the envelope required set — a non-success reply may omit it.) |
activeEndpoints, nesting level 2 | object | — | — | The full configuration of every currently-active endpoint. |
epConfig, nesting level 3 | array | — | — | One entry per active endpoint. |
configuration, nesting level 4 | object | — | — | The endpoint configuration. Required within an entry: epType, protocol, activate, url, verificationType, port. |
endpointName, nesting level 5 | string | — | MDM | The endpoint name. |
epType*, nesting level 5 | enum | MGMTMGMT_EVTCTRLDATA1DATA2MDM | MGMT | The endpoint type (its role). DATA2 is currently not supported. |
protocol*, nesting level 5 | enum | MQTTMQTT_TLS | MQTT | MQTT (no transport security) or MQTT_TLS (TLS) — the literals you send with config_endpoint read back unchanged. |
activate*, nesting level 5 | boolean | — | true | Whether the endpoint is active. Only active endpoints appear under activeEndpoints. |
url*, nesting level 5 | string | — | broker.example.com | Broker address (host or IP). |
verificationType*, nesting level 5 | enum | VERIFY_NONEVERIFY_HOST_AND_PEER | VERIFY_HOST_AND_PEER | TLS verification mode, as set with config_endpoint, such as VERIFY_HOST_AND_PEER. A plain-MQTT endpoint reads back VERIFY_NONE. |
port*, nesting level 5 | integer | — | 1883 | Broker port. |
qosCommon, nesting level 5 | integer | — | 1 | Default QoS level for the endpoint. |
tenantId, nesting level 5 | string | — | ZEBRA | Tenant identifier; the first segment of every on-wire topic. |
mqttParams, nesting level 5 | object | — | — | MQTT connection parameters, topics, and broker credentials. |
keepAlive, nesting level 6 | integer | max 65535 | 300 | Keep-alive interval. |
cleanSession, nesting level 6 | boolean | — | true | Whether the MQTT session is clean. |
reconnectDelayMin, nesting level 6 | integer | — | 5 | Minimum reconnect back-off. |
reconnectDelayMax, nesting level 6 | integer | — | 512 | Maximum reconnect back-off. |
clientId, nesting level 6 | string | — | zebra-rfd40-01 | MQTT client ID (may be empty; the device derives one). |
username, nesting level 6 | string | — | mqttuser | ⚠️ Broker username (credential) — treat as sensitive. |
password, nesting level 6 | string | — | xxxxxx | ⚠️ Broker password (credential) — returned by this command; the examples show a placeholder. See the credential warning in Notes. |
publishTopics, nesting level 6 | array | — | — | Base topics the endpoint publishes to. Each item requires qos and retain. |
topic, nesting level 7 | string | — | zebra/rfd40/01/data | Base topic (wrapped on-wire to <tenantId>/<topic>/<serial>). Declared, but not required, in the publish item schema. |
qos*, nesting level 7 | integer | — | 1 | QoS for this published topic. |
retain*, nesting level 7 | boolean | — | false | Whether the broker retains the last message. |
subscribeTopics, nesting level 6 | array | — | — | Base topics the endpoint subscribes to. Each item requires topic, qos and retain, although the contract’s own read-back examples omit retain (see Response Semantics). |
topic*, nesting level 7 | string | — | zebra/rfd40/01/data | Base topic (wrapped on-wire). |
qos*, nesting level 7 | integer | — | 0 | QoS for this subscription. |
retain*, nesting level 7 | boolean | — | — | Retain flag for this subscription. |
securityParams, nesting level 5 | object | — | — | TLS parameters. Required within securityParams: format. A plain-MQTT endpoint returns only { format }. |
format*, nesting level 6 | enum | PEMPFX | PEM | Certificate format. |
algorithm, nesting level 6 | enum | RSA256RSA512 | RSA256 | Certificate algorithm (TLS endpoints). |
caCertificateFile, nesting level 6 | string | — | cloud-trusted-ca-certs.crt | CA certificate reference (TLS endpoints). |
clientCert, nesting level 6 | string | — | client_cert.pem | Client certificate reference (TLS endpoints). |
clientKey, nesting level 6 | string | — | client_key.pem | Client key reference (TLS endpoints). |
eventConfiguration, nesting level 5 | object | — | — | Per-endpoint event-routing toggles (which events this endpoint emits) plus optional heartbeat settings. See the Response Semantics table below for every field and the supported-vs-reserved split. |
antenna, nesting level 6 | boolean | — | false | set to true to enable antenna events |
terminalConnection, nesting level 6 | boolean | — | false | set to true to enable terminal connection/disconnection events |
firmwareUpdate, nesting level 6 | boolean | — | true | set to true to enable fw update events |
gpi, nesting level 6 | boolean | — | false | set to true to enable gpi events |
network, nesting level 6 | boolean | — | true | set to true to enable network events |
exceptions, nesting level 6 | boolean | — | false | set to true to enable exception events |
ntp, nesting level 6 | boolean | — | true | set to true to enable network time alerts |
userApp, nesting level 6 | boolean | — | false | set to true to enable user app events |
heartbeat, nesting level 6 | boolean | — | false | set to true to enable heart beat |
power, nesting level 6 | boolean | — | true | set to true to enable power source alerts |
battery, nesting level 6 | boolean | — | true | set to true to enable battery alerts |
temperature, nesting level 6 | boolean | — | false | set to true to enable temperature alerts |
fileDownload, nesting level 6 | boolean | — | true | set to true to enable file download alerts |
cpuUsage, nesting level 6 | boolean | — | false | set to true to enable cpu usage alerts |
flashUsage, nesting level 6 | boolean | — | false | set to true to enable flash usage alerts |
ramUsage, nesting level 6 | boolean | — | false | set to true to enable ram usage alerts |
heartbeatConfiguration, nesting level 6 | object | — | — | The endpoint’s stored heartbeat settings. |
interval, nesting level 7 | integer | max 65535 | 100 | Seconds between heartbeats, at most 65,535. |
inventoryStatus, nesting level 7 | boolean | — | true | set to true to enable inventory status as part of heartbeat message |
batteryStatus, nesting level 7 | boolean | — | true | set to true to enable battery status as part of heartbeat message |
userApps, nesting level 7 | boolean | — | — | set to true to enable user app status as part of heartbeat message |
cpuThreshold, nesting level 6 | integer | — | 0 | cpu usage value(%) above which alert will be triggered |
ramThreshold, nesting level 6 | integer | — | 0 | ram usage value(%) above which alert will be triggered |
flashThreshold, nesting level 6 | integer | — | 0 | flash usage value(%) above which alert will be triggered |
temperatureThreshold, nesting level 6 | integer | — | 0 | temperature treshold value above which alert will be triggered |
batching, nesting level 5 | object | — | — | Report batching for this endpoint, as stored. Whether a reported 0 is the value sent or the clamped minimum in use is not documented. |
reportingInterval, nesting level 6 | integer | 1000–60000 | 5000 | Reporting timeout for batching tags, in milliseconds. |
maxPayloadSizePerReport, nesting level 6 | integer | 1024–5120 | 1024 | Maximum payload size per report, in bytes. |
savedEndpoints, nesting level 2 | object | — | — | The names of all saved endpoints (active and inactive). |
epNames, nesting level 3 | array | — | ["mdm_ep", …] | Every saved endpoint name — a superset of the active ones. |
response* | object | — | — | Status envelope for the read. |
code*, nesting level 2 | integer | 0–101 | 0 | 0 = Success; non-zero = error. Required by the contract. See Response Codes below. |
description*, nesting level 2 | string | — | Success | Human-readable status. |
Response Semantics
Field Support. Each endpoint's configuration.eventConfiguration selects which events that endpoint emits. The contract declares the full set below, but only 7 of the boolean toggles are supported today; the remaining 13 keys are accepted by the firmware and returned in the read-back but have no effect yet (reserved for a future release). Enabling a reserved toggle silently does nothing.
| Field | Type | Status | Description |
|---|---|---|---|
terminalConnection | boolean | ✅ Supported | Terminal connect/disconnect events. |
firmwareUpdate | boolean | ✅ Supported | Firmware-update events. |
network | boolean | ✅ Supported | Network events. |
heartbeat | boolean | ✅ Supported | Periodic heartbeat events. |
power | boolean | ✅ Supported | Power-source events. |
battery | boolean | ✅ Supported | Battery events. |
temperature | boolean | 🔒 Reserved | Declared in the schema, but no temperature alert is emitted on V1.1 — the toggle is stored and read back, and does nothing. |
fileDownload | boolean | ✅ Supported | File-download events. |
antenna | boolean | 🔒 Reserved | Not yet functional. |
gpi | boolean | 🔒 Reserved | Not yet functional. |
exceptions | boolean | 🔒 Reserved | Not yet functional. |
ntp | boolean | 🔒 Reserved | Not yet functional. |
userApp | boolean | 🔒 Reserved | Not yet functional. |
cpuUsage | boolean | 🔒 Reserved | Not yet functional. |
flashUsage | boolean | 🔒 Reserved | Not yet functional. |
ramUsage | boolean | 🔒 Reserved | Not yet functional. |
cpuThreshold | integer | 🔒 Reserved | Not yet functional (paired with cpuUsage). |
ramThreshold | integer | 🔒 Reserved | Not yet functional (paired with ramUsage). |
flashThreshold | integer | 🔒 Reserved | Not yet functional (paired with flashUsage). |
temperatureThreshold | integer | 🔒 Reserved | Not yet functional. |
heartbeatConfiguration | object | ⚙️ Conditional | { interval, inventoryStatus, batteryStatus, userApps }. Returned only after config_events enables the heartbeat (not by default). userApps is not currently functional. |
The 7 supported booleans are exactly the ones you can rely on today; configure event routing with config_events.
- Active vs saved.
activeEndpoints.epConfig[]contains a full configuration only for endpoints withactivate: true.savedEndpoints.epNames[]lists every saved endpoint — so a name that appears inepNamesbut not inepConfig[]is saved but inactive. verificationTypereads back as you sent it. The reader returns the value you set withconfig_endpoint, such asVERIFY_HOST_AND_PEER; a plain-MQTT endpoint reads backVERIFY_NONE. Because one enum governs both directions, you can echo a read-back value in a laterupdate.- Topic items and the
protocolliteral. EachpublishTopics/subscribeTopicsentry carriestopic,qos, andretain. The contract requiresqosandretainon a publish item, andtopic,qosandretainon a subscribe item — but its own read-back examples omitretainon every subscribe item, and an MQTT subscription has no retain flag, so do not reject a subscribe entry that lacks it. The TLS protocol literal does not differ by direction: you sendMQTT_TLSwithconfig_endpointand read the sameMQTT_TLSback here, so a validator can hold one enum —MQTTorMQTT_TLS— for both directions. - Topic slots read back in configured order.
publishTopicsentries are returned in the order they were set withconfig_endpoint:[0]= command responses (…/clients/resp),[1]= events (…/clients/event),[2]= the endpoint's connection-event and Last Will topic (…/clients/rfid), withsubscribeTopics[0]= command ingress (…/clients/cmnd). ADATA1endpoint configured with a placeholder at[0]reads the tag-data topic back at[1], as the contract'sDATA1read-back shows. A read-back with a single entry is read from index0upward, so that entry sits in the reply slot and no tag data is flowing. Match entries by index, not base name — theresp/event/rfidnames are conventions.
Response Codes
get_endpoint_config returns response.code. The codes applicable to this command are below; for the full table see the Response Codes and Correlation and Request/Response Pairing.
| Code | Description |
|---|---|
0 | Success — the endpoint configuration was retrieved. |
3 | Not able to retrieve information (IOT_ERROR_INFO_NOT_AVAILABLE) — the device could not gather the configuration at this time. Retry after a short delay; if persistent, reboot. |
101 | Default error — generic catch-all. |
Examples
Publish get_endpoint_config; the device replies with the envelope shown under Response Payload. The all-endpoints request (command + requestId) returns every active endpoint plus the saved-names list; the single-endpoint request (shown under Request Payload) targets one endpoint by name.
Active vs saved. In the response example, activeEndpoints.epConfig[] carries the full config of the two active endpoints (mdm_ep2 and data1_ep), while savedEndpoints.epNames lists all five saved (mdm_ep, mdm_ep2, ctrl_ep, data1_ep, mgmt_ep) — the three that are saved but not active appear only as names, with no config block. When more than one endpoint is active, epConfig[] holds one full configuration per active endpoint.
Notes and Caveats
configuration.mqttParams.password (and username, when set) are part of the read-back. Redact them in logs, tickets, and screenshots; transport and store the response only over secured channels. The examples on this page carry placeholders, not real credentials.
Read get_endpoint_config before config_endpoint to review the current wiring and avoid clobbering an active endpoint. For the concept-level view, see Endpoints and Topic Slots.
Related: 📕 Endpoints and Topic Slots · 📕 config_endpoint · 📕 config_events · 📕 get_wifi · 📕 Response Codes