diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/PasswordChangedEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/PasswordChangedEvent.cs
new file mode 100644
index 0000000000..bedd06d16d
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/PasswordChangedEvent.cs
@@ -0,0 +1,17 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when a user changes their password.
+public sealed record PasswordChangedEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ bool WasReset,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static PasswordChangedEvent Create(string userId, bool wasReset = false, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, wasReset, correlationId, tenantId);
+}
diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/SessionRevokedEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/SessionRevokedEvent.cs
new file mode 100644
index 0000000000..17fb3c7aa5
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/SessionRevokedEvent.cs
@@ -0,0 +1,19 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when a user session is revoked.
+public sealed record SessionRevokedEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ Guid SessionId,
+ string? RevokedBy,
+ string? Reason,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static SessionRevokedEvent Create(string userId, Guid sessionId, string? revokedBy = null, string? reason = null, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, sessionId, revokedBy, reason, correlationId, tenantId);
+}
diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/UserActivatedEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/UserActivatedEvent.cs
new file mode 100644
index 0000000000..def5227cb1
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/UserActivatedEvent.cs
@@ -0,0 +1,17 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when a user account is activated.
+public sealed record UserActivatedEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ string? ActivatedBy,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static UserActivatedEvent Create(string userId, string? activatedBy = null, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, activatedBy, correlationId, tenantId);
+}
diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/UserDeactivatedEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/UserDeactivatedEvent.cs
new file mode 100644
index 0000000000..c464b04b8f
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/UserDeactivatedEvent.cs
@@ -0,0 +1,18 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when a user account is deactivated.
+public sealed record UserDeactivatedEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ string? DeactivatedBy,
+ string? Reason,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static UserDeactivatedEvent Create(string userId, string? deactivatedBy = null, string? reason = null, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, deactivatedBy, reason, correlationId, tenantId);
+}
diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/UserRegisteredEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/UserRegisteredEvent.cs
new file mode 100644
index 0000000000..ae6f11cf82
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/UserRegisteredEvent.cs
@@ -0,0 +1,19 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when a new user registers in the system.
+public sealed record UserRegisteredEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ string Email,
+ string? FirstName,
+ string? LastName,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static UserRegisteredEvent Create(string userId, string email, string? firstName = null, string? lastName = null, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, email, firstName, lastName, correlationId, tenantId);
+}
diff --git a/src/Modules/Identity/Modules.Identity/Domain/Events/UserRoleAssignedEvent.cs b/src/Modules/Identity/Modules.Identity/Domain/Events/UserRoleAssignedEvent.cs
new file mode 100644
index 0000000000..3356b9c76d
--- /dev/null
+++ b/src/Modules/Identity/Modules.Identity/Domain/Events/UserRoleAssignedEvent.cs
@@ -0,0 +1,17 @@
+using FSH.Framework.Core.Domain;
+
+namespace FSH.Modules.Identity.Domain.Events;
+
+/// Raised when roles are assigned to a user.
+public sealed record UserRoleAssignedEvent(
+ Guid EventId,
+ DateTimeOffset OccurredOnUtc,
+ string UserId,
+ IReadOnlyList AssignedRoles,
+ string? CorrelationId = null,
+ string? TenantId = null
+) : DomainEvent(EventId, OccurredOnUtc, CorrelationId, TenantId)
+{
+ public static UserRoleAssignedEvent Create(string userId, IEnumerable assignedRoles, string? correlationId = null, string? tenantId = null)
+ => new(Guid.NewGuid(), DateTimeOffset.UtcNow, userId, assignedRoles.ToList().AsReadOnly(), correlationId, tenantId);
+}