Reference

OPC UA status codes

Every OPC UA status code an engineer actually meets, with what it means, the real causes in order of frequency, and the fix. Currently 127 codes documented out of the 273 in the normative StatusCode list, prioritised by how often they stop a project.

How to use this. Work the code you actually got, not the one you expected. OPC UA returns the most specific code it can, and the specific code usually names the real problem, a certificate error is almost never a network error. If you cannot connect at all, start at BadConnectionRejected; if the session opens then drops, start at BadSecurityChecksFailed.
127 pages

Certificates 14

BadCertificateChainIncompleteA CA-issued certificate fails validation even though the root CA is trusted, and the error mentions an incomplete or unbuildable chain rather than a tBadCertificateHostNameInvalidThe channel opens far enough to validate the certificate and then fails with a domain or hostname mismatch, typically right after you switch from a hoBadCertificateInvalidThe handshake fails immediately with no useful detail, and moving the certificate into the trusted store makes no difference at all.BadCertificateIssuerRevocationUnknownValidation completes on the peer certificate but fails on one of the CA certificates above it, typically in a two-tier PKI where only the sub-CA's CRLBadCertificateIssuerRevokedEvery application whose certificate came from one particular CA fails to connect at once, while applications certified by a different CA are unaffecteBadCertificateIssuerTimeInvalidEvery application certified by one CA stops connecting at the same moment, and the individual application certificates are all well within their own vBadCertificateIssuerUseNotAllowedCertificates issued by a working corporate CA - trusted elsewhere in the enterprise, fine for TLS - are refused by OPC UA applications with an issuer BadCertificatePolicyCheckFailedAn older device or a legacy client is refused at the handshake while modern peers connect normally to the same endpoint, and the certificate itself isBadCertificateRevocationUnknownA properly chained, in-date, correctly named certificate is refused with a revocation-related error, and the crl folder in your PKI is empty or holds BadCertificateRevokedA connection that previously worked fails at the handshake with this code, and the peer certificate lands in the rejected store while the endpoint itsBadCertificateTimeInvalidA connection that worked for months fails overnight, or a brand-new device fails immediately on first connect with a certificate validity error.BadCertificateUntrustedThe connection dies during OpenSecureChannel, the client shows a trust dialog or a certificate error, and a copy of the offending certificate turns upBadCertificateUriInvalidCertificate validation gets past trust and hostname checks and then fails on the application URI, often immediately after someone copied a configuratiBadCertificateUseNotAllowedA certificate that is trusted, in date and correctly named is still rejected, and the message points at key usage rather than at trust, chain or hostn

Security 7

Authentication 4

Sessions 4

Channels 4

Connection 17

BadConnectionClosedIn-flight requests, especially long-polled Publish calls, all complete with the same error at the same instant, and the client's state goes to reconneBadConnectionRejectedThe client fails immediately with a connection error and no OPC UA detail - no endpoint list, no certificate prompt, no session.BadEndpointUrlInvalidThe connection fails before any certificate or user prompt, usually within a second, with the client reporting the URL rather than a network or securiBadProtocolVersionUnsupportedThe TCP connection is accepted and then torn down within milliseconds, before any endpoint list, certificate prompt or session, with an error naming tBadRequestInterruptedSeveral in-flight requests fail together at the exact moment a reconnect starts, with no server-side fault reason attached to any of them.BadRequestTimeoutOne kind of call - a large Browse, a bulk Read, a method that touches the field layer - times out consistently while small calls on the same session rBadServerHaltedThe connection is established or re-establishes fine, but every service call is refused with the same code, and it persists until someone intervenes oBadServerNotConnectedEither every call from a client fails instantly with no network activity at all, or a subset of tags on a gateway go bad together while the rest of thBadServerTooBusyRequests are refused quickly and cleanly on a connection that is otherwise healthy, in bursts that correlate with plant startup, a server restart or aBadShutdownEvery outstanding request completes with the same code at once, the connection drops immediately afterwards, and the server is unreachable for a shortBadTcpEndpointUrlInvalidThe TCP connection is accepted and then closed immediately with an error frame, so the client reports a failure in well under a second with no certifiBadTcpMessageTooLargeSmall operations work fine but one specific call fails every time: a wide Read, a large Write, a browse of a big folder, or a subscription notificatioBadTcpMessageTypeInvalidA server configured for reverse connect logs repeated rejections from the client address and stops retrying, while the client shows an unexpected messBadTcpNotEnoughResourcesConnections or large requests fail on a server that has been running for a while, often alongside subscription and browse failures, and often clearingBadTcpSecureChannelUnknownMessages are rejected at the framing layer immediately after what looked like a successful reconnect, or immediately after a server restart while the BadTcpServerTooBusyNew connections are refused at the handshake while existing clients keep working, and the refusals cluster at plant startup or after a server restart.BadTimeoutOperations fail after a fixed interval that matches an SDK default, and the connection often recovers by itself a moment later, giving a sawtooth of f

Address space 12

BadAttributeIdInvalidA Read returns Good at the service level but one entry in the results array carries this status, usually the entry for a folder or an object that a geBadBrowseDirectionInvalidA Browse call fails immediately with this code for every node, including well-known nodes such as the Objects folder, while a Read on the same sessionBadContinuationPointInvalidA large browse or history query works for the first few pages and then fails partway through, more often on a loaded server or when the client paused BadNoContinuationPointsBrowse or HistoryRead starts failing for every client on a busy server, and the failures clear after clients are restarted rather than after any serveBadNoMatchA browse path that resolves against one machine returns no match against an apparently identical one, or a query that worked in a test system returns BadNodeClassInvalidOne specific operation fails against a node that browses and reads perfectly well, most often a method Call or an event subscription.BadNodeIdInvalidEvery request touching one particular node fails identically, and the failing value in the log often looks visibly wrong - an empty NodeId, a stray coBadNodeIdUnknownA client that has worked for months suddenly fails on some or all of its nodes right after a controller download, a firmware update or a server reconfBadNotFoundOne entry in a browse-path translation result is bad while the others resolve, or a whole path fails at a specific element that you can plainly see inBadObjectDeletedA subset of nodes that worked a moment ago starts failing while the rest of the address space is untouched, often after a job finished, a file was cloBadReferenceTypeIdInvalidA Browse or AddReferences call that works against one server fails against another, and the browse returns nothing rather than an empty result set.BadTooManyMatchesA path translation or query fails only against the largest machines or the busiest servers, while the same request succeeds on a small test address sp

Data access 14

BadDataEncodingInvalidA Read or CreateMonitoredItems on a structured variable fails with BadDataEncodingInvalid while scalar nodes on the same server read fine.BadDataEncodingUnsupportedStructured values read fine with the default encoding but fail as soon as the client asks for XML or JSON, on a server that otherwise behaves normallyBadDecodingErrorA specific node or a specific service call fails to decode while everything else on the same session works, or a client throws a decoding exception miBadEncodingLimitsExceededReads or subscription notifications work for small sets and fail once a batch grows, a large array is added, or an address space export is attempted.BadIndexRangeInvalidA Read or Write that includes an IndexRange fails immediately, while the same request without the IndexRange succeeds and returns the whole array.BadIndexRangeNoDataA ranged read that worked yesterday now returns BadIndexRangeNoData, usually after the underlying array shrank or the server restarted with an empty bBadNotReadableBrowsing shows the node and its attributes fine, but every Read of the Value attribute and every attempt to add it to a subscription returns BadNotReaBadNotWritableA Write returns BadNotWritable immediately, with no delay and no effect on the value, while Reads on the same node work perfectly.BadOutOfRangeA Write with a plausible value is rejected while a smaller or larger value on the same node succeeds, and reading the node shows a range property thatBadRequestTooLargeA bulk Read, Write or CreateMonitoredItems fails outright with no per-item results, while the same operation split into halves succeeds.BadResponseTooLargeA Browse of a large folder, a HistoryRead over a long window, or a Publish during a burst fails while the same call over a smaller scope returns normaBadStructureMissingA service call fails immediately with BadStructureMissing and no per-item results, usually the first time a hand-built or generated request is used.BadTypeMismatchA Write that looks correct returns BadTypeMismatch for one item while the other items in the same request succeed, and reading the same node back workBadWriteNotSupportedA Write fails with BadWriteNotSupported even though AccessLevel shows CurrentWrite, and the same value written from a different tool succeeds.

Device 6

Subscriptions 13

BadDeadbandFilterInvalidItems with a deadband are rejected while identical items with DeadbandType None are accepted, and the rejection follows the node rather than the clienBadEventFilterInvalidAn attempt to subscribe to events on the Server object or an alarm area fails immediately, and no events are ever delivered even though the server cleBadFilterNotAllowedCreateMonitoredItems or ModifyMonitoredItems rejects a specific item with this code while identical items without a filter are accepted.BadFilterOperandInvalidAn event subscription is rejected and the response carries an EventFilterResult with a bad status against one specific select or where operand rather BadMonitoredItemFilterUnsupportedThe same filter that works against one server is rejected by another, usually a PLC or an embedded gateway, while the item itself is created successfuBadMonitoredItemIdInvalidModifyMonitoredItems, SetMonitoringMode, SetTriggering or DeleteMonitoredItems returns this code for some items while other items in the same call sucBadMonitoringModeInvalidSetMonitoringMode or CreateMonitoredItems rejects the item with this code, and the item either never reports or stays in whatever mode it already had.BadNoSubscriptionThe Publish loop returns this code immediately and repeatedly on a session that connects cleanly and can read and browse normally.BadSubscriptionIdInvalidPublish calls that were working start returning this code on every attempt, and no further data change notifications arrive, while a plain Read on theBadTooManyMonitoredItemsCreateMonitoredItems succeeds for the first part of a large batch and returns this code for the remainder, so a subscription comes up with fewer itemsBadTooManyOperationsA large Read, Write, Browse or CreateMonitoredItems call is rejected outright with this code as a whole-request error, while the same nodes succeed whBadTooManyPublishRequestsA client that works against one server logs this code steadily against another, sometimes alongside occasional gaps in data, while everything else aboBadTooManySubscriptionsCreateSubscription fails once a system has been running a while or once the last few clients are commissioned, while existing subscriptions keep worki

History 6

Methods 5

Server 9

Uncertain 6

Good 6

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Status Code Diagnostic Tree
A 15-page diagnostic reference grouping every normative status code by what actually went wrong: with the first action for each, and the four questions that resolve most faults before you read a single code.
Get the free diagnostic tree →
Free, no course, no login