diff --git a/models/activitypub/actor.go b/models/activitypub/actor.go
index 3af101b440..13f349faf9 100644
--- a/models/activitypub/actor.go
+++ b/models/activitypub/actor.go
@@ -83,7 +83,7 @@ func (value PersonId) Validate() []string {
 	result = append(result, validation.ValidateOneOf(value.source, []string{"forgejo", "gitea"})...)
 	switch value.source {
 	case "forgejo", "gitea":
-		if !strings.Contains(value.path, "api/v1/activitypub/user-id") {
+		if strings.ToLower(value.path) != "api/v1/activitypub/user-id" {
 			result = append(result, fmt.Sprintf("path has to be a api path"))
 		}
 	}
diff --git a/models/activitypub/actor_test.go b/models/activitypub/actor_test.go
index 2e8663a7ca..4162c2411b 100644
--- a/models/activitypub/actor_test.go
+++ b/models/activitypub/actor_test.go
@@ -37,6 +37,59 @@ func TestNewPersonId(t *testing.T) {
 	}
 }
 
+func TestPersonIdValidation(t *testing.T) {
+	sut := PersonId{
+		source:           "forgejo",
+		schema:           "https",
+		path:             "api/v1/activitypub/user-id",
+		host:             "an.other.host",
+		port:             "",
+		unvalidatedInput: "https://an.other.host/api/v1/activitypub/user-id/",
+	}
+	if sut.Validate()[0] != "Field userId may not be empty" {
+		t.Errorf("validation error expected but was: %v\n", sut.Validate())
+	}
+
+	sut = PersonId{
+		userId:           "1",
+		source:           "forgejox",
+		schema:           "https",
+		path:             "api/v1/activitypub/user-id",
+		host:             "an.other.host",
+		port:             "",
+		unvalidatedInput: "https://an.other.host/api/v1/activitypub/user-id/1",
+	}
+	if sut.Validate()[0] != "Value forgejox is not contained in allowed values [[forgejo gitea]]" {
+		t.Errorf("validation error expected but was: %v\n", sut.Validate())
+	}
+
+	sut = PersonId{
+		userId:           "1",
+		source:           "forgejo",
+		schema:           "https",
+		path:             "api/v1/activitypub/user-idx",
+		host:             "an.other.host",
+		port:             "",
+		unvalidatedInput: "https://an.other.host/api/v1/activitypub/user-id/1",
+	}
+	if sut.Validate()[0] != "path has to be a api path" {
+		t.Errorf("validation error expected but was: %v\n", sut.Validate())
+	}
+
+	sut = PersonId{
+		userId:           "1",
+		source:           "forgejo",
+		schema:           "https",
+		path:             "api/v1/activitypub/user-id",
+		host:             "an.other.host",
+		port:             "",
+		unvalidatedInput: "https://an.other.host/api/v1/activitypub/user-id/1?illegal=action",
+	}
+	if sut.Validate()[0] != "not all input: \"https://an.other.host/api/v1/activitypub/user-id/1?illegal=action\" was parsed: \"https://an.other.host/api/v1/activitypub/user-id/1\"" {
+		t.Errorf("validation error expected but was: %v\n", sut.Validate())
+	}
+}
+
 func TestWebfingerId(t *testing.T) {
 	sut, _ := NewPersonId("https://codeberg.org/api/v1/activitypub/user-id/12345", "forgejo")
 	if sut.AsWebfinger() != "@12345@codeberg.org" {
diff --git a/modules/validation/helpers.go b/modules/validation/helpers.go
index d22520bc33..cc3c40bd15 100644
--- a/modules/validation/helpers.go
+++ b/modules/validation/helpers.go
@@ -138,7 +138,7 @@ func IsValidUsername(name string) bool {
 
 func ValidateNotEmpty(value string, fieldName string) []string {
 	if value == "" {
-		return []string{fmt.Sprintf("Field %v may not be empty.", fieldName)}
+		return []string{fmt.Sprintf("Field %v may not be empty", fieldName)}
 	}
 	return []string{}
 }