Ana içeriğe geç

Identity — Users, Tenants ve Management API'leri

Base Routes: /api/users, /api/tenants, /api/roles, /api/departments, /api/groups
Service: Taz.SaaS.Identity.API

Tüm endpoint'ler Bearer Token (Auth) gerektirir. Yetkilendirme IRolePermissionService ile claim-based yapılır.


Users Controller — /api/users

1. List Users

HTTP Method: GET
Route: /api/users?tenantId={guid}&search={string}&page={int}&pageSize={int}
Auth: Required

Query Parameters

NameTypeRequiredDefault
tenantIdGuidYes-
searchstringNonull
roleFilterstringNonull
statusFilterstring | nullNonull
pageintNo1
pageSizeintNo20

Response (200 OK)

{
"success": true,
"result": {
"items": [{
"id": "guid",
"email": "string",
"firstName": "string",
"lastName": "string",
"phoneNumber": "string | null",
"roles": ["string[]"],
"tenantId": "guid",
"isActive": true,
"isEmailVerified": true,
"avatarUrl": "string | null",
"departmentId": "guid | null",
"createdAt": "datetime"
}],
"totalCount": 150,
"totalPages": 8,
"page": 1,
"pageSize": 20
}
}

2. Get User by ID

GET /api/users/{userId:guid}
Auth: Required

Response (200 OK) — UserDto

{
"id": "guid",
"email": "string",
"firstName": "string",
"lastName": "string",
"phoneNumber": "string | null",
"roles": ["string[]"],
"tenantId": "guid",
"isActive": true,
"isEmailVerified": true,
"avatarUrl": "string | null",
"departmentId": "guid | null",
"departmentName": "string | null",
"groups": [{ "id": "guid", "name": "string" }],
"createdAt": "datetime"
}

3. Update User

PUT /api/users/{userId:guid}
Auth: Required

Request Body

{
"firstName": "string (required)",
"lastName": "string (required)",
"phoneNumber": "string | null",
"departmentId": "guid | null",
"roles": ["string[] (required)"],
"isActive": "boolean (required)"
}

4. Delete User

DELETE /api/users/{userId:guid}
Auth: Required

5. Set User Password

PUT /api/users/{userId:password-reset}
Auth: Required

Request Body

{ "newPassword": "string (required)" }

Tenants Controller — /api/tenants

6. List Tenants

GET /api/tenants?search={string}&planType={int}&page={int}&pageSize={int}
Auth: Required (SystemAdmin or TenantOwner)

Query Parameters

NameTypeRequiredDefault
searchstringNonull
planTypeint | nullNonull
statusFilterstring | nullNonull
pageintNo1
pageSizeintNo20

Response (200 OK) — TenantSummaryDto

{
"items": [{
"id": "guid",
"slug": "string",
"name": "string",
"planType": 1,
"status": 1,
"trialExpiresAt": "datetime | null",
"maxAgents": 50,
"maxKnowledgeBases": 20,
"isActive": true,
"createdAt": "datetime"
}],
"totalCount": 42,
"totalPages": 3,
"page": 1,
"pageSize": 20
}

7. Get Tenant by Slug

GET /api/tenants/{slug}
Auth: Required

Response (200 OK) — TenantDetailDto

{
"id": "guid",
"slug": "string",
"name": "string",
"email": "string",
"phone": "string | null",
"planType": 1,
"status": 1,
"trialExpiresAt": "datetime | null",
"maxAgents": 50,
"maxKnowledgeBases": 20,
"maxSeats": 10,
"features": { "aiAgents": true, "knowledgeBase": true },
"isActive": true,
"createdAt": "datetime"
}

8. Create Tenant

POST /api/tenants
Auth: Required (SystemAdmin)

Request Body

{
"slug": "string (required, unique)",
"name": "string (required)",
"email": "string (required)",
"phone": "string | null",
"planType": "int (required, 1-3)",
"maxAgents": "int (required)",
"maxKnowledgeBases": "int (required)",
"maxSeats": "int (required)"
}

9. Update Tenant

PUT /api/tenants/{slug}
Auth: Required (SystemAdmin or TenantOwner)

Request Body

{
"name": "string | null",
"email": "string | null",
"phone": "string | null",
"planType": "int | null",
"maxAgents": "int | null",
"maxKnowledgeBases": "int | null",
"maxSeats": "int | null"
}

10. Update Tenant Status

PUT /api/tenants/{slug}/status
Auth: Required (SystemAdmin)

Request Body

{ "newStatus": "string (required, ACTIVE|SUSPENDED|CANCELLED)" }

Roles Controller — /api/roles

11. List Roles

GET /api/roles?tenantId={guid}&page={int}&pageSize={int}
Auth: Required

Response (200 OK) — RoleListDto[]

