diff --git a/id/id.go b/id/id.go
index 920b4edba74cd60c9bf62733de553722d22c66f4..d3212dea25ce20057a038d3ff4d6d9281a6e869e 100644
--- a/id/id.go
+++ b/id/id.go
@@ -93,42 +93,45 @@ func Join(parts ...string) string {
 	return s
 }
 
-func (id *ID) FromMap(m map[string]any) error {
+func FromMap(m map[string]any) (*ID, error) {
 	if m == nil {
-		return errors.New("nil map")
+		return nil, errors.New("nil map")
 	}
 
+	v := new(ID)
+
 	switch m["type"] {
 	case Organization:
-		id.Descriptor = new(OrganizationID)
+		v.Descriptor = new(OrganizationID)
 	case Service:
-		id.Descriptor = new(ServiceID)
+		v.Descriptor = new(ServiceID)
 	case User:
-		id.Descriptor = new(UserID)
+		v.Descriptor = new(UserID)
 	case Space:
-		id.Descriptor = new(SpaceID)
+		v.Descriptor = new(SpaceID)
 	case Environment:
-		id.Descriptor = new(EnvironmentID)
+		v.Descriptor = new(EnvironmentID)
 	case Client:
-		id.Descriptor = new(ClientID)
+		v.Descriptor = new(ClientID)
 	case Role:
-		id.Descriptor = new(RoleID)
+		v.Descriptor = new(RoleID)
 	case Collection:
-		id.Descriptor = new(CollectionID)
+		v.Descriptor = new(CollectionID)
 	case Schema:
-		id.Descriptor = new(SchemaID)
+		v.Descriptor = new(SchemaID)
 	case Item:
-		id.Descriptor = new(ItemID)
+		v.Descriptor = new(ItemID)
 	case Revision:
-		id.Descriptor = new(RevisionID)
+		v.Descriptor = new(RevisionID)
 	case Field:
-		id.Descriptor = new(FieldID)
+		v.Descriptor = new(FieldID)
 	default:
-		return errors.New("unknown type")
+		return nil, errors.New("unknown type")
 	}
-	if err := id.Descriptor.FromMap(m); err != nil {
-		return err
+
+	if err := v.Descriptor.FromMap(m); err != nil {
+		return nil, err
 	}
 
-	return nil
+	return v, nil
 }
diff --git a/id/id_test.go b/id/id_test.go
index 757586d87ad94c461fa74291d2bc928fb806d337..a5a75cc5f563efaabbe79ddb40b2f770d4afc314 100644
--- a/id/id_test.go
+++ b/id/id_test.go
@@ -3,6 +3,7 @@ package id
 import (
 	"testing"
 
+	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
 
@@ -282,10 +283,10 @@ func Test_Map(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			v := new(ID)
-			_ = v.FromMap(tt.id.ToMap())
-			require.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению")
-			require.Equal(t, v.ToMap(), tt.id.ToMap())
+			v, err := FromMap(tt.id.ToMap())
+			require.NoError(t, err)
+			assert.Equal(t, tt.id, v, "проверка FromMap для типа ID, должен быть равен исходному значению")
+			assert.Equal(t, v.ToMap(), tt.id.ToMap())
 		})
 	}
 }