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
| Name | Type | Required | Default |
|---|---|---|---|
| tenantId | Guid | Yes | - |
| search | string | No | null |
| roleFilter | string | No | null |
| statusFilter | string | null | No | null |
| page | int | No | 1 |
| pageSize | int | No | 20 |
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
| Name | Type | Required | Default |
|---|---|---|---|
| search | string | No | null |
| planType | int | null | No | null |
| statusFilter | string | null | No | null |
| page | int | No | 1 |
| pageSize | int | No | 20 |
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
}