{
"items": [{
"id": "guid",
"name": "string",
"description": "string | null",
"isSystem": false,
"tenantId": "guid",
"scope": "string | null",
"userCount": 5,
"createdAt": "datetime"
}],
"totalCount": 8,
"totalPages": 1,
"page": 1,
"pageSize": 20
}

12. Create Role

POST /api/roles
Auth: Required

Request Body

{
"name": "string (required)",
"description": "string | null",
"tenantId": "guid (required)",
"scope": "string | null"
}

13. Assign Permissions to Role

PUT /api/roles/{roleId}/permissions
Auth: Required

Request Body

{
"permissions": ["string[] (required)"]
}

Departments Controller — /api/departments

14. List Departments

GET /api/departments?tenantId={guid}&parentId={guid&}&page={int}&pageSize={int}
Auth: Required

Response (200 OK) — DepartmentSummaryDto[]

{
"items": [{
"id": "guid",
"name": "string",
"tenantId": "guid",
"parentId": "guid | null",
"parentName": "string | null",
"childCount": 3,
"userCount": 12
}],
"totalCount": 6,
"totalPages": 1,
"page": 1,
"pageSize": 20
}

15. Create Department

POST /api/departments
Auth: Required

Request Body

{
"name": "string (required)",
"tenantId": "guid (required)",
"parentId": "guid | null"
}

Groups Controller — /api/groups

16. List Groups

GET /api/groups?tenantId={guid}&search={string}&page={int}&pageSize={int}
Auth: Required

Response (200 OK) — GroupSummaryDto[]

{
"items": [{
"id": "guid",
"name": "string",
"tenantId": "guid",
"description": "string | null",
"memberCount": 5,
"createdAt": "datetime"
}],
"totalCount": 4,
"totalPages": 1,
"page": 1,
"pageSize": 20
}

17. Create Group

POST /api/groups
Auth: Required

Request Body

{
"name": "string (required)",
"tenantId": "guid (required)",
"description": "string | null"
}

18. Add User to Group

POST /api/groups/{groupId}/users?userId={guid}
Auth: Required


Suppliers & Processes — /api/suppliers, /api/processes

19. List Suppliers

GET /api/suppliers?tenantId={guid}&search={string}&page={int}&pageSize={int}
Auth: Required

Response (200 OK) — SupplierSummaryDto[]

{
"items": [{
"id": "guid",
"name": "string",
"contactPerson": "string | null",
"phone": "string | null",
"email": "string | null",
"isVendor": true
}],
"totalCount": 10,
"totalPages": 1,
"page": 1,
"pageSize": 20
}

20. Create Supplier

POST /api/suppliers
Auth: Required

Request Body

{
"name": "string (required)",
"contactPerson": "string | null",
"phone": "string | null",
"email": "string | null",
"tenantId": "guid (required)"
}

21. Get Supplier by Id

GET /api/suppliers/{supplierId:guid}
Auth: Required


Product Services — /api/product-services

22. List ProductServices

GET /api/product-services?tenantId={guid}&search={string}&page={int}&pageSize={int}
Auth: Required

Response (200 OK) — ProductServiceSummaryDto[]

{
"items": [{
"id": "guid",
"name": "string",
"code": "string | null",
"description": "string | null",
"tenantId": "guid"
}],
"totalCount": 8,
"totalPages": 1,
"page": 1,
"pageSize": 20
}

23. Create ProductService

POST /api/product-services
Auth: Required

Request Body

{
"name": "string (required)",
"code": "string | null",
"description": "string | null",
"tenantId": "guid (required)"
}

Onboarding Controller — /api/onboarding

24. Start Onboarding

POST /api/onboarding/start
Auth: NotRequired

Request Body

{
"tenantName": "string (required)",
"email": "string (required)",
"firstName": "string (required)",
"lastName": "string (required)"
}

Response (201 Created)

{ "invitationCode": "string" }

Admin Controller — /api/admin

25. Get Audit Logs

GET /api/admin/audit-logs?startDate={date}&endDate={date}&entityType={string}&page={int}&pageSize={int}
Auth: Required (SystemAdmin)

Response (200 OK) — AuditLogDto[]

{
"items": [{
"id": "guid",
"entityType": "string",
"entityId": "string",
"action": "string",
"changes": "string | null",
"userId": "guid",
"userName": "string",
"createdAt": "datetime"
}],
"totalCount": 1000,
"totalPages": 50,
"page": 1,
"pageSize": 20
}

26. Get Integration Events

GET /api/admin/integration-events?page={int}&pageSize={int}
Auth: Required (SystemAdmin)

Response (200 OK) — IntegrationEventDto[]

{
"items": [{
"id": "guid",
"eventType": "string",
"data": "string | null",
"status": "string",
"createdAt": "datetime"
}],
"totalCount": 50,
"totalPages": 3,
"page": 1,
"pageSize": 20
}