diff --git a/pkg/items/item.go b/pkg/items/item.go
index 26aaf54f36ea8056413d7ff01be1eed30c97bd26..ee00425f475464830bb99f9e33e612652cd896cd 100644
--- a/pkg/items/item.go
+++ b/pkg/items/item.go
@@ -296,9 +296,10 @@ func (i *Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) {
 func (i *Item) Decode(ctx context.Context, s *schema.Schema, opts ...field.EncodeOption) (*Item, error) {
 	res := *i
 	var err error
+	opt := field.NewEncodeOptions(opts...)
 	if i.Data != nil {
 		res.Data, err = s.Decode(ctx, i.Data, opts...)
-		if err != nil {
+		if err != nil && !opt.GetDataWithErrors {
 			return nil, err
 		}
 	}
@@ -310,7 +311,7 @@ func (i *Item) Decode(ctx context.Context, s *schema.Schema, opts ...field.Encod
 				continue
 			}
 			dt, err := schema.Decode(ctx, s, v, opts...) //nolint:govet // err shadows
-			if err != nil {
+			if err != nil && !opt.GetDataWithErrors {
 				return nil, err
 			}
 			res.Translations[l] = dt.(map[string]interface{})
diff --git a/pkg/schema/schema.go b/pkg/schema/schema.go
index 57dd8f9beee9021ef02f6164c67dc3554ada1963..5088370d45bfa87f666aa23b8a88672c456ec726 100644
--- a/pkg/schema/schema.go
+++ b/pkg/schema/schema.go
@@ -153,8 +153,9 @@ func (s *Schema) Decode(ctx context.Context, v interface{}, opt ...field.EncodeO
 		return nil, err
 	}
 
+	opts := field.NewEncodeOptions(opt...)
 	v, err := Decode(ctx, s, v, opt...)
-	if err != nil {
+	if err != nil && !opts.GetDataWithErrors {
 		return nil, err
 	}
 	res, _ := v.(map[string]interface{})