diff --git a/client/common.go b/client/common.go
index 1a73303f..aa1d0427 100644
--- a/client/common.go
+++ b/client/common.go
@@ -58,7 +58,8 @@ type processResponseV2Res struct {
 //
 // Actions:
 //  * verify signature (internal);
-//  * call response callback (internal).
+//  * call response callback (internal);
+//  * unwrap status error (optional).
 func (c *Client) processResponseV2(res *processResponseV2Res, prm processResponseV2Prm) bool {
 	// verify response structure
 	if isInvalidSignatureV2(res, prm.resp) {
@@ -71,10 +72,18 @@ func (c *Client) processResponseV2(res *processResponseV2Res, prm processRespons
 		return true
 	}
 
-	// set result status
+	// get result status
 	st := apistatus.FromStatusV2(prm.resp.GetMetaHeader().GetStatus())
 
+	// unwrap unsuccessful status and return it
+	// as error if client has been configured so
+	unsuccessfulStatus := !apistatus.IsSuccessful(st)
+	if unsuccessfulStatus && c.opts.parseNeoFSErrors {
+		res.cliErr = apistatus.ErrFromStatus(st)
+		return true
+	}
+
 	res.statusRes.setStatus(st)
 
-	return !apistatus.IsSuccessful(st)
+	return unsuccessfulStatus
 }
diff --git a/client/opts.go b/client/opts.go
index 7986a7b0..60a38943 100644
--- a/client/opts.go
+++ b/client/opts.go
@@ -35,6 +35,12 @@ type (
 		rawOpts []client.Option
 
 		cbRespInfo func(ResponseMetaInfo) error
+
+		// defines if client parses erroneous NeoFS
+		// statuses and returns them as `error`
+		//
+		// default is false
+		parseNeoFSErrors bool
 	}
 
 	v2SessionReqInfo struct {
@@ -195,3 +201,12 @@ func WithGRPCConnection(grpcConn *grpc.ClientConn) Option {
 		opts.rawOpts = append(opts.rawOpts, client.WithGRPCConn(grpcConn))
 	}
 }
+
+// WithNeoFSErrorParsing returns option that makes client parse
+// erroneous NeoFS statuses and return them as `error` of the method
+// call.
+func WithNeoFSErrorParsing() Option {
+	return func(opts *clientOptions) {
+		opts.parseNeoFSErrors = true
+	}
+}