136 lines
4.0 KiB
YAML
136 lines
4.0 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: TenantPilot Admin - Directory Groups (v1)
|
|
version: 0.1.0
|
|
description: |
|
|
Admin surfaces for tenant-scoped Entra groups cache (metadata only).
|
|
Rendering uses cached data only; sync runs read the directory via app-only auth.
|
|
|
|
paths:
|
|
/admin/tenants/{tenantId}/directory/groups:
|
|
get:
|
|
summary: List cached groups
|
|
parameters:
|
|
- $ref: '#/components/parameters/TenantId'
|
|
- in: query
|
|
name: q
|
|
schema: { type: string }
|
|
description: Search by display name or ID
|
|
- in: query
|
|
name: stale
|
|
schema: { type: boolean }
|
|
description: Filter to stale groups only
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/EntraGroup'
|
|
|
|
/admin/tenants/{tenantId}/directory/groups/{entraGroupId}:
|
|
get:
|
|
summary: Get group details
|
|
parameters:
|
|
- $ref: '#/components/parameters/TenantId'
|
|
- in: path
|
|
name: entraGroupId
|
|
required: true
|
|
schema: { type: string }
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EntraGroup'
|
|
|
|
/admin/tenants/{tenantId}/directory/groups/sync:
|
|
post:
|
|
summary: Start a manual groups sync
|
|
parameters:
|
|
- $ref: '#/components/parameters/TenantId'
|
|
responses:
|
|
'202':
|
|
description: Accepted (run created)
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EntraGroupSyncRun'
|
|
|
|
/admin/tenants/{tenantId}/directory/groups/runs:
|
|
get:
|
|
summary: List group sync runs
|
|
parameters:
|
|
- $ref: '#/components/parameters/TenantId'
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/EntraGroupSyncRun'
|
|
|
|
/admin/tenants/{tenantId}/directory/groups/runs/{runId}:
|
|
get:
|
|
summary: Get group sync run details
|
|
parameters:
|
|
- $ref: '#/components/parameters/TenantId'
|
|
- in: path
|
|
name: runId
|
|
required: true
|
|
schema: { type: integer }
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/EntraGroupSyncRun'
|
|
|
|
components:
|
|
parameters:
|
|
TenantId:
|
|
in: path
|
|
name: tenantId
|
|
required: true
|
|
schema: { type: integer }
|
|
|
|
schemas:
|
|
EntraGroup:
|
|
type: object
|
|
required: [tenant_id, entra_group_id, display_name, last_seen_at]
|
|
properties:
|
|
tenant_id: { type: integer }
|
|
entra_group_id: { type: string }
|
|
display_name: { type: string }
|
|
group_type: { type: string }
|
|
security_enabled: { type: boolean, nullable: true }
|
|
mail_enabled: { type: boolean, nullable: true }
|
|
group_types:
|
|
type: array
|
|
items: { type: string }
|
|
last_seen_at: { type: string, format: date-time }
|
|
|
|
EntraGroupSyncRun:
|
|
type: object
|
|
required: [tenant_id, selection_key, status, created_at]
|
|
properties:
|
|
id: { type: integer }
|
|
tenant_id: { type: integer }
|
|
initiated_by_user_id: { type: integer, nullable: true }
|
|
selection_key: { type: string }
|
|
status: { type: string }
|
|
started_at: { type: string, format: date-time, nullable: true }
|
|
finished_at: { type: string, format: date-time, nullable: true }
|
|
observed_count: { type: integer, nullable: true }
|
|
upserted_count: { type: integer, nullable: true }
|
|
error_count: { type: integer, nullable: true }
|
|
error_category: { type: string, nullable: true }
|
|
error_summary: { type: string, nullable: true }
|
|
created_at: { type: string, format: date-time }
|