diff --git a/pkg/services/util/sign.go b/pkg/services/util/sign.go
index 3b3253658..83fd18b9c 100644
--- a/pkg/services/util/sign.go
+++ b/pkg/services/util/sign.go
@@ -107,13 +107,9 @@ func (s *RequestMessageStreamer) CloseAndRecv() (ResponseMessage, error) {
 			return nil, err
 		}
 
-		var st apistatus.ServerInternal // specific API status should be set according to error
-
-		apistatus.WriteInternalServerErr(&st, err)
-
 		resp = s.respCons()
 
-		setStatusV2(resp, st)
+		setStatusV2(resp, err)
 	}
 
 	if err = signResponse(s.key, resp, s.statusSupported); err != nil {
@@ -164,13 +160,9 @@ func (s *SignService) HandleServerStreamRequest(
 			return err
 		}
 
-		var st apistatus.ServerInternal // specific API status should be set according to error
-
-		apistatus.WriteInternalServerErr(&st, err)
-
 		resp := blankResp()
 
-		setStatusV2(resp, st)
+		setStatusV2(resp, err)
 
 		_ = signResponse(s.key, resp, false) // panics or returns nil with false arg
 
@@ -204,13 +196,9 @@ func (s *SignService) HandleUnaryRequest(ctx context.Context, req interface{}, h
 			return nil, err
 		}
 
-		var st apistatus.ServerInternal // specific API status should be set according to error
-
-		apistatus.WriteInternalServerErr(&st, err)
-
 		resp = blankResp()
 
-		setStatusV2(resp, st)
+		setStatusV2(resp, err)
 	}
 
 	// sign the response
@@ -229,8 +217,13 @@ func isStatusSupported(req RequestMessage) bool {
 	return mjr > 2 || mjr == 2 && version.GetMinor() >= 11
 }
 
-func setStatusV2(resp ResponseMessage, st apistatus.Status) {
-	session.SetStatus(resp, apistatus.ToStatusV2(st))
+func setStatusV2(resp ResponseMessage, err error) {
+	// unwrap error
+	for e := errors.Unwrap(err); e != nil; e = errors.Unwrap(err) {
+		err = e
+	}
+
+	session.SetStatus(resp, apistatus.ToStatusV2(apistatus.ErrToStatus(err)))
 }
 
 // signs response with private key via signature.SignServiceMessage.