diff --git a/core/internal/api/BUILD.bazel b/core/internal/api/BUILD.bazel
index 3daa397..e7ec6f8 100644
--- a/core/internal/api/BUILD.bazel
+++ b/core/internal/api/BUILD.bazel
@@ -16,7 +16,9 @@
         "//core/internal/common/service:go_default_library",
         "//core/internal/consensus:go_default_library",
         "@org_golang_google_grpc//:go_default_library",
+        "@org_golang_google_grpc//codes:go_default_library",
         "@org_golang_google_grpc//reflection:go_default_library",
+        "@org_golang_google_grpc//status:go_default_library",
         "@org_uber_go_zap//:go_default_library",
     ],
 )
diff --git a/core/internal/api/cluster.go b/core/internal/api/cluster.go
index 814fcf0..d2c18c3 100644
--- a/core/internal/api/cluster.go
+++ b/core/internal/api/cluster.go
@@ -23,14 +23,14 @@
 	"fmt"
 	schema "git.monogon.dev/source/nexantic.git/core/generated/api"
 	"git.monogon.dev/source/nexantic.git/core/internal/common/grpc"
-
-	"errors"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
 
 	"go.uber.org/zap"
 )
 
 var (
-	ErrAttestationFailed = errors.New("attestation_failed")
+	ErrAttestationFailed = status.Error(codes.PermissionDenied, "attestation failed")
 )
 
 func (s *Server) AddNode(ctx context.Context, req *schema.AddNodeRequest) (*schema.AddNodeResponse, error) {
@@ -44,7 +44,8 @@
 	nonce := make([]byte, 20)
 	_, err = rand.Read(nonce)
 	if err != nil {
-		return nil, err
+		s.Logger.Error("Nonce generation failed", zap.Error(err))
+		return nil, status.Error(codes.Unavailable, "nonce generation failed")
 	}
 	hexNonce := hex.EncodeToString(nonce)
 
@@ -52,7 +53,8 @@
 		Challenge: hexNonce,
 	})
 	if err != nil {
-		return nil, err
+		s := status.Convert(err)
+		return nil, status.Errorf(s.Code(), "attestation failed: %v", s.Message())
 	}
 
 	//TODO(hendrik): Verify response
@@ -62,7 +64,9 @@
 
 	consensusCerts, err := s.consensusService.IssueCertificate(req.Addr)
 	if err != nil {
-		return nil, err
+		// Errors from IssueCertificate are always treated as internal
+		s.Logger.Error("Node certificate issuance failed", zap.String("addr", req.Addr), zap.Error(err))
+		return nil, status.Error(codes.Internal, "could not issue node certificate")
 	}
 
 	// TODO(leo): fetch remote hostname rather than using the addr
@@ -71,7 +75,7 @@
 	// Add new node to local etcd cluster.
 	memberID, err := s.consensusService.AddMember(ctx, name, fmt.Sprintf("https://%s:%d", req.Addr, s.config.Port))
 	if err != nil {
-		return nil, err
+		return nil, status.Errorf(codes.Unavailable, "failed to add node to etcd cluster: %v", err)
 	}
 
 	s.Logger.Info("Added new node to consensus cluster; sending cluster join request to node",
@@ -93,7 +97,7 @@
 		if errRemove != nil || errRevoke != nil {
 			return nil, fmt.Errorf("rollback failed after failed provisioning; err=%v; err_rb=%v; err_revoke=%v", err, errRemove, errRevoke)
 		}
-		return nil, err
+		return nil, status.Errorf(codes.Unavailable, "failed to join etcd cluster with node: %v", err)
 	}
 	s.Logger.Info("Fully provisioned new node",
 		zap.String("host", req.Addr),
@@ -104,7 +108,7 @@
 }
 
 func (s *Server) RemoveNode(context.Context, *schema.RemoveNodeRequest) (*schema.RemoveNodeResponse, error) {
-	panic("implement me")
+	return nil, status.Error(codes.Unimplemented, "unimplemented")
 }
 
 func (s *Server) ListNodes(context.Context, *schema.ListNodesRequest) (*schema.ListNodesResponse, error) {
diff --git a/core/internal/node/BUILD.bazel b/core/internal/node/BUILD.bazel
index c83d095..529c6ee 100644
--- a/core/internal/node/BUILD.bazel
+++ b/core/internal/node/BUILD.bazel
@@ -16,6 +16,8 @@
         "//core/internal/kubernetes:go_default_library",
         "//core/internal/storage:go_default_library",
         "@com_github_google_uuid//:go_default_library",
+        "@org_golang_google_grpc//codes:go_default_library",
+        "@org_golang_google_grpc//status:go_default_library",
         "@org_uber_go_zap//:go_default_library",
     ],
 )
diff --git a/core/internal/node/setup.go b/core/internal/node/setup.go
index 98873d3..285046a 100644
--- a/core/internal/node/setup.go
+++ b/core/internal/node/setup.go
@@ -20,18 +20,18 @@
 	"git.monogon.dev/source/nexantic.git/core/generated/api"
 	"git.monogon.dev/source/nexantic.git/core/internal/common"
 	"git.monogon.dev/source/nexantic.git/core/internal/storage"
-
-	"errors"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
 
 	"go.uber.org/zap"
 )
 
 var (
-	ErrConsensusAlreadyProvisioned = errors.New("consensus is already provisioned; make sure the data folder is empty")
-	ErrAlreadySetup                = errors.New("node is already set up")
-	ErrNotInJoinMode               = errors.New("node is not in the cluster join mode")
-	ErrTrustNotInitialized         = errors.New("trust backend not initialized")
-	ErrStorageNotInitialized       = errors.New("storage not initialized")
+	ErrConsensusAlreadyProvisioned = status.Error(codes.FailedPrecondition, "consensus is already provisioned; make sure the data folder is empty")
+	ErrAlreadySetup                = status.Error(codes.FailedPrecondition, "node is already set up")
+	ErrNotInJoinMode               = status.Error(codes.FailedPrecondition, "node is not in the cluster join mode")
+	ErrTrustNotInitialized         = status.Error(codes.FailedPrecondition, "trust backend not initialized")
+	ErrStorageNotInitialized       = status.Error(codes.FailedPrecondition, "storage not initialized")
 )
 
 func (s *SmalltownNode) CurrentState() common.SmalltownState {
