BACnet Error Code Decoder BACnet

Turn the numbers a device sends back when it refuses a request into what actually went wrong — error class and code, reject reason, or abort reason.
When a BACnet request fails, the device answers with one of three things: a BACnet-Error (an error class plus an error code), a BACnet-Reject (a reject reason — the message was malformed), or a BACnet-Abort (an abort reason — the transaction was torn down). Pick the kind you got, type the number(s), and read the meaning; or filter the full reference tables below.

The inputs are seeded with an example — edit them to your numbers.

Which kind of failure did the device return?

An Error is a class + code pair — the service ran and the device refused it.

Error code —
Error class —

Enter a value to decode it.

Every error class, error code, reject reason, and abort reason, filterable across all four at once. Click a value to copy it.

CodeNameWhat it means
0otherCatch-all the device returns when no specific code fits; the real cause is vendor-defined, so check the device's own log or manual.
1authentication-failed—
2configuration-in-progressDevice is mid-download or commissioning and can't service the request; retry once the config or program load finishes.
3device-busyDevice is temporarily overloaded, often mid-backup, restore, or program load; back off and retry in a few seconds.
4dynamic-creation-not-supported—
5file-access-deniedFile-object read or write refused; usually a permissions issue or the file is locked open by a backup or restore.
6incompatible-security-levels—
7inconsistent-parametersService arguments conflict with each other, like a mismatched array size or bad option combo; fix the request the tool built.
8inconsistent-selection-criterion—
9invalid-data-typeWritten value's datatype doesn't match the property, such as a real into an enum or integer; correct the datatype in the write.
10invalid-file-access-method—
11invalid-file-start-position—
12invalid-operator-name—
13invalid-parameter-data-type—
14invalid-time-stamp—
15key-generation-error—
16missing-required-parameterThe request PDU left out a mandatory field; a malformed client request, so check the tool or driver encoding.
17no-objects-of-specified-type—
18no-space-for-objectDevice's object database is full, so CreateObject fails; delete unused objects or you've hit the device's object limit.
19no-space-to-add-list-element—
20no-space-to-write-propertyProperty storage is full, often when adding to a list like a schedule or group; free space or trim existing entries.
21no-vt-sessions-available—
22property-is-not-a-listAddListElement or RemoveListElement was used on a property that isn't a list; wrong service for that property.
23object-deletion-not-permittedObject can't be deleted because it's built-in, like the Device object or a fixed I/O point; only dynamic objects delete.
24object-identifier-already-existsCreateObject asked for an instance number already in use; pick an unused instance for that object type.
25operational-problemDevice has an internal fault blocking the operation; check its health and alarms, and it may need a reboot.
26password-failure—
27read-access-deniedThe property exists but reading it is blocked; you lack the rights or security level to read that property.
28security-not-supported—
29service-request-deniedThe target device refused the service on its own policy, state, or security grounds; the request was well-formed, so check that device, not the network.
30timeoutNo reply within the APDU timeout; a comms problem like wrong MAC or network number, a dead device, or MS/TP token loss.
31unknown-objectThe referenced object doesn't exist on the device; wrong object type or instance, or it was deleted — a rename won't do it, references are by id.
32unknown-propertyThe object doesn't support that property id; wrong property or a proprietary one this device doesn't implement.
34unknown-vt-class—
35unknown-vt-session—
36unsupported-object-typeCreateObject asked for an object type the device doesn't implement; check the PICS for supported types.
37value-out-of-rangeWritten value is outside the property's allowed range, like a bad priority, COV increment, or setpoint; clamp it to range.
38vt-session-already-closed—
39vt-session-termination-failure—
40write-access-deniedProperty is read-only or not writable now, such as an input's Present_Value or a command-priority conflict.
41character-set-not-supported—
42invalid-array-indexArray index is past the property's size, or index 0 misused; read the array length before indexing into it.
43cov-subscription-failedDevice couldn't set up the COV subscription, usually its subscription table is full; free a slot or fall back to polling.
44not-cov-propertySubscribed change-of-value on a property that doesn't support it; only ones like Present_Value or Status_Flags qualify.
45optional-functionality-not-supportedDevice doesn't implement that optional service or feature; check its BIBBs or PICS before relying on it.
46invalid-configuration-data—
47datatype-not-supportedThe datatype used isn't one the device accepts for that property or operation; re-encode with a supported type.
48duplicate-nameThe Object_Name is already taken on this device; names must be unique per device, so choose another.
49duplicate-object-idThe object-identifier collides with an existing object; that instance is already assigned on the device.
50property-is-not-an-arrayAn array index was used on a scalar property; drop the index and read or write the value whole.
51abort-buffer-overflow—
52abort-invalid-apdu-in-this-state—
53abort-preempted-by-higher-priority-task—
54abort-segmentation-not-supported—
56abort-other—
57invalid-tag—
58network-down—
59reject-buffer-overflow—
60reject-inconsistent-parameters—
61reject-invalid-parameter-data-type—
62reject-invalid-tag—
63reject-missing-required-parameter—
64reject-parameter-out-of-range—
65reject-too-many-arguments—
66reject-undefined-enumeration—
67reject-unrecognized-service—
69reject-other—
70unknown-deviceA responding gateway or proxy doesn't recognize the referenced device instance; a true dead route instead shows up as a network Reject or a timeout, not this.
71unknown-route—
72value-not-initializedProperty holds no value yet, typically an empty priority-array slot or a point that was never written.
73invalid-event-state—
74no-alarm-configured—
75log-buffer-full—
76logged-value-purged—
77no-property-specified—
78not-configured-for-triggered-logging—
79unknown-subscriptionReferenced a COV subscription that no longer exists; it expired or was never created, so resubscribe.
80parameter-out-of-range—
81list-element-not-found—
82busyDevice can't service the request at the moment; wait briefly and retry.
83communication-disabledDeviceCommunicationControl has silenced the device's traffic; send a DCC enable or wait out its timer to restore comms.
84successNo error; the positive result code confirming the operation completed.
85access-deniedRequest refused on authorization grounds; you lack the rights, common with BACnet/SC or key-based security.
86bad-destination-address—
87bad-destination-device-id—
88bad-signature—
89bad-source-address—
90bad-timestamp—
91cannot-use-key—
92cannot-verify-message-id—
93correct-key-revision—
94destination-device-id-required—
95duplicate-message—
96encryption-not-configured—
97encryption-required—
98incorrect-key—
99invalid-key-data—
100key-update-in-progress—
101malformed-message—
102not-key-server—
103security-not-configured—
104source-security-required—
105too-many-keys—
106unknown-authentication-type—
107unknown-key—
108unknown-key-revision—
109unknown-source-message—
110not-router-to-dnet—
111router-busy—
112unknown-network-message—
113message-too-long—
114security-error—
115addressing-error—
116write-bdt-failed—
117read-bdt-failed—
118register-foreign-device-failed—
119read-fdt-failed—
120delete-fdt-entry-failed—
121distribute-broadcast-failed—
122unknown-file-size—
123abort-apdu-too-long—
124abort-application-exceeded-reply-time—
125abort-out-of-resources—
126abort-tsm-timeout—
127abort-window-size-out-of-range—
128file-full—
129inconsistent-configuration—
130inconsistent-object-type—
131internal-error—
132not-configured—
133out-of-memory—
134value-too-long—
135abort-insufficient-security—
136abort-security-error—
137duplicate-entry—
138invalid-value-in-this-state—
139invalid-operation-in-this-state—
140list-item-not-numbered—
141list-item-not-timestamped—
142invalid-data-encoding—
143bvlc-function-unknown—
145header-encoding-error—
146header-not-understood—
147message-incomplete—
148not-a-bacnet-sc-hub—
149payload-expected—
150unexpected-data—
151node-duplicate-vmac—
152http-unexpected-response-code—
153http-no-upgrade—
154http-resource-not-local—
155http-proxy-authentication-failed—
156http-response-timeout—
157http-response-syntax-error—
158http-response-value-error—
159http-response-missing-header—
160http-websocket-header-error—
161http-upgrade-required—
162http-upgrade-error—
163http-temporary-unavailable—
164http-not-a-server—
165http-error—
166websocket-scheme-not-supported—
167websocket-unknown-control-message—
168websocket-close-error—
169websocket-closed-by-peer—
170websocket-endpoint-leaves—
171websocket-protocol-error—
172websocket-data-not-accepted—
173websocket-closed-abnormally—
174websocket-data-inconsistent—
175websocket-data-against-policy—
176websocket-frame-too-long—
177websocket-extension-missing—
178websocket-request-unavailable—
179websocket-error—
180tls-client-certificate-error—
181tls-server-certificate-error—
182tls-client-authentication-failed—
183tls-server-authentication-failed—
184tls-client-certificate-expired—
185tls-server-certificate-expired—
186tls-client-certificate-revoked—
187tls-server-certificate-revoked—
188tls-error—
189dns-unavailable—
190dns-name-resolution-failed—
191dns-resolver-failure—
192dns-error—
193tcp-connect-timeout—
194tcp-connection-refused—
195tcp-closed-by-local—
196tcp-closed-other—
197tcp-error—
198ip-address-not-reachable—
199ip-error—
200certificate-expired—
201certificate-invalid—
202certificate-malformed—
203certificate-revoked—
204unknown-security-key—
205referenced-port-in-error—
206not-enabled—
207adjust-scope-required—
208auth-scope-required—
209bind-scope-required—
210config-scope-required—
211control-scope-required—
212extended-scope-required—
213incorrect-client—
214install-scope-required—
215insufficient-scope—
216no-default-scope—
217no-policy—
218revoked-token—
219override-scope-required—
220inactive-token—
221unknown-audience—
222unknown-client—
223unknown-scope—
224view-scope-required—
225incorrect-audience—
226incorrect-client-origin—
227invalid-array-size—
228incorrect-issuer—
229invalid-token—
ClassNameWhat it means
0deviceDevice-level refusal: it's busy, mid-configuration, or has an operational problem and cannot service the request; usually transient, so retry.
1objectThe target object is the problem: unknown-object (wrong instance number), wrong type, or a create or delete the device forbids; verify the object-id.
2propertyThe addressed property is at fault: unknown-property, write-access-denied (read-only), value-out-of-range, or a wrong datatype or array index.
3resourcesDevice is out of memory or space: no room to create the object, add a list element, or store the value; often a full points or objects table.
4securitySecurity check failed: bad password, authentication failure, incompatible security levels, or a key or encryption error blocked the request.
5servicesThe service request is malformed: missing or inconsistent parameters, invalid tag encoding, or a parameter out of range; usually a client or stack bug.
6vtVirtual Terminal session errors: unknown VT class or session, none available, or already closed; a legacy text-terminal feature you'll rarely see.
7communicationMessage-transport problems: comms disabled by DCC, a duplicate or incomplete message, or an unknown network or route; check DCC state and routing.
ReasonNameWhat it means
0otherCatch-all reject for a parse-level rejection that fits none of the defined codes; grab the raw APDU with a sniffer to see what tripped it.
1buffer-overflowRequest exceeded the receiver's decode buffer, so it couldn't be fully decoded and was rejected; usually an oversized APDU to a device with a small Max-APDU.
2inconsistent-parametersEach argument decoded fine but they contradict one another, so the request can't be honored; a combination the service won't accept together.
3invalid-parameter-data-typeAn argument's encoded type isn't what the service expects, like a Real where an Unsigned belongs; usually an encoder bug on the sender.
4invalid-tagA context or application tag is wrong or misplaced, so the decoder lost the byte stream; classic hand-rolled or buggy encoder symptom.
5missing-required-parameterA mandatory argument for the service wasn't present; the sender omitted a required field the decoder needs to proceed.
6parameter-out-of-rangeAn argument decoded but its value sits outside the range that field allows, such as an index or choice beyond the service's limits.
7too-many-argumentsThe request carried more arguments than the service defines; extra trailing parameters the decoder didn't expect to find.
8undefined-enumerationAn enumerated argument held a value not defined for that enum; often a newer or proprietary code the receiver can't map.
9unrecognized-serviceThe PDU parsed but the device doesn't implement that service choice; the requested service simply isn't supported here.
10invalid-data-encodingThe bytes decode but do not form a legal encoding for their datatype — malformed at the datatype level, not just a bad tag. A later-edition reason older stacks will not send.
ReasonNameWhat it means
0otherCatch-all when no listed reason fits; the device tore down the transaction without saying why, so a packet capture is your only lead.
1buffer-overflowReceiver ran out of buffer space mid-transaction, usually a segmented message too big for a small device to reassemble; cut APDU size or segment count.
2invalid-apdu-in-this-stateA segment or ACK the state machine wasn't expecting — often a stale duplicate retransmit, or a client reusing an invoke ID before its prior transaction closed.
3preempted-by-higher-priority-taskDevice intentionally abandoned this lower-priority transaction for more urgent internal work like reinitialization; uncommon, and not a load or slot issue.
4segmentation-not-supportedThe reply won't fit one APDU and this device can't segment; ask for less — smaller ReadPropertyMultiple or ReadRange chunks.
5security-errorA BACnet network-security check failed — bad signature, key mismatch, or replayed message; verify keys and time sync across the secured devices.
6insufficient-securityMessage came in below the security level this operation requires; the peer must sign or encrypt to the policy minimum before the device will proceed.
7window-size-out-of-rangeThe proposed segmentation window size fell outside the legal 1 to 127, or beyond what this device accepts — a botched segment-ACK negotiation.
8application-exceeded-reply-timeThe application layer took too long to build the response and the transaction was torn down; slow backend, blocked point, or an overloaded controller.
9out-of-resourcesDevice has no free state-machine slots, memory, or handles left to continue; common on small controllers under heavy polling — throttle or stagger polls.
10tsm-timeoutTransaction state machine timed out waiting for the next segment or ACK; usually a dropped packet, an offline peer, or MS/TP token loss.
11apdu-too-longThe APDU exceeds the receiver's Max APDU Length Accepted and can't be segmented; shrink the request or response, or enable segmentation.

Enumerations imported from bacnet-stack's error enums (the de-facto machine-readable form of the ASHRAE 135 error tables, which are paywalled) — retrieved 2026-07-13: 8 classes, 226 error codes, 11 reject reasons, 12 abort reasons. Descriptions cover the field-common values; the long tail (BACnet/SC transport, HTTP / TLS / DNS, OAuth-scope codes added in later editions) is listed name-only. Verify exact normative wording against the standard.

All three are a "no," but they fail at different points, and the difference tells you where to look. A BACnet-Error means your request was well-formed and the service ran — the device understood exactly what you asked and refused it, so it hands back an error class (the category) and an error code (the specific reason). This is the common one: unknown-property, write-access-denied, value-out-of-range.

A BACnet-Reject means the request never got that far — the was malformed, mis-encoded, or used a service the device does not implement, so it was thrown out at the protocol layer before the service ran. A BACnet-Abort means a transaction that had already started was torn down mid-flight — almost always segmentation, a timeout, or the device running out of buffer or resources. Reject points at the message; Abort points at the transport or the device's capacity.

A BACnet-Error always carries the pair. The class buckets the problem — device, object, property, resources, security, services, vt, or communication — and the code is the specific message inside that bucket. In practice the code is what you act on; the class just tells you which subsystem raised it. The same code number can legitimately appear under more than one class, so decode both.

Classes 0–63 and the standard code range are ASHRAE's; a class 64 or above is a vendor-proprietary error, and its meaning lives in that manufacturer's documentation — the Vendor ID lookup tells you whose. The Object Reference covers the object types and properties these errors refer to.

What is the difference between a BACnet Error, Reject, and Abort?

All three say a request failed, but at different stages. An Error means the service ran and the device refused it — it returns an error class plus an error code (unknown-property, write-access-denied). A Reject means the request could not be serviced at the protocol layer — malformed, mis-encoded, or asking for a service the device does not implement — thrown out before the service ran, and it returns a reject reason. An Abort tears down a transaction already in progress, usually over segmentation, a timeout, or resources — it returns an abort reason.

What does BACnet error class 2 code 32 mean?

Error class 2 is property and code 32 is unknown-property — you asked for a property the object does not have. Check the property identifier; a common cause is reading an optional property a given device or object does not implement.

What is a BACnet abort with reason APDU-too-long?

The response would not fit in one APDU and the device cannot segment it (or segmentation was not negotiated). It shows up on a big ReadPropertyMultiple or an Object_List read — split the request into smaller reads, or enable segmentation on both ends.

Why do I get write-access-denied writing a BACnet point?

Error code 40, write-access-denied, means the property is read-only or write-protected to you — for example an input's Present_Value, or a property the device simply will not let you write. On a commandable object, writing Present_Value directly can be refused because its value is owned by the program or the priority array — write at a priority instead, or write the object that actually drives it.

Where do I see the raw BACnet error class and code?

A workstation usually shows the decoded text, but a discovery log, an integration error dialog, or a Wireshark decode of the BACnet-Error / Reject / Abort APDU shows the bare numbers. That is when you paste them here.
← All tools