diff --git a/src/IncidentOps.Contracts/Auth/AuthResponse.cs b/src/IncidentOps.Contracts/Auth/AuthResponse.cs
new file mode 100644
index 0000000..d9eb5b6
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/AuthResponse.cs
@@ -0,0 +1,5 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record AuthResponse(string AccessToken, string RefreshToken, ActiveOrgDto ActiveOrg);
+
+public record ActiveOrgDto(Guid Id, string Name, string Slug, string Role);
diff --git a/src/IncidentOps.Contracts/Auth/LoginRequest.cs b/src/IncidentOps.Contracts/Auth/LoginRequest.cs
new file mode 100644
index 0000000..1e09a8c
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/LoginRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record LoginRequest(string Email, string Password, Guid? OrgId = null);
diff --git a/src/IncidentOps.Contracts/Auth/LogoutRequest.cs b/src/IncidentOps.Contracts/Auth/LogoutRequest.cs
new file mode 100644
index 0000000..ca718e3
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/LogoutRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record LogoutRequest(string RefreshToken);
diff --git a/src/IncidentOps.Contracts/Auth/MeResponse.cs b/src/IncidentOps.Contracts/Auth/MeResponse.cs
new file mode 100644
index 0000000..935d9b2
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/MeResponse.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record MeResponse(Guid Id, string Email, string DisplayName, ActiveOrgDto ActiveOrg);
diff --git a/src/IncidentOps.Contracts/Auth/RefreshRequest.cs b/src/IncidentOps.Contracts/Auth/RefreshRequest.cs
new file mode 100644
index 0000000..e125f0b
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/RefreshRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record RefreshRequest(string RefreshToken);
diff --git a/src/IncidentOps.Contracts/Auth/RegisterRequest.cs b/src/IncidentOps.Contracts/Auth/RegisterRequest.cs
new file mode 100644
index 0000000..6cced21
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/RegisterRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record RegisterRequest(string Email, string Password, string DisplayName);
diff --git a/src/IncidentOps.Contracts/Auth/SwitchOrgRequest.cs b/src/IncidentOps.Contracts/Auth/SwitchOrgRequest.cs
new file mode 100644
index 0000000..e8b9fe9
--- /dev/null
+++ b/src/IncidentOps.Contracts/Auth/SwitchOrgRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Auth;
+
+public record SwitchOrgRequest(string RefreshToken, Guid OrgId);
diff --git a/src/IncidentOps.Contracts/IncidentOps.Contracts.csproj b/src/IncidentOps.Contracts/IncidentOps.Contracts.csproj
new file mode 100644
index 0000000..b760144
--- /dev/null
+++ b/src/IncidentOps.Contracts/IncidentOps.Contracts.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
diff --git a/src/IncidentOps.Contracts/Incidents/CommentRequest.cs b/src/IncidentOps.Contracts/Incidents/CommentRequest.cs
new file mode 100644
index 0000000..f19cc4b
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/CommentRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record CommentRequest(string Content);
diff --git a/src/IncidentOps.Contracts/Incidents/CreateIncidentRequest.cs b/src/IncidentOps.Contracts/Incidents/CreateIncidentRequest.cs
new file mode 100644
index 0000000..4450c83
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/CreateIncidentRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record CreateIncidentRequest(string Title, string? Description);
diff --git a/src/IncidentOps.Contracts/Incidents/IncidentDto.cs b/src/IncidentOps.Contracts/Incidents/IncidentDto.cs
new file mode 100644
index 0000000..249a1de
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/IncidentDto.cs
@@ -0,0 +1,17 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record IncidentDto(
+ Guid Id,
+ Guid ServiceId,
+ string ServiceName,
+ string Title,
+ string? Description,
+ string Status,
+ int Version,
+ Guid? AssignedToUserId,
+ string? AssignedToUserName,
+ DateTime CreatedAt,
+ DateTime? AcknowledgedAt,
+ DateTime? MitigatedAt,
+ DateTime? ResolvedAt
+);
diff --git a/src/IncidentOps.Contracts/Incidents/IncidentEventDto.cs b/src/IncidentOps.Contracts/Incidents/IncidentEventDto.cs
new file mode 100644
index 0000000..a94107d
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/IncidentEventDto.cs
@@ -0,0 +1,10 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record IncidentEventDto(
+ Guid Id,
+ string EventType,
+ Guid? ActorUserId,
+ string? ActorUserName,
+ string? Payload,
+ DateTime CreatedAt
+);
diff --git a/src/IncidentOps.Contracts/Incidents/IncidentListResponse.cs b/src/IncidentOps.Contracts/Incidents/IncidentListResponse.cs
new file mode 100644
index 0000000..9993930
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/IncidentListResponse.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record IncidentListResponse(IReadOnlyList Items, string? NextCursor);
diff --git a/src/IncidentOps.Contracts/Incidents/TransitionRequest.cs b/src/IncidentOps.Contracts/Incidents/TransitionRequest.cs
new file mode 100644
index 0000000..e7f6b31
--- /dev/null
+++ b/src/IncidentOps.Contracts/Incidents/TransitionRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Incidents;
+
+public record TransitionRequest(string Action, int ExpectedVersion);
diff --git a/src/IncidentOps.Contracts/Orgs/CreateNotificationTargetRequest.cs b/src/IncidentOps.Contracts/Orgs/CreateNotificationTargetRequest.cs
new file mode 100644
index 0000000..6107aea
--- /dev/null
+++ b/src/IncidentOps.Contracts/Orgs/CreateNotificationTargetRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Orgs;
+
+public record CreateNotificationTargetRequest(string Name, string TargetType, string Configuration, bool IsEnabled);
diff --git a/src/IncidentOps.Contracts/Orgs/NotificationTargetDto.cs b/src/IncidentOps.Contracts/Orgs/NotificationTargetDto.cs
new file mode 100644
index 0000000..247aab6
--- /dev/null
+++ b/src/IncidentOps.Contracts/Orgs/NotificationTargetDto.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Orgs;
+
+public record NotificationTargetDto(Guid Id, string Name, string TargetType, string Configuration, bool IsEnabled, DateTime CreatedAt);
diff --git a/src/IncidentOps.Contracts/Orgs/OrgDto.cs b/src/IncidentOps.Contracts/Orgs/OrgDto.cs
new file mode 100644
index 0000000..90f369c
--- /dev/null
+++ b/src/IncidentOps.Contracts/Orgs/OrgDto.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Orgs;
+
+public record OrgDto(Guid Id, string Name, string Slug, string Role);
diff --git a/src/IncidentOps.Contracts/Orgs/OrgMemberDto.cs b/src/IncidentOps.Contracts/Orgs/OrgMemberDto.cs
new file mode 100644
index 0000000..fdc20c9
--- /dev/null
+++ b/src/IncidentOps.Contracts/Orgs/OrgMemberDto.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Orgs;
+
+public record OrgMemberDto(Guid Id, Guid UserId, string Email, string DisplayName, string Role, DateTime JoinedAt);
diff --git a/src/IncidentOps.Contracts/Services/CreateServiceRequest.cs b/src/IncidentOps.Contracts/Services/CreateServiceRequest.cs
new file mode 100644
index 0000000..a6c4174
--- /dev/null
+++ b/src/IncidentOps.Contracts/Services/CreateServiceRequest.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Services;
+
+public record CreateServiceRequest(string Name, string Slug, string? Description);
diff --git a/src/IncidentOps.Contracts/Services/ServiceDto.cs b/src/IncidentOps.Contracts/Services/ServiceDto.cs
new file mode 100644
index 0000000..b13827e
--- /dev/null
+++ b/src/IncidentOps.Contracts/Services/ServiceDto.cs
@@ -0,0 +1,3 @@
+namespace IncidentOps.Contracts.Services;
+
+public record ServiceDto(Guid Id, string Name, string Slug, string? Description, DateTime CreatedAt);