Cross-cutting platform administration — tenants, identity & RBAC, licensing, settings, audit, and support. Auto-generated from the platform OpenAPI schema so it matches the running API.
REST API for this feature — 151 operations across 107 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).
Base URL
https://<your-versus-host>/api· AuthAuthorization: Bearer <JWT>(fromPOST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.
POST /api/activation/v1/activate§3.1 — exchange a one-time activation code for a node-bound .veslic.
Responses: 200
GET /api/activation/v1/issuedRecent issued licenses + their activation state, for the Control Plane.
Responses: 200
POST /api/activation/v1/mint-codeMint a fresh activation code for an existing issued license.
Responses: 200
POST /api/activation/v1/revokeRevoke an issued license — connected installs go read-only on next heartbeat.
Responses: 200
POST /api/activation/v1/validate§3.2 — heartbeat: state / revocation / superseding token, signed.
Responses: 200
POST /api/ai/analyze-device/Create analyze device
Responses: 200
POST /api/ai/analyze-screen/Vision + live-state helper. Looks at a screenshot of the app and, using RBAC-scoped
Responses: 200
POST /api/ai/analyze-waf/Create analyze waf
Responses: 200
POST /api/ai/appbuilder-build/App Builder AI that actually creates app components from a description.
Responses: 200
POST /api/ai/appbuilder-chat/App Builder AI guide — walks admins through building Versus apps.
Responses: 200
POST /api/ai/chat/Create chat
Responses: 200
POST /api/ai/generate-report/Create generate report
Responses: 200
POST /api/ai/panel-chat/Streaming-compatible chat with automatic environment context injection.
Responses: 200
POST /api/ai/suggest-irule/Create suggest irule
Responses: 200
GET /api/audit-log/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
action | query | no | string | * create - Create |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
resource_type | query | no | string | |
search | query | no | string | A search term. |
user | query | no | string |
Responses: 200 → PaginatedAuditList
GET /api/audit-log/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this audit. |
Responses: 200 → Audit
GET /api/auth/oidc/callbackList callbacks
Responses: 200
GET /api/auth/oidc/enabledPublic: lets the login page decide whether to show the SSO button.
Responses: 200
GET /api/auth/oidc/loginList logins
Responses: 200
GET /api/auth/oidc/logoutRP-initiated single logout (VS-SPEC-IDENTITY-PLATFORM-001 §7).
Responses: 200
POST /api/auth/saml/acs/Assertion Consumer Service — receives the IdP POST after successful SSO.
Responses: 200
GET /api/auth/saml/login/Redirects the browser to the IdP SSO URL.
Responses: 200
GET /api/auth/sso/callbackList callbacks
Responses: 200
GET /api/auth/sso/enabledPublic: lets the login page decide whether to show the SSO button.
Responses: 200
GET /api/auth/sso/loginList logins
Responses: 200
POST /api/auth/token/Multi-backend login endpoint.
Responses: 200
POST /api/auth/token/refresh/Takes a refresh type JSON web token and returns an access type JSON web
Request body (application/json): TokenRefreshRequest
Responses: 200 → TokenRefresh
POST /api/auth/totp/confirm/Verifies the first code from an authenticator app against the
Responses: 200
POST /api/auth/totp/enroll/Starts (or restarts) TOTP enrollment for the current user — issues
Responses: 200
GET /api/auth/totp/status/Whether the current user has a confirmed authenticator — drives the
Responses: 200
POST /api/auth/totp/verify/Completes login for a user LoginView returned mfa_required for.
Responses: 200
GET /api/auth-backends/Configure pluggable auth backends. Super Admin only.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedAuthBackendConfigList
POST /api/auth-backends/Configure pluggable auth backends. Super Admin only.
Request body (application/json): AuthBackendConfigRequest
Responses: 201 → AuthBackendConfig
GET /api/auth-backends/status/Return enabled/disabled state of all four backends.
Responses: 200 → AuthBackendConfig
GET /api/auth-backends/{id}/Configure pluggable auth backends. Super Admin only.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Responses: 200 → AuthBackendConfig
PUT /api/auth-backends/{id}/Configure pluggable auth backends. Super Admin only.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Request body (application/json): AuthBackendConfigRequest
Responses: 200 → AuthBackendConfig
PATCH /api/auth-backends/{id}/Configure pluggable auth backends. Super Admin only.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Request body (application/json): PatchedAuthBackendConfigRequest
Responses: 200 → AuthBackendConfig
DELETE /api/auth-backends/{id}/Configure pluggable auth backends. Super Admin only.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Responses: 204
POST /api/auth-backends/{id}/import_idp_metadata/Parse IdP SAML metadata XML (or fetch from URL) and return extracted fields.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Request body (application/json): AuthBackendConfigRequest
Responses: 200 → AuthBackendConfig
GET /api/auth-backends/{id}/sp_metadata/Generate SAML SP metadata XML from the saved config.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Responses: 200 → AuthBackendConfig
POST /api/auth-backends/{id}/test/Test connectivity for a backend without saving credentials.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this auth backend config. |
Request body (application/json): AuthBackendConfigRequest
Responses: 200 → AuthBackendConfig
GET /api/client-tools/List client tools
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
Responses: 200 → ClientTool[]
POST /api/client-tools/Create client tool
Request body (application/json): ClientToolRequest
Responses: 201 → ClientTool
GET /api/client-tools/{filename}/Retrieve client tool
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
filename | path | yes | string |
Responses: 200 → ClientTool
PUT /api/client-tools/{filename}/Update client tool
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
filename | path | yes | string |
Request body (application/json): ClientToolRequest
Responses: 200 → ClientTool
PATCH /api/client-tools/{filename}/Update client tool
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
filename | path | yes | string |
Request body (application/json): PatchedClientToolRequest
Responses: 200 → ClientTool
DELETE /api/client-tools/{filename}/Delete client tool
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
filename | path | yes | string |
Responses: 204
GET /api/client-tools/{filename}/download/Download: client tool
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
filename | path | yes | string |
Responses: 200 → ClientTool
GET /api/clients/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedClientList
POST /api/clients/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): ClientRequest
Responses: 201 → Client
GET /api/clients/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this client. |
Responses: 200 → Client
PUT /api/clients/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this client. |
Request body (application/json): ClientRequest
Responses: 200 → Client
PATCH /api/clients/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this client. |
Request body (application/json): PatchedClientRequest
Responses: 200 → Client
DELETE /api/clients/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this client. |
Responses: 204
GET /api/default-roles/Default roles are system-defined and read-only from the API.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedDefaultRoleList
GET /api/default-roles/permissions_list/Return the full list of available permission strings.
Responses: 200 → DefaultRole
GET /api/default-roles/{id}/Default roles are system-defined and read-only from the API.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this default role. |
Responses: 200 → DefaultRole
GET /api/group-mappings/List group mappings
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
default_role | query | no | integer | |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
provider | query | no | string | * ldap - AD / LDAP |
scoped_role | query | no | integer | |
search | query | no | string | A search term. |
Responses: 200 → PaginatedGroupMappingList
POST /api/group-mappings/Create group mapping
Request body (application/json): GroupMappingRequest
Responses: 201 → GroupMapping
GET /api/group-mappings/{id}/Retrieve group mapping
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this group mapping. |
Responses: 200 → GroupMapping
PUT /api/group-mappings/{id}/Update group mapping
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this group mapping. |
Request body (application/json): GroupMappingRequest
Responses: 200 → GroupMapping
PATCH /api/group-mappings/{id}/Update group mapping
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this group mapping. |
Request body (application/json): PatchedGroupMappingRequest
Responses: 200 → GroupMapping
DELETE /api/group-mappings/{id}/Delete group mapping
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this group mapping. |
Responses: 204
GET /api/import-jobs/List import jobs
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
device | query | no | integer | |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
status | query | no | string | * pending - Pending |
Responses: 200 → PaginatedDeviceImportJobList
GET /api/import-jobs/{id}/Retrieve import job
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this device import job. |
Responses: 200 → DeviceImportJob
POST /api/internal/idp/confirm-totpCreate confirm totp
Responses: 200
POST /api/internal/idp/enroll-totpCreate enroll totp
Responses: 200
GET /api/internal/idp/userinfoList userinfos
Responses: 200
POST /api/internal/idp/verify-passwordCreate verify password
Responses: 200
POST /api/internal/idp/verify-totpCreate verify totp
Responses: 200
POST /api/licensing/activateOnline activation: exchange an activation code for a node-bound license
Responses: 200
POST /api/licensing/applyCreate apply
Responses: 200
GET /api/licensing/fingerprintList fingerprints
Responses: 200
POST /api/licensing/issueSign a new license token (issuer side). The Ed25519 private key comes from
Responses: 200
GET /api/licensing/issue-metaForm metadata for the Control Plane license generator: the feature
Responses: 200
GET /api/licensing/pricingReference pricing model for the quote generator (units, bands, discounts).
Responses: 200
GET /api/licensing/pricing-configRead / edit / reset the quote Rate Card. GET returns the effective config
Responses: 200
PUT /api/licensing/pricing-configRead / edit / reset the quote Rate Card. GET returns the effective config
Responses: 200
DELETE /api/licensing/pricing-configRead / edit / reset the quote Rate Card. GET returns the effective config
Responses: 204
POST /api/licensing/quotePrice a quote from per-module quantities + bundle + term.
Responses: 200
POST /api/licensing/quote.xlsxReturn the quote as a Versus-branded .xlsx download.
Responses: 200
GET /api/licensing/statusList status
Responses: 200
POST /api/licensing/validate'Check now' — run one heartbeat against the license server and return the
Responses: 200
GET /api/options/{provider}/Dynamic options provider for form fields.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
provider | path | yes | string |
Responses: 200
GET /api/public/kb/{public_slug}/{page_slug}/UNAUTHENTICATED read-only page render (spec §7/§9 rule 6).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
page_slug | path | yes | string | |
public_slug | path | yes | string |
Responses: 200
POST /api/public/v1/set-passwordPublic invite completion for Versus-IdP tenants (POST
Responses: 200
POST /api/public/v1/tenant-registrations/{token}/Public registration completion (spec §2.4 steps 1-2) — POST
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
token | path | yes | string |
Responses: 200
POST /api/public/v1/tenant-requestsPublic intake (spec §2.1) — POST /api/public/v1/tenant-requests.
Responses: 200
GET /api/role-assignments/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
assignment_source | query | no | string | * group_match - Group Match |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
scoped_role | query | no | integer | |
search | query | no | string | A search term. |
user | query | no | integer |
Responses: 200 → PaginatedUserRoleAssignmentList
POST /api/role-assignments/Manage manual scoped-role assignments to specific users.
Request body (application/json): UserRoleAssignmentRequest
Responses: 201 → UserRoleAssignment
GET /api/role-assignments/for-user/{user_id}/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
user_id | path | yes | string |
Responses: 200 → UserRoleAssignment
GET /api/role-assignments/{id}/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user role assignment. |
Responses: 200 → UserRoleAssignment
PUT /api/role-assignments/{id}/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user role assignment. |
Request body (application/json): UserRoleAssignmentRequest
Responses: 200 → UserRoleAssignment
PATCH /api/role-assignments/{id}/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user role assignment. |
Request body (application/json): PatchedUserRoleAssignmentRequest
Responses: 200 → UserRoleAssignment
DELETE /api/role-assignments/{id}/Manage manual scoped-role assignments to specific users.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user role assignment. |
Responses: 204
GET /api/roles/List roles
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedRoleList
POST /api/roles/Create role
Request body (application/json): RoleRequest
Responses: 201 → Role
GET /api/roles/{id}/Retrieve role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this role. |
Responses: 200 → Role
PUT /api/roles/{id}/Update role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this role. |
Request body (application/json): RoleRequest
Responses: 200 → Role
PATCH /api/roles/{id}/Update role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this role. |
Request body (application/json): PatchedRoleRequest
Responses: 200 → Role
DELETE /api/roles/{id}/Delete role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this role. |
Responses: 204
GET /api/scoped-roles/List scoped roles
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedScopedRoleList
POST /api/scoped-roles/Create scoped role
Request body (application/json): ScopedRoleWriteRequest
Responses: 201 → ScopedRoleWrite
GET /api/scoped-roles/{id}/Retrieve scoped role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scoped role. |
Responses: 200 → ScopedRole
PUT /api/scoped-roles/{id}/Update scoped role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scoped role. |
Request body (application/json): ScopedRoleWriteRequest
Responses: 200 → ScopedRoleWrite
PATCH /api/scoped-roles/{id}/Update scoped role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scoped role. |
Request body (application/json): PatchedScopedRoleWriteRequest
Responses: 200 → ScopedRoleWrite
DELETE /api/scoped-roles/{id}/Delete scoped role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scoped role. |
Responses: 204
GET /api/scoped-roles/{id}/assignments/Assignments: scoped role
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scoped role. |
Responses: 200 → ScopedRole
GET /api/search/List searchs
Responses: 200
GET /api/settings/List settings
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedSystemSettingsList
POST /api/settings/Create setting
Request body (application/json): SystemSettingsRequest
Responses: 201 → SystemSettings
POST /api/settings/bulk_update/Create bulk update
Request body (application/json): SystemSettingsRequest
Responses: 200 → SystemSettings
GET /api/settings/{id}/Retrieve setting
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this system settings. |
Responses: 200 → SystemSettings
PUT /api/settings/{id}/Update setting
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this system settings. |
Request body (application/json): SystemSettingsRequest
Responses: 200 → SystemSettings
PATCH /api/settings/{id}/Update setting
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this system settings. |
Request body (application/json): PatchedSystemSettingsRequest
Responses: 200 → SystemSettings
DELETE /api/settings/{id}/Delete setting
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this system settings. |
Responses: 204
POST /api/support/ask/POST /api/support/ask/ {question, conversation_id?}
Responses: 200
POST /api/support/escalate/POST /api/support/escalate/ {conversation_id, reason?}
Responses: 200
POST /api/support/public/ask/POST /api/support/public/ask/ {question, conversation_id?}
Responses: 200
GET /api/tenant-admin/meta//api/tenant-admin/meta/ — assignable roles + context for the console UI.
Responses: 200
GET /api/tenant-admin/users//api/tenant-admin/users/ — org-scoped user administration.
Responses: 200
POST /api/tenant-admin/users/Invite a user: {email, first_name?, last_name?, role?}.
Responses: 201
DELETE /api/tenant-admin/users/{id}//api/tenant-admin/users/ — org-scoped user administration.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string |
Responses: 204
POST /api/tenant-admin/users/{id}/deactivate//api/tenant-admin/users/ — org-scoped user administration.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string |
Responses: 200
POST /api/tenant-admin/users/{id}/reactivate//api/tenant-admin/users/ — org-scoped user administration.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string |
Responses: 200
POST /api/tenant-admin/users/{id}/role//api/tenant-admin/users/ — org-scoped user administration.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string |
Responses: 200
POST /api/tenants/eula/accept/Records an immutable acceptance (spec §6) — body_sha256 is
Responses: 200
GET /api/tenants/eula/current/The version a registration/login flow should show and require
Responses: 200
GET /api/tenants/my-entitlement/The caller's tenant entitlement (VS-SPEC-SAAS-LICENSING-001) — the module
Responses: 200
GET /api/tenants/notes/The RLS + envelope-encryption pilot's only endpoint. The queryset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedTenantNoteList
POST /api/tenants/notes/The RLS + envelope-encryption pilot's only endpoint. The queryset
Request body (application/json): TenantNoteRequest
Responses: 201 → TenantNote
GET /api/tenants/notes/{id}/The RLS + envelope-encryption pilot's only endpoint. The queryset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this tenant note. |
Responses: 200 → TenantNote
PUT /api/tenants/notes/{id}/The RLS + envelope-encryption pilot's only endpoint. The queryset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this tenant note. |
Request body (application/json): TenantNoteRequest
Responses: 200 → TenantNote
PATCH /api/tenants/notes/{id}/The RLS + envelope-encryption pilot's only endpoint. The queryset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this tenant note. |
Request body (application/json): PatchedTenantNoteRequest
Responses: 200 → TenantNote
DELETE /api/tenants/notes/{id}/The RLS + envelope-encryption pilot's only endpoint. The queryset
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | A UUID string identifying this tenant note. |
Responses: 204
GET /api/tenants/setup-status/Tells the frontend whether the logged-in user still needs to finish
Responses: 200
GET /api/users/List users
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
is_active | query | no | boolean | |
is_staff | query | no | boolean | |
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedUserList
POST /api/users/Create user
Request body (application/json): UserCreateRequest
Responses: 201 → UserCreate
GET /api/users/me/List mes
Responses: 200 → User
PATCH /api/users/me/Update me
Request body (application/json): PatchedUserRequest
Responses: 200 → User
GET /api/users/my-role-request/List my role requests
Responses: 200 → User
POST /api/users/request-role/Create request role
Request body (application/json): UserRequest
Responses: 200 → User
GET /api/users/role-requests/List role requests
Responses: 200 → User
GET /api/users/{id}/Retrieve user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Responses: 200 → User
PUT /api/users/{id}/Update user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): UserRequest
Responses: 200 → User
PATCH /api/users/{id}/Update user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): PatchedUserRequest
Responses: 200 → User
DELETE /api/users/{id}/Delete user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Responses: 204
POST /api/users/{id}/reset-mfa/Admin: clear a user's TOTP device so they can re-enrol — lockout
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): UserRequest
Responses: 200 → User
POST /api/users/{id}/review-request/Review request: user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): UserRequest
Responses: 200 → User
POST /api/users/{id}/set-role/Set role: user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): UserRequest
Responses: 200 → User
POST /api/users/{id}/set_password/Set password: user
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this user. |
Request body (application/json): UserRequest
Responses: 200 → User
Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.