diff --git a/API/ROLAC.API/DTOs/Auth/LoginRequest.cs b/API/ROLAC.API/DTOs/Auth/LoginRequest.cs
new file mode 100644
index 0000000..d33aeb2
--- /dev/null
+++ b/API/ROLAC.API/DTOs/Auth/LoginRequest.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace ROLAC.API.DTOs.Auth;
+
+public class LoginRequest
+{
+ [Required]
+ [EmailAddress]
+ [MaxLength(256)]
+ public string Email { get; set; } = null!;
+
+ [Required]
+ [MinLength(8)]
+ [MaxLength(128)]
+ public string Password { get; set; } = null!;
+}
diff --git a/API/ROLAC.API/DTOs/Auth/LoginResponse.cs b/API/ROLAC.API/DTOs/Auth/LoginResponse.cs
new file mode 100644
index 0000000..d7a83bc
--- /dev/null
+++ b/API/ROLAC.API/DTOs/Auth/LoginResponse.cs
@@ -0,0 +1,20 @@
+namespace ROLAC.API.DTOs.Auth;
+
+public class LoginResponse
+{
+ /// Short-lived JWT (15 min). Store in memory — never in localStorage.
+ public string AccessToken { get; set; } = null!;
+
+ /// Seconds until the access token expires. Always 900 (15 × 60).
+ public int ExpiresIn { get; set; }
+
+ public UserInfo User { get; set; } = null!;
+}
+
+public class UserInfo
+{
+ public string Id { get; set; } = null!;
+ public string Email { get; set; } = null!;
+ public IList Roles { get; set; } = [];
+ public string LanguagePreference { get; set; } = "en";
+}