diff --git a/api/buf.gen.yaml b/api/buf.gen.yaml
index 1fa7ad6..4cfe657 100644
--- a/api/buf.gen.yaml
+++ b/api/buf.gen.yaml
@@ -22,3 +22,6 @@
   - name: go
     out: proto
     opt: paths=source_relative
+  - name: go-grpc
+    out: proto
+    opt: paths=source_relative
diff --git a/api/buf.yaml b/api/buf.yaml
index 8584150..b52b133 100644
--- a/api/buf.yaml
+++ b/api/buf.yaml
@@ -24,9 +24,6 @@
 lint:
   use:
     - DEFAULT
-  except:
-    - RPC_REQUEST_STANDARD_NAME
-    - RPC_RESPONSE_STANDARD_NAME
 breaking:
   use:
     - FILE
\ No newline at end of file
diff --git a/api/proto/banyandb/v1/query.pb.go b/api/proto/banyandb/v1/query.pb.go
index 83b5fda..4fd3288 100644
--- a/api/proto/banyandb/v1/query.pb.go
+++ b/api/proto/banyandb/v1/query.pb.go
@@ -710,8 +710,8 @@
 	return nil
 }
 
-// EntityCriteria is the request contract for query.
-type EntityCriteria struct {
+// QueryRequest is the request contract for query.
+type QueryRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -737,8 +737,8 @@
 	Projection *Projection `protobuf:"bytes,7,opt,name=projection,proto3" json:"projection,omitempty"`
 }
 
-func (x *EntityCriteria) Reset() {
-	*x = EntityCriteria{}
+func (x *QueryRequest) Reset() {
+	*x = QueryRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_banyandb_v1_query_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -746,13 +746,13 @@
 	}
 }
 
-func (x *EntityCriteria) String() string {
+func (x *QueryRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*EntityCriteria) ProtoMessage() {}
+func (*QueryRequest) ProtoMessage() {}
 
-func (x *EntityCriteria) ProtoReflect() protoreflect.Message {
+func (x *QueryRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_banyandb_v1_query_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -764,54 +764,54 @@
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use EntityCriteria.ProtoReflect.Descriptor instead.
-func (*EntityCriteria) Descriptor() ([]byte, []int) {
+// Deprecated: Use QueryRequest.ProtoReflect.Descriptor instead.
+func (*QueryRequest) Descriptor() ([]byte, []int) {
 	return file_banyandb_v1_query_proto_rawDescGZIP(), []int{9}
 }
 
-func (x *EntityCriteria) GetMetadata() *Metadata {
+func (x *QueryRequest) GetMetadata() *Metadata {
 	if x != nil {
 		return x.Metadata
 	}
 	return nil
 }
 
-func (x *EntityCriteria) GetTimeRange() *TimeRange {
+func (x *QueryRequest) GetTimeRange() *TimeRange {
 	if x != nil {
 		return x.TimeRange
 	}
 	return nil
 }
 
-func (x *EntityCriteria) GetOffset() uint32 {
+func (x *QueryRequest) GetOffset() uint32 {
 	if x != nil {
 		return x.Offset
 	}
 	return 0
 }
 
-func (x *EntityCriteria) GetLimit() uint32 {
+func (x *QueryRequest) GetLimit() uint32 {
 	if x != nil {
 		return x.Limit
 	}
 	return 0
 }
 
-func (x *EntityCriteria) GetOrderBy() *QueryOrder {
+func (x *QueryRequest) GetOrderBy() *QueryOrder {
 	if x != nil {
 		return x.OrderBy
 	}
 	return nil
 }
 
-func (x *EntityCriteria) GetFields() []*PairQuery {
+func (x *QueryRequest) GetFields() []*PairQuery {
 	if x != nil {
 		return x.Fields
 	}
 	return nil
 }
 
-func (x *EntityCriteria) GetProjection() *Projection {
+func (x *QueryRequest) GetProjection() *Projection {
 	if x != nil {
 		return x.Projection
 	}
@@ -895,34 +895,34 @@
 	0x70, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18,
 	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
 	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xc5, 0x02, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x69, 0x74,
-	0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74,
-	0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x61,
-	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
-	0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0a,
-	0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x16, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x54,
-	0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61,
-	0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c,
-	0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69,
-	0x74, 0x12, 0x32, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76,
-	0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x07, 0x6f, 0x72,
-	0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18,
-	0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
-	0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66,
-	0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x61, 0x6e, 0x79,
-	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x60,
-	0x0a, 0x1e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79,
-	0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
-	0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61,
-	0x63, 0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xc3, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+	0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x69,
+	0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
+	0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d,
+	0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67,
+	0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d,
+	0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12,
+	0x32, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x17, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e,
+	0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65,
+	0x72, 0x42, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76,
+	0x31, 0x2e, 0x50, 0x61, 0x69, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65,
+	0x6c, 0x64, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+	0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x60, 0x0a, 0x1e,
+	0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
+	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x5a, 0x3e,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68,
+	0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e,
+	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
+	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -951,7 +951,7 @@
 	(*QueryResponse)(nil),         // 8: banyandb.v1.QueryResponse
 	(*Projection)(nil),            // 9: banyandb.v1.Projection
 	(*TimeRange)(nil),             // 10: banyandb.v1.TimeRange
-	(*EntityCriteria)(nil),        // 11: banyandb.v1.EntityCriteria
+	(*QueryRequest)(nil),          // 11: banyandb.v1.QueryRequest
 	(*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp
 	(*Metadata)(nil),              // 13: banyandb.v1.Metadata
 }
@@ -966,11 +966,11 @@
 	7,  // 7: banyandb.v1.QueryResponse.entities:type_name -> banyandb.v1.Entity
 	12, // 8: banyandb.v1.TimeRange.begin:type_name -> google.protobuf.Timestamp
 	12, // 9: banyandb.v1.TimeRange.end:type_name -> google.protobuf.Timestamp
-	13, // 10: banyandb.v1.EntityCriteria.metadata:type_name -> banyandb.v1.Metadata
-	10, // 11: banyandb.v1.EntityCriteria.time_range:type_name -> banyandb.v1.TimeRange
-	6,  // 12: banyandb.v1.EntityCriteria.order_by:type_name -> banyandb.v1.QueryOrder
-	5,  // 13: banyandb.v1.EntityCriteria.fields:type_name -> banyandb.v1.PairQuery
-	9,  // 14: banyandb.v1.EntityCriteria.projection:type_name -> banyandb.v1.Projection
+	13, // 10: banyandb.v1.QueryRequest.metadata:type_name -> banyandb.v1.Metadata
+	10, // 11: banyandb.v1.QueryRequest.time_range:type_name -> banyandb.v1.TimeRange
+	6,  // 12: banyandb.v1.QueryRequest.order_by:type_name -> banyandb.v1.QueryOrder
+	5,  // 13: banyandb.v1.QueryRequest.fields:type_name -> banyandb.v1.PairQuery
+	9,  // 14: banyandb.v1.QueryRequest.projection:type_name -> banyandb.v1.Projection
 	15, // [15:15] is the sub-list for method output_type
 	15, // [15:15] is the sub-list for method input_type
 	15, // [15:15] is the sub-list for extension type_name
@@ -1094,7 +1094,7 @@
 			}
 		}
 		file_banyandb_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*EntityCriteria); i {
+			switch v := v.(*QueryRequest); i {
 			case 0:
 				return &v.state
 			case 1:
diff --git a/api/proto/banyandb/v1/query.proto b/api/proto/banyandb/v1/query.proto
index 58768d7..6a64fb6 100644
--- a/api/proto/banyandb/v1/query.proto
+++ b/api/proto/banyandb/v1/query.proto
@@ -123,8 +123,8 @@
   google.protobuf.Timestamp end = 2;
 }
 
-// EntityCriteria is the request contract for query.
-message EntityCriteria {
+// QueryRequest is the request contract for query.
+message QueryRequest {
   // metadata is required
   Metadata metadata = 1;
   // time_range is a range query with begin/end time of entities in the timeunit of nanoseconds.
diff --git a/api/proto/banyandb/v1/rpc.pb.go b/api/proto/banyandb/v1/rpc.pb.go
index 157e4cc..6f7e175 100644
--- a/api/proto/banyandb/v1/rpc.pb.go
+++ b/api/proto/banyandb/v1/rpc.pb.go
@@ -28,7 +28,6 @@
 
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	emptypb "google.golang.org/protobuf/types/known/emptypb"
 )
 
 const (
@@ -43,40 +42,39 @@
 var file_banyandb_v1_rpc_proto_rawDesc = []byte{
 	0x0a, 0x15, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x70,
 	0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x1a, 0x17, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x71,
-	0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62, 0x61, 0x6e, 0x79,
-	0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x32, 0x8f, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1b, 0x2e,
-	0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69,
-	0x74, 0x79, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x1a, 0x1a, 0x2e, 0x62, 0x61, 0x6e,
-	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12,
-	0x18, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72,
-	0x69, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
-	0x79, 0x28, 0x01, 0x30, 0x01, 0x42, 0x60, 0x0a, 0x1e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61,
-	0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62,
-	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
-	0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61,
-	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61,
-	0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x62, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76,
+	0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x62,
+	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x72, 0x69, 0x74, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x92, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x12, 0x19, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x51,
+	0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65,
+	0x12, 0x19, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x57,
+	0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x61,
+	0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x60, 0x0a, 0x1e, 0x6f,
+	0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x5a, 0x3e, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
+	0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62,
+	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var file_banyandb_v1_rpc_proto_goTypes = []interface{}{
-	(*EntityCriteria)(nil), // 0: banyandb.v1.EntityCriteria
-	(*WriteEntity)(nil),    // 1: banyandb.v1.WriteEntity
-	(*QueryResponse)(nil),  // 2: banyandb.v1.QueryResponse
-	(*emptypb.Empty)(nil),  // 3: google.protobuf.Empty
+	(*QueryRequest)(nil),  // 0: banyandb.v1.QueryRequest
+	(*WriteRequest)(nil),  // 1: banyandb.v1.WriteRequest
+	(*QueryResponse)(nil), // 2: banyandb.v1.QueryResponse
+	(*WriteResponse)(nil), // 3: banyandb.v1.WriteResponse
 }
 var file_banyandb_v1_rpc_proto_depIdxs = []int32{
-	0, // 0: banyandb.v1.TraceService.Query:input_type -> banyandb.v1.EntityCriteria
-	1, // 1: banyandb.v1.TraceService.Write:input_type -> banyandb.v1.WriteEntity
+	0, // 0: banyandb.v1.TraceService.Query:input_type -> banyandb.v1.QueryRequest
+	1, // 1: banyandb.v1.TraceService.Write:input_type -> banyandb.v1.WriteRequest
 	2, // 2: banyandb.v1.TraceService.Query:output_type -> banyandb.v1.QueryResponse
-	3, // 3: banyandb.v1.TraceService.Write:output_type -> google.protobuf.Empty
+	3, // 3: banyandb.v1.TraceService.Write:output_type -> banyandb.v1.WriteResponse
 	2, // [2:4] is the sub-list for method output_type
 	0, // [0:2] is the sub-list for method input_type
 	0, // [0:0] is the sub-list for extension type_name
diff --git a/api/proto/banyandb/v1/rpc.proto b/api/proto/banyandb/v1/rpc.proto
index 2b705cf..85fafd8 100644
--- a/api/proto/banyandb/v1/rpc.proto
+++ b/api/proto/banyandb/v1/rpc.proto
@@ -22,11 +22,10 @@
 
 package banyandb.v1;
 
-import "google/protobuf/empty.proto";
 import "banyandb/v1/query.proto";
 import "banyandb/v1/write.proto";
 
 service TraceService {
-  rpc Query(banyandb.v1.EntityCriteria) returns (banyandb.v1.QueryResponse);
-  rpc Write(stream banyandb.v1.WriteEntity) returns (stream google.protobuf.Empty);
+  rpc Query(banyandb.v1.QueryRequest) returns (banyandb.v1.QueryResponse);
+  rpc Write(stream banyandb.v1.WriteRequest) returns (stream banyandb.v1.WriteResponse);
 }
\ No newline at end of file
diff --git a/api/proto/banyandb/v1/rpc_grpc.pb.go b/api/proto/banyandb/v1/rpc_grpc.pb.go
index a5657c0..9fb2551 100644
--- a/api/proto/banyandb/v1/rpc_grpc.pb.go
+++ b/api/proto/banyandb/v1/rpc_grpc.pb.go
@@ -8,7 +8,6 @@
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
-	emptypb "google.golang.org/protobuf/types/known/emptypb"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -16,154 +15,154 @@
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
-// TraceClient is the client API for Trace service.
+// TraceServiceClient is the client API for TraceService service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-type TraceClient interface {
-	Query(ctx context.Context, in *EntityCriteria, opts ...grpc.CallOption) (*QueryResponse, error)
-	Write(ctx context.Context, opts ...grpc.CallOption) (Trace_WriteClient, error)
+type TraceServiceClient interface {
+	Query(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
+	Write(ctx context.Context, opts ...grpc.CallOption) (TraceService_WriteClient, error)
 }
 
-type traceClient struct {
+type traceServiceClient struct {
 	cc grpc.ClientConnInterface
 }
 
-func NewTraceClient(cc grpc.ClientConnInterface) TraceClient {
-	return &traceClient{cc}
+func NewTraceServiceClient(cc grpc.ClientConnInterface) TraceServiceClient {
+	return &traceServiceClient{cc}
 }
 
-func (c *traceClient) Query(ctx context.Context, in *EntityCriteria, opts ...grpc.CallOption) (*QueryResponse, error) {
+func (c *traceServiceClient) Query(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
 	out := new(QueryResponse)
-	err := c.cc.Invoke(ctx, "/banyandb.v1.Trace/Query", in, out, opts...)
+	err := c.cc.Invoke(ctx, "/banyandb.v1.TraceService/Query", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
 	return out, nil
 }
 
-func (c *traceClient) Write(ctx context.Context, opts ...grpc.CallOption) (Trace_WriteClient, error) {
-	stream, err := c.cc.NewStream(ctx, &Trace_ServiceDesc.Streams[0], "/banyandb.v1.Trace/Write", opts...)
+func (c *traceServiceClient) Write(ctx context.Context, opts ...grpc.CallOption) (TraceService_WriteClient, error) {
+	stream, err := c.cc.NewStream(ctx, &TraceService_ServiceDesc.Streams[0], "/banyandb.v1.TraceService/Write", opts...)
 	if err != nil {
 		return nil, err
 	}
-	x := &traceWriteClient{stream}
+	x := &traceServiceWriteClient{stream}
 	return x, nil
 }
 
-type Trace_WriteClient interface {
-	Send(*WriteEntity) error
-	Recv() (*emptypb.Empty, error)
+type TraceService_WriteClient interface {
+	Send(*WriteRequest) error
+	Recv() (*WriteResponse, error)
 	grpc.ClientStream
 }
 
-type traceWriteClient struct {
+type traceServiceWriteClient struct {
 	grpc.ClientStream
 }
 
-func (x *traceWriteClient) Send(m *WriteEntity) error {
+func (x *traceServiceWriteClient) Send(m *WriteRequest) error {
 	return x.ClientStream.SendMsg(m)
 }
 
-func (x *traceWriteClient) Recv() (*emptypb.Empty, error) {
-	m := new(emptypb.Empty)
+func (x *traceServiceWriteClient) Recv() (*WriteResponse, error) {
+	m := new(WriteResponse)
 	if err := x.ClientStream.RecvMsg(m); err != nil {
 		return nil, err
 	}
 	return m, nil
 }
 
-// TraceServer is the server API for Trace service.
-// All implementations must embed UnimplementedTraceServer
+// TraceServiceServer is the server API for TraceService service.
+// All implementations must embed UnimplementedTraceServiceServer
 // for forward compatibility
-type TraceServer interface {
-	Query(context.Context, *EntityCriteria) (*QueryResponse, error)
-	Write(Trace_WriteServer) error
-	mustEmbedUnimplementedTraceServer()
+type TraceServiceServer interface {
+	Query(context.Context, *QueryRequest) (*QueryResponse, error)
+	Write(TraceService_WriteServer) error
+	mustEmbedUnimplementedTraceServiceServer()
 }
 
-// UnimplementedTraceServer must be embedded to have forward compatible implementations.
-type UnimplementedTraceServer struct {
+// UnimplementedTraceServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedTraceServiceServer struct {
 }
 
-func (UnimplementedTraceServer) Query(context.Context, *EntityCriteria) (*QueryResponse, error) {
+func (UnimplementedTraceServiceServer) Query(context.Context, *QueryRequest) (*QueryResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Query not implemented")
 }
-func (UnimplementedTraceServer) Write(Trace_WriteServer) error {
+func (UnimplementedTraceServiceServer) Write(TraceService_WriteServer) error {
 	return status.Errorf(codes.Unimplemented, "method Write not implemented")
 }
-func (UnimplementedTraceServer) mustEmbedUnimplementedTraceServer() {}
+func (UnimplementedTraceServiceServer) mustEmbedUnimplementedTraceServiceServer() {}
 
-// UnsafeTraceServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to TraceServer will
+// UnsafeTraceServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to TraceServiceServer will
 // result in compilation errors.
-type UnsafeTraceServer interface {
-	mustEmbedUnimplementedTraceServer()
+type UnsafeTraceServiceServer interface {
+	mustEmbedUnimplementedTraceServiceServer()
 }
 
-func RegisterTraceServer(s grpc.ServiceRegistrar, srv TraceServer) {
-	s.RegisterService(&Trace_ServiceDesc, srv)
+func RegisterTraceServiceServer(s grpc.ServiceRegistrar, srv TraceServiceServer) {
+	s.RegisterService(&TraceService_ServiceDesc, srv)
 }
 
-func _Trace_Query_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(EntityCriteria)
+func _TraceService_Query_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
 	if interceptor == nil {
-		return srv.(TraceServer).Query(ctx, in)
+		return srv.(TraceServiceServer).Query(ctx, in)
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/banyandb.v1.Trace/Query",
+		FullMethod: "/banyandb.v1.TraceService/Query",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(TraceServer).Query(ctx, req.(*EntityCriteria))
+		return srv.(TraceServiceServer).Query(ctx, req.(*QueryRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
 
-func _Trace_Write_Handler(srv interface{}, stream grpc.ServerStream) error {
-	return srv.(TraceServer).Write(&traceWriteServer{stream})
+func _TraceService_Write_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(TraceServiceServer).Write(&traceServiceWriteServer{stream})
 }
 
-type Trace_WriteServer interface {
-	Send(*emptypb.Empty) error
-	Recv() (*WriteEntity, error)
+type TraceService_WriteServer interface {
+	Send(*WriteResponse) error
+	Recv() (*WriteRequest, error)
 	grpc.ServerStream
 }
 
-type traceWriteServer struct {
+type traceServiceWriteServer struct {
 	grpc.ServerStream
 }
 
-func (x *traceWriteServer) Send(m *emptypb.Empty) error {
+func (x *traceServiceWriteServer) Send(m *WriteResponse) error {
 	return x.ServerStream.SendMsg(m)
 }
 
-func (x *traceWriteServer) Recv() (*WriteEntity, error) {
-	m := new(WriteEntity)
+func (x *traceServiceWriteServer) Recv() (*WriteRequest, error) {
+	m := new(WriteRequest)
 	if err := x.ServerStream.RecvMsg(m); err != nil {
 		return nil, err
 	}
 	return m, nil
 }
 
-// Trace_ServiceDesc is the grpc.ServiceDesc for Trace service.
+// TraceService_ServiceDesc is the grpc.ServiceDesc for TraceService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
-var Trace_ServiceDesc = grpc.ServiceDesc{
-	ServiceName: "banyandb.v1.Trace",
-	HandlerType: (*TraceServer)(nil),
+var TraceService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "banyandb.v1.TraceService",
+	HandlerType: (*TraceServiceServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
 			MethodName: "Query",
-			Handler:    _Trace_Query_Handler,
+			Handler:    _TraceService_Query_Handler,
 		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
 			StreamName:    "Write",
-			Handler:       _Trace_Write_Handler,
+			Handler:       _TraceService_Write_Handler,
 			ServerStreams: true,
 			ClientStreams: true,
 		},
diff --git a/api/proto/banyandb/v1/write.pb.go b/api/proto/banyandb/v1/write.pb.go
index 74c26da..6808076 100644
--- a/api/proto/banyandb/v1/write.pb.go
+++ b/api/proto/banyandb/v1/write.pb.go
@@ -430,7 +430,7 @@
 	return nil
 }
 
-type WriteEntity struct {
+type WriteRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
@@ -441,8 +441,8 @@
 	Entity *EntityValue `protobuf:"bytes,2,opt,name=entity,proto3" json:"entity,omitempty"`
 }
 
-func (x *WriteEntity) Reset() {
-	*x = WriteEntity{}
+func (x *WriteRequest) Reset() {
+	*x = WriteRequest{}
 	if protoimpl.UnsafeEnabled {
 		mi := &file_banyandb_v1_write_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -450,13 +450,13 @@
 	}
 }
 
-func (x *WriteEntity) String() string {
+func (x *WriteRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*WriteEntity) ProtoMessage() {}
+func (*WriteRequest) ProtoMessage() {}
 
-func (x *WriteEntity) ProtoReflect() protoreflect.Message {
+func (x *WriteRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_banyandb_v1_write_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -468,25 +468,63 @@
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use WriteEntity.ProtoReflect.Descriptor instead.
-func (*WriteEntity) Descriptor() ([]byte, []int) {
+// Deprecated: Use WriteRequest.ProtoReflect.Descriptor instead.
+func (*WriteRequest) Descriptor() ([]byte, []int) {
 	return file_banyandb_v1_write_proto_rawDescGZIP(), []int{6}
 }
 
-func (x *WriteEntity) GetMetadata() *Metadata {
+func (x *WriteRequest) GetMetadata() *Metadata {
 	if x != nil {
 		return x.Metadata
 	}
 	return nil
 }
 
-func (x *WriteEntity) GetEntity() *EntityValue {
+func (x *WriteRequest) GetEntity() *EntityValue {
 	if x != nil {
 		return x.Entity
 	}
 	return nil
 }
 
+type WriteResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *WriteResponse) Reset() {
+	*x = WriteResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_banyandb_v1_write_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *WriteResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WriteResponse) ProtoMessage() {}
+
+func (x *WriteResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_banyandb_v1_write_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use WriteResponse.ProtoReflect.Descriptor instead.
+func (*WriteResponse) Descriptor() ([]byte, []int) {
+	return file_banyandb_v1_write_proto_rawDescGZIP(), []int{7}
+}
+
 var File_banyandb_v1_write_proto protoreflect.FileDescriptor
 
 var file_banyandb_v1_write_proto_rawDesc = []byte{
@@ -533,21 +571,22 @@
 	0x61, 0x74, 0x61, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x06, 0x66, 0x69, 0x65,
 	0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x61, 0x6e, 0x79,
 	0x61, 0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66,
-	0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x72, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x6e,
-	0x74, 0x69, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
-	0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74,
-	0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x60, 0x0a, 0x1e, 0x6f, 0x72, 0x67,
-	0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69,
-	0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x5a, 0x3e, 0x67, 0x69, 0x74,
-	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x73,
-	0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
-	0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x6e,
-	0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x73, 0x0a, 0x0c, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+	0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08,
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69,
+	0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+	0x6e, 0x64, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x72,
+	0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x60, 0x0a, 0x1e, 0x6f,
+	0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x5a, 0x3e, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
+	0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79,
+	0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62,
+	0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x31, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -562,7 +601,7 @@
 	return file_banyandb_v1_write_proto_rawDescData
 }
 
-var file_banyandb_v1_write_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_banyandb_v1_write_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
 var file_banyandb_v1_write_proto_goTypes = []interface{}{
 	(*Str)(nil),                   // 0: banyandb.v1.Str
 	(*Int)(nil),                   // 1: banyandb.v1.Int
@@ -570,26 +609,27 @@
 	(*IntArray)(nil),              // 3: banyandb.v1.IntArray
 	(*Field)(nil),                 // 4: banyandb.v1.Field
 	(*EntityValue)(nil),           // 5: banyandb.v1.EntityValue
-	(*WriteEntity)(nil),           // 6: banyandb.v1.WriteEntity
-	(structpb.NullValue)(0),       // 7: google.protobuf.NullValue
-	(*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp
-	(*Metadata)(nil),              // 9: banyandb.v1.Metadata
+	(*WriteRequest)(nil),          // 6: banyandb.v1.WriteRequest
+	(*WriteResponse)(nil),         // 7: banyandb.v1.WriteResponse
+	(structpb.NullValue)(0),       // 8: google.protobuf.NullValue
+	(*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp
+	(*Metadata)(nil),              // 10: banyandb.v1.Metadata
 }
 var file_banyandb_v1_write_proto_depIdxs = []int32{
-	7, // 0: banyandb.v1.Field.null:type_name -> google.protobuf.NullValue
-	0, // 1: banyandb.v1.Field.str:type_name -> banyandb.v1.Str
-	2, // 2: banyandb.v1.Field.str_array:type_name -> banyandb.v1.StrArray
-	1, // 3: banyandb.v1.Field.int:type_name -> banyandb.v1.Int
-	3, // 4: banyandb.v1.Field.int_array:type_name -> banyandb.v1.IntArray
-	8, // 5: banyandb.v1.EntityValue.timestamp:type_name -> google.protobuf.Timestamp
-	4, // 6: banyandb.v1.EntityValue.fields:type_name -> banyandb.v1.Field
-	9, // 7: banyandb.v1.WriteEntity.metadata:type_name -> banyandb.v1.Metadata
-	5, // 8: banyandb.v1.WriteEntity.entity:type_name -> banyandb.v1.EntityValue
-	9, // [9:9] is the sub-list for method output_type
-	9, // [9:9] is the sub-list for method input_type
-	9, // [9:9] is the sub-list for extension type_name
-	9, // [9:9] is the sub-list for extension extendee
-	0, // [0:9] is the sub-list for field type_name
+	8,  // 0: banyandb.v1.Field.null:type_name -> google.protobuf.NullValue
+	0,  // 1: banyandb.v1.Field.str:type_name -> banyandb.v1.Str
+	2,  // 2: banyandb.v1.Field.str_array:type_name -> banyandb.v1.StrArray
+	1,  // 3: banyandb.v1.Field.int:type_name -> banyandb.v1.Int
+	3,  // 4: banyandb.v1.Field.int_array:type_name -> banyandb.v1.IntArray
+	9,  // 5: banyandb.v1.EntityValue.timestamp:type_name -> google.protobuf.Timestamp
+	4,  // 6: banyandb.v1.EntityValue.fields:type_name -> banyandb.v1.Field
+	10, // 7: banyandb.v1.WriteRequest.metadata:type_name -> banyandb.v1.Metadata
+	5,  // 8: banyandb.v1.WriteRequest.entity:type_name -> banyandb.v1.EntityValue
+	9,  // [9:9] is the sub-list for method output_type
+	9,  // [9:9] is the sub-list for method input_type
+	9,  // [9:9] is the sub-list for extension type_name
+	9,  // [9:9] is the sub-list for extension extendee
+	0,  // [0:9] is the sub-list for field type_name
 }
 
 func init() { file_banyandb_v1_write_proto_init() }
@@ -672,7 +712,19 @@
 			}
 		}
 		file_banyandb_v1_write_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*WriteEntity); i {
+			switch v := v.(*WriteRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_banyandb_v1_write_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*WriteResponse); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -697,7 +749,7 @@
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_banyandb_v1_write_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   7,
+			NumMessages:   8,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/api/proto/banyandb/v1/write.proto b/api/proto/banyandb/v1/write.proto
index 7eb4a48..3d7ddc0 100644
--- a/api/proto/banyandb/v1/write.proto
+++ b/api/proto/banyandb/v1/write.proto
@@ -68,9 +68,11 @@
   repeated Field fields = 4;
 }
 
-message WriteEntity {
+message WriteRequest {
   // the metadata is only required in the first write.
   Metadata metadata = 1;
   // the entity is required.
   EntityValue entity = 2;
-}
\ No newline at end of file
+}
+
+message WriteResponse {}
\ No newline at end of file
diff --git a/banyand/liaison/grpc/grpc.go b/banyand/liaison/grpc/grpc.go
index 9288b82..91a75d7 100644
--- a/banyand/liaison/grpc/grpc.go
+++ b/banyand/liaison/grpc/grpc.go
@@ -119,7 +119,7 @@
 
 	s.ser = grpc.NewServer()
 	// TODO: add server implementation here
-	v1.RegisterTraceServer(s.ser, v1.UnimplementedTraceServer{})
+	v1.RegisterTraceServiceServer(s.ser, v1.UnimplementedTraceServiceServer{})
 
 	return s.ser.Serve(lis)
 }
diff --git a/pkg/pb/query.go b/pkg/pb/query.go
index 7834494..f24e99f 100644
--- a/pkg/pb/query.go
+++ b/pkg/pb/query.go
@@ -39,17 +39,17 @@
 	}
 )
 
-type EntityCriteriaBuilder struct {
-	ec *v1.EntityCriteria
+type QueryRequestBuilder struct {
+	ec *v1.QueryRequest
 }
 
-func NewEntityCriteriaBuilder() *EntityCriteriaBuilder {
-	return &EntityCriteriaBuilder{
-		ec: &v1.EntityCriteria{},
+func NewQueryRequestBuilder() *QueryRequestBuilder {
+	return &QueryRequestBuilder{
+		ec: &v1.QueryRequest{},
 	}
 }
 
-func (b *EntityCriteriaBuilder) Metadata(group, name string) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) Metadata(group, name string) *QueryRequestBuilder {
 	b.ec.Metadata = &v1.Metadata{
 		Group: group,
 		Name:  name,
@@ -57,17 +57,17 @@
 	return b
 }
 
-func (b *EntityCriteriaBuilder) Limit(limit uint32) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) Limit(limit uint32) *QueryRequestBuilder {
 	b.ec.Limit = limit
 	return b
 }
 
-func (b *EntityCriteriaBuilder) Offset(offset uint32) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) Offset(offset uint32) *QueryRequestBuilder {
 	b.ec.Offset = offset
 	return b
 }
 
-func (b *EntityCriteriaBuilder) Fields(items ...interface{}) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) Fields(items ...interface{}) *QueryRequestBuilder {
 	if len(items)%3 != 0 {
 		panic("expect even number of arguments")
 	}
@@ -199,12 +199,12 @@
 	}
 }
 
-func (b *EntityCriteriaBuilder) Projection(projections ...string) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) Projection(projections ...string) *QueryRequestBuilder {
 	b.ec.Projection = &v1.Projection{KeyNames: projections}
 	return b
 }
 
-func (b *EntityCriteriaBuilder) OrderBy(fieldName string, sort v1.QueryOrder_Sort) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) OrderBy(fieldName string, sort v1.QueryOrder_Sort) *QueryRequestBuilder {
 	b.ec.OrderBy = &v1.QueryOrder{
 		KeyName: fieldName,
 		Sort:    sort,
@@ -212,7 +212,7 @@
 	return b
 }
 
-func (b *EntityCriteriaBuilder) TimeRange(sT, eT time.Time) *EntityCriteriaBuilder {
+func (b *QueryRequestBuilder) TimeRange(sT, eT time.Time) *QueryRequestBuilder {
 	b.ec.TimeRange = &v1.TimeRange{
 		Begin: timestamppb.New(sT),
 		End:   timestamppb.New(eT),
@@ -220,7 +220,7 @@
 	return b
 }
 
-func (b *EntityCriteriaBuilder) Build() *v1.EntityCriteria {
+func (b *QueryRequestBuilder) Build() *v1.QueryRequest {
 	return b.ec
 }
 
diff --git a/pkg/pb/write.go b/pkg/pb/write.go
index 94ff233..e3b23a8 100644
--- a/pkg/pb/write.go
+++ b/pkg/pb/write.go
@@ -26,15 +26,15 @@
 	"github.com/apache/skywalking-banyandb/pkg/convert"
 )
 
-type WriteEntityBuilder struct {
-	we *v1.WriteEntity
+type WriteRequestBuilder struct {
+	we *v1.WriteRequest
 }
 
-func NewWriteEntityBuilder() *WriteEntityBuilder {
-	return &WriteEntityBuilder{we: &v1.WriteEntity{}}
+func NewWriteEntityBuilder() *WriteRequestBuilder {
+	return &WriteRequestBuilder{we: &v1.WriteRequest{}}
 }
 
-func (web *WriteEntityBuilder) Metadata(group, name string) *WriteEntityBuilder {
+func (web *WriteRequestBuilder) Metadata(group, name string) *WriteRequestBuilder {
 	web.we.Metadata = &v1.Metadata{
 		Group: group,
 		Name:  name,
@@ -42,12 +42,12 @@
 	return web
 }
 
-func (web *WriteEntityBuilder) EntityValue(ev *v1.EntityValue) *WriteEntityBuilder {
+func (web *WriteRequestBuilder) EntityValue(ev *v1.EntityValue) *WriteRequestBuilder {
 	web.we.Entity = ev
 	return web
 }
 
-func (web *WriteEntityBuilder) Build() *v1.WriteEntity {
+func (web *WriteRequestBuilder) Build() *v1.WriteRequest {
 	return web.we
 }
 
diff --git a/pkg/query/logical/analyzer.go b/pkg/query/logical/analyzer.go
index 5d313d9..bb9296f 100644
--- a/pkg/query/logical/analyzer.go
+++ b/pkg/query/logical/analyzer.go
@@ -79,7 +79,7 @@
 	return s, nil
 }
 
-func (a *Analyzer) Analyze(_ context.Context, criteria *apiv1.EntityCriteria, traceMetadata *common.Metadata, s Schema) (Plan, error) {
+func (a *Analyzer) Analyze(_ context.Context, criteria *apiv1.QueryRequest, traceMetadata *common.Metadata, s Schema) (Plan, error) {
 	// parse tableScan
 	timeRange := criteria.GetTimeRange()
 
diff --git a/pkg/query/logical/analyzer_test.go b/pkg/query/logical/analyzer_test.go
index 555f94c..485cf84 100644
--- a/pkg/query/logical/analyzer_test.go
+++ b/pkg/query/logical/analyzer_test.go
@@ -40,7 +40,7 @@
 
 	sT, eT := time.Now().Add(-3*time.Hour), time.Now()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(0).
 		Offset(0).
 		Metadata("default", "trace").
@@ -76,7 +76,7 @@
 
 	sT, eT := time.Now().Add(-3*time.Hour), time.Now()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		OrderBy("service_instance_id", apiv1.QueryOrder_SORT_DESC).
@@ -120,7 +120,7 @@
 
 	ana := logical.DefaultAnalyzer()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		Metadata("default", "trace").
@@ -149,7 +149,7 @@
 
 	ana := logical.DefaultAnalyzer()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		OrderBy("service_instance_id", apiv1.QueryOrder_SORT_DESC).
@@ -176,7 +176,7 @@
 
 	ana := logical.DefaultAnalyzer()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		OrderBy("duration", apiv1.QueryOrder_SORT_DESC).
@@ -202,7 +202,7 @@
 
 	ana := logical.DefaultAnalyzer()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		OrderBy("duration", apiv1.QueryOrder_SORT_DESC).
@@ -228,7 +228,7 @@
 
 	ana := logical.DefaultAnalyzer()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(5).
 		Offset(10).
 		Metadata("default", "trace").
diff --git a/pkg/query/logical/common_test.go b/pkg/query/logical/common_test.go
index 33b7493..236897f 100644
--- a/pkg/query/logical/common_test.go
+++ b/pkg/query/logical/common_test.go
@@ -173,7 +173,7 @@
 
 	sT, eT := time.Now().Add(-3*time.Hour), time.Now()
 
-	criteria := pb.NewEntityCriteriaBuilder().
+	criteria := pb.NewQueryRequestBuilder().
 		Limit(0).Offset(0).
 		Metadata("default", "trace").
 		TimeRange(sT, eT).
