- Home
- BACnet reference
- Error, reject and abort codes
BACnet reference
BACnet error, reject and abort codes
Updated 7 November 2026
When a read or write fails, the device answers with an Error (class + code), a Reject or an Abort. Each is a number. Here is what every one means, with notes on the ones you will actually see. Examples: 2 = property.
Looking for a number but not sure which list it belongs to? Use the BACnet number lookup, which searches every table at once.
Error classes (8)
| Number | Error class | Notes |
|---|---|---|
| 0 | device | |
| 1 | object | |
| 2 | property | Most failed reads and writes are in this class. |
| 3 | resources | |
| 4 | security | |
| 5 | services | |
| 6 | vt | |
| 7 | communication |
Error codes (229)
| Number | Error code | Notes |
|---|---|---|
| 0 | other | A catch-all: the device refused but gave no specific reason. |
| 1 | authentication-failed (newer) | |
| 2 | configuration-in-progress | |
| 3 | device-busy | The device is busy; try again shortly. |
| 4 | dynamic-creation-not-supported | |
| 5 | file-access-denied | |
| 6 | incompatible-security-levels (newer) | |
| 7 | inconsistent-parameters | |
| 8 | inconsistent-selection-criterion | |
| 9 | invalid-data-type | Wrong data type, e.g. a Real written to a binary point, or Unsigned where Enumerated is expected. |
| 10 | invalid-file-access-method | |
| 11 | invalid-file-start-position | |
| 12 | invalid-operator-name (newer) | |
| 13 | invalid-parameter-data-type | |
| 14 | invalid-time-stamp | |
| 15 | key-generation-error (newer) | |
| 16 | missing-required-parameter | |
| 17 | no-objects-of-specified-type | |
| 18 | no-space-for-object | |
| 19 | no-space-to-add-list-element | |
| 20 | no-space-to-write-property | |
| 21 | no-vt-sessions-available | |
| 22 | property-is-not-a-list | |
| 23 | object-deletion-not-permitted | |
| 24 | object-identifier-already-exists | |
| 25 | operational-problem | |
| 26 | password-failure | The device wants a password for this service (often DeviceCommunicationControl or ReinitializeDevice). |
| 27 | read-access-denied | The device will not let you read this property. |
| 28 | security-not-supported (newer) | |
| 29 | service-request-denied | The device refused the request as a whole, often because of a lock or its current state. |
| 30 | timeout | The device timed out handling the request (often while talking to a sub-network). |
| 31 | unknown-object | That object type and instance do not exist on this device. Check the instance number and the device. |
| 32 | unknown-property | The object exists but does not have that property. |
| 34 | unknown-vt-class | |
| 35 | unknown-vt-session | |
| 36 | unsupported-object-type | |
| 37 | value-out-of-range | The value is outside the object's limits, e.g. a setpoint min/max or a state that does not exist. |
| 38 | vt-session-already-closed | |
| 39 | vt-session-termination-failure | |
| 40 | write-access-denied | The property is read-only, or the device blocks writes (local mode, hand/off/auto switch, lock). |
| 41 | character-set-not-supported | |
| 42 | invalid-array-index | The array index does not exist, e.g. priority 17 or a state number past Number_Of_States. |
| 43 | cov-subscription-failed | |
| 44 | not-cov-property | |
| 45 | optional-functionality-not-supported | |
| 46 | invalid-configuration-data | |
| 47 | datatype-not-supported | |
| 48 | duplicate-name | |
| 49 | duplicate-object-id | |
| 50 | property-is-not-an-array | An array index was given for a property that is not an array. |
| 51 | abort-buffer-overflow | |
| 52 | abort-invalid-apdu-in-this-state | |
| 53 | abort-preempted-by-higher-priority-task | |
| 54 | abort-segmentation-not-supported | |
| 55 | abort-proprietary | |
| 56 | abort-other | |
| 57 | invalid-tag | |
| 58 | network-down | |
| 59 | reject-buffer-overflow | |
| 60 | reject-inconsistent-parameters | |
| 61 | reject-invalid-parameter-data-type | |
| 62 | reject-invalid-tag | |
| 63 | reject-missing-required-parameter | |
| 64 | reject-parameter-out-of-range | |
| 65 | reject-too-many-arguments | |
| 66 | reject-undefined-enumeration | |
| 67 | reject-unrecognized-service | |
| 68 | reject-proprietary | |
| 69 | reject-other | |
| 70 | unknown-device | |
| 71 | unknown-route | |
| 72 | value-not-initialized | |
| 73 | invalid-event-state | |
| 74 | no-alarm-configured | |
| 75 | log-buffer-full | |
| 76 | logged-value-purged | |
| 77 | no-property-specified | |
| 78 | not-configured-for-triggered-logging | |
| 79 | unknown-subscription | |
| 80 | parameter-out-of-range | |
| 81 | list-element-not-found | |
| 82 | busy | |
| 83 | communication-disabled | |
| 84 | success | |
| 85 | access-denied | |
| 86 | bad-destination-address | |
| 87 | bad-destination-device-id | |
| 88 | bad-signature | |
| 89 | bad-source-address | |
| 90 | bad-timestamp | |
| 91 | cannot-use-key | |
| 92 | cannot-verify-message-id | |
| 93 | correct-key-revision | |
| 94 | destination-device-id-required | |
| 95 | duplicate-message | |
| 96 | encryption-not-configured | |
| 97 | encryption-required | |
| 98 | incorrect-key | |
| 99 | invalid-key-data | |
| 100 | key-update-in-progress | |
| 101 | malformed-message | |
| 102 | not-key-server | |
| 103 | security-not-configured | |
| 104 | source-security-required | |
| 105 | too-many-keys | |
| 106 | unknown-authentication-type | |
| 107 | unknown-key | |
| 108 | unknown-key-revision | |
| 109 | unknown-source-message | |
| 110 | not-router-to-dnet | |
| 111 | router-busy | |
| 112 | unknown-network-message | |
| 113 | message-too-long | |
| 114 | security-error | |
| 115 | addressing-error | |
| 116 | write-bdt-failed | |
| 117 | read-bdt-failed | |
| 118 | register-foreign-device-failed | |
| 119 | read-fdt-failed | |
| 120 | delete-fdt-entry-failed | |
| 121 | distribute-broadcast-failed | |
| 122 | unknown-file-size | |
| 123 | abort-apdu-too-long | |
| 124 | abort-application-exceeded-reply-time | |
| 125 | abort-out-of-resources | |
| 126 | abort-tsm-timeout | |
| 127 | abort-window-size-out-of-range | |
| 128 | file-full | |
| 129 | inconsistent-configuration | |
| 130 | inconsistent-object-type | |
| 131 | internal-error | |
| 132 | not-configured | |
| 133 | out-of-memory | |
| 134 | value-too-long | |
| 135 | abort-insufficient-security | |
| 136 | abort-security-error | |
| 137 | duplicate-entry | |
| 138 | invalid-value-in-this-state | |
| 139 | invalid-operation-in-this-state (newer) | |
| 140 | list-item-not-numbered | |
| 141 | list-item-not-timestamped | |
| 142 | invalid-data-encoding | |
| 143 | bvlc-function-unknown | |
| 144 | bvlc-proprietary-function-unknown | |
| 145 | header-encoding-error | |
| 146 | header-not-understood | |
| 147 | message-incomplete | |
| 148 | not-a-bacnet-sc-hub | |
| 149 | payload-expected | |
| 150 | unexpected-data | |
| 151 | node-duplicate-vmac | |
| 152 | http-unexpected-response-code | |
| 153 | http-no-upgrade | |
| 154 | http-resource-not-local | |
| 155 | http-proxy-authentication-failed | |
| 156 | http-response-timeout | |
| 157 | http-response-syntax-error | |
| 158 | http-response-value-error | |
| 159 | http-response-missing-header | |
| 160 | http-websocket-header-error | |
| 161 | http-upgrade-required | |
| 162 | http-upgrade-error | |
| 163 | http-temporary-unavailable | |
| 164 | http-not-a-server | |
| 165 | http-error | |
| 166 | websocket-scheme-not-supported | |
| 167 | websocket-unknown-control-message | |
| 168 | websocket-close-error | |
| 169 | websocket-closed-by-peer | |
| 170 | websocket-endpoint-leaves | |
| 171 | websocket-protocol-error | |
| 172 | websocket-data-not-accepted | |
| 173 | websocket-closed-abnormally | |
| 174 | websocket-data-inconsistent | |
| 175 | websocket-data-against-policy | |
| 176 | websocket-frame-too-long | |
| 177 | websocket-extension-missing | |
| 178 | websocket-request-unavailable | |
| 179 | websocket-error | |
| 180 | tls-client-certificate-error | |
| 181 | tls-server-certificate-error | |
| 182 | tls-client-authentication-failed | |
| 183 | tls-server-authentication-failed | |
| 184 | tls-client-certificate-expired | |
| 185 | tls-server-certificate-expired | |
| 186 | tls-client-certificate-revoked | |
| 187 | tls-server-certificate-revoked | |
| 188 | tls-error | |
| 189 | dns-unavailable | |
| 190 | dns-name-resolution-failed | |
| 191 | dns-resolver-failure | |
| 192 | dns-error | |
| 193 | tcp-connect-timeout | |
| 194 | tcp-connection-refused | |
| 195 | tcp-closed-by-local | |
| 196 | tcp-closed-other | |
| 197 | tcp-error | |
| 198 | ip-address-not-reachable | |
| 199 | ip-error | |
| 200 | certificate-expired (newer) | |
| 201 | certificate-invalid (newer) | |
| 202 | certificate-malformed (newer) | |
| 203 | certificate-revoked (newer) | |
| 204 | unknown-security-key (newer) | |
| 205 | referenced-port-in-error (newer) | |
| 206 | not-enabled (newer) | |
| 207 | adjust-scope-required (newer) | |
| 208 | auth-scope-required (newer) | |
| 209 | bind-scope-required (newer) | |
| 210 | config-scope-required (newer) | |
| 211 | control-scope-required (newer) | |
| 212 | extended-scope-required (newer) | |
| 213 | incorrect-client (newer) | |
| 214 | install-scope-required (newer) | |
| 215 | insufficient-scope (newer) | |
| 216 | no-default-scope (newer) | |
| 217 | no-policy (newer) | |
| 218 | revoked-token (newer) | |
| 219 | override-scope-required (newer) | |
| 220 | inactive-token (newer) | |
| 221 | unknown-audience (newer) | |
| 222 | unknown-client (newer) | |
| 223 | unknown-scope (newer) | |
| 224 | view-scope-required (newer) | |
| 225 | incorrect-audience (newer) | |
| 226 | incorrect-client-origin (newer) | |
| 227 | invalid-array-size (newer) | |
| 228 | incorrect-issuer (newer) | |
| 229 | invalid-token (newer) |
Reject reasons (11)
| Number | Reject reason | Notes |
|---|---|---|
| 0 | other | |
| 1 | buffer-overflow | |
| 2 | inconsistent-parameters | |
| 3 | invalid-parameter-data-type | A parameter in the request had the wrong data type. |
| 4 | invalid-tag | |
| 5 | missing-required-parameter | |
| 6 | parameter-out-of-range | A parameter in the request was out of range. |
| 7 | too-many-arguments | |
| 8 | undefined-enumeration | |
| 9 | unrecognized-service | The device does not support that service, e.g. ReadPropertyMultiple. Read one property at a time. |
| 10 | invalid-data-encoding (newer) |
Abort reasons (12)
| Number | Abort reason | Notes |
|---|---|---|
| 0 | other | |
| 1 | buffer-overflow | The request or reply did not fit the device's buffer. |
| 2 | invalid-apdu-in-this-state | |
| 3 | preempted-by-higher-priority-task | |
| 4 | segmentation-not-supported | The reply was too big for one packet and the device cannot split it. Ask for fewer properties at once. |
| 5 | security-error | |
| 6 | insufficient-security | |
| 7 | window-size-out-of-range | |
| 8 | application-exceeded-reply-time | |
| 9 | out-of-resources | |
| 10 | tsm-timeout | |
| 11 | apdu-too-long |
Values come from the open-source bacnet-stack 1.6.1 (bacenum.h), which follows ANSI/ASHRAE Standard 135, and were cross-checked one by one against two other independent BACnet stacks (bacpypes and @bacnet-js/client). Entries marked (newer) are in bacnet-stack only, because the other two stacks predate them. Numbers 0-255 (and the higher ASHRAE ranges) are standard; vendors may use proprietary numbers above them.
More BACnet reference
- BACnet engineering units list
- BACnet property identifiers
- BACnet object types
- BACnet reliability, event state and device status
- BACnet service choice numbers
- BACnet Object Identifier decoder
- BACnet Vendor ID lookup
- Compare a scan with a points list
Easy BACnet reads these values straight off the device from an Android phone and shows them as words, not numbers